diff options
author | Benedikt Böhm <bb@xnull.de> | 2009-07-04 10:44:47 +0200 |
---|---|---|
committer | Benedikt Böhm <bb@xnull.de> | 2009-07-04 10:44:47 +0200 |
commit | 8d432ae653581815d16febf2af776a1a057660f7 (patch) | |
tree | 97e08265155d1ca2d9dcfa211e9fc7e13f0c48dd /src/front/parser.py | |
parent | d06b1dfc51a263a12c00e00c81461b67fa11afe8 (diff) | |
download | swppy-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 '')
-rw-r--r-- | src/front/parser.py | 5 |
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. |