summaryrefslogtreecommitdiff
path: root/sci2jsyacc.py
diff options
context:
space:
mode:
authorSunil Shetye2018-06-26 12:08:19 +0530
committerSunil Shetye2018-06-26 12:08:19 +0530
commitafed64f1a0eab0b2d742088186d7bc340a2c895b (patch)
tree7270fd2e6c53e6df90c71e2fcbccd8149c3553a5 /sci2jsyacc.py
parent7465daea85285ba7f291b6bf6ddc45caa9e7ad65 (diff)
downloadsci2js-afed64f1a0eab0b2d742088186d7bc340a2c895b.tar.gz
sci2js-afed64f1a0eab0b2d742088186d7bc340a2c895b.tar.bz2
sci2js-afed64f1a0eab0b2d742088186d7bc340a2c895b.zip
return block type in define and set
Diffstat (limited to 'sci2jsyacc.py')
-rwxr-xr-xsci2jsyacc.py18
1 files changed, 12 insertions, 6 deletions
diff --git a/sci2jsyacc.py b/sci2jsyacc.py
index c3ee9df9..a6bbda49 100755
--- a/sci2jsyacc.py
+++ b/sci2jsyacc.py
@@ -60,15 +60,16 @@ def p_jobfunctionblock_jobfunctionstatement_statementblock_endfunction(p):
fname = '%s' % (p[1])
indent = '%*s' % (INDENT_LEVEL * INDENT_SIZE, ' ')
INDENT_LEVEL += 1
+ blocktype = getblocktype(fname)
jdefine = JOB_BLOCKS['"define"'] if '"define"' in JOB_BLOCKS else ''
- jdefine = '%s%s.prototype.define = function %s() {\n%s%s}\n' % (indent, fname, fname, jdefine, indent)
+ jdefine = '%s%s.prototype.define = function %s() {\n%s%*sreturn new %s(this.x);\n%s}\n' % (indent, fname, fname, jdefine, INDENT_LEVEL * INDENT_SIZE, ' ', blocktype, indent)
jdetails = JOB_BLOCKS['"details"'] if '"details"' in JOB_BLOCKS else ''
jdetails = '%s%s.prototype.details = function %s() {\n%s%*sreturn this.x;\n%s}\n' % (indent, fname, fname, jdetails, INDENT_LEVEL * INDENT_SIZE, ' ', indent)
jget = JOB_BLOCKS['"get"'] if '"get"' in JOB_BLOCKS else ''
jget = '%s%s.prototype.get = function %s() {\n%s%s}\n' % (indent, fname, fname, jget, indent)
jset = JOB_BLOCKS['"set"'] if '"set"' in JOB_BLOCKS else ''
- jset = '%s%s.prototype.set = function %s() {\n%s%s}\n' % (indent, fname, fname, jset, indent)
+ jset = '%s%s.prototype.set = function %s() {\n%s%*sreturn new %s(this.x);\n%s}\n' % (indent, fname, fname, jset, INDENT_LEVEL * INDENT_SIZE, ' ', blocktype, indent)
INDENT_LEVEL -= 1
p[0] = 'function %s() {\n%s%s%s%s}' % (fname, jdefine, jdetails, jget, jset)
@@ -321,8 +322,7 @@ def p_selectjobstatement_select(p):
def p_casestatement_case(p):
'''casestatement : CASE expression THEN EOL
- | CASE expression EOL
- | CASE expression THEN COMMA'''
+ | CASE expression EOL'''
global INDENT_LEVEL
INDENT_LEVEL -= 1
p[0] = '%*scase %s:\n' % (INDENT_LEVEL * INDENT_SIZE, ' ', p[2])
@@ -330,8 +330,7 @@ def p_casestatement_case(p):
def p_casejobstatement_case(p):
'''casejobstatement : CASE expression THEN EOL
- | CASE expression EOL
- | CASE expression THEN COMMA'''
+ | CASE expression EOL'''
LOCAL_VARS.clear()
LOCAL_VARS.update(FUNCTION_VARS)
p[0] = '%s' % (p[2])
@@ -826,9 +825,16 @@ def p_term_string(p):
# end define term
+BLOCK_TYPE = {
+}
+
def p_error(p):
print("Syntax error in input", p)
+def getblocktype(module):
+ '''return a block type for a module'''
+ return BLOCK_TYPE.get(module, 'BasicBlock')
+
def processfile(filename, picklefilename, passnumber):
'''convert a sci file to a js file'''