summaryrefslogtreecommitdiffstats
path: root/src/front/parser.py
diff options
context:
space:
mode:
authorBenedikt Böhm <bb@xnull.de>2009-07-04 10:44:47 +0200
committerBenedikt Böhm <bb@xnull.de>2009-07-04 10:44:47 +0200
commit8d432ae653581815d16febf2af776a1a057660f7 (patch)
tree97e08265155d1ca2d9dcfa211e9fc7e13f0c48dd /src/front/parser.py
parentd06b1dfc51a263a12c00e00c81461b67fa11afe8 (diff)
downloadswppy-8d432ae653581815d16febf2af776a1a057660f7.tar.gz
swppy-8d432ae653581815d16febf2af776a1a057660f7.tar.xz
swppy-8d432ae653581815d16febf2af776a1a057660f7.zip
adapt parser for backend changes
- emit a prologue/epilogue for functions - emit a "JMP main" instruction in the beginning - track the last function label across genrate calls - split scope in params and local variables (they have a different layout on the stack)
Diffstat (limited to 'src/front/parser.py')
-rw-r--r--src/front/parser.py5
1 files changed, 3 insertions, 2 deletions
diff --git a/src/front/parser.py b/src/front/parser.py
index 53818bc..8eca7a2 100644
--- a/src/front/parser.py
+++ b/src/front/parser.py
@@ -144,7 +144,8 @@ class Parser:
self.match(Tag.LBRAK)
args = [] if self.token.tag == Tag.RBRAK else self.ident_list()
self.match(Tag.RBRAK, Tag.NEWLINE)
- self.scope.new(name, args)
+ self.scope.new(name)
+ self.scope.add_params(args)
block = self.statement_list()
self.match(Tag.END, Tag.NEWLINE)
return Function(name, args, block, line)
@@ -198,7 +199,7 @@ class Parser:
self.match(Tag.ASSIGNMENT)
exp = self.boolean()
self.match(Tag.NEWLINE)
- self.scope.add(name)
+ self.scope.add_locals(name)
return AssignStatement(name, exp, line)
# program = function_list.