summaryrefslogtreecommitdiff
path: root/lib
diff options
context:
space:
mode:
authorEugen Wissner <belka@caraus.de>2024-11-28 16:28:19 +0100
committerEugen Wissner <belka@caraus.de>2024-11-28 16:28:19 +0100
commit147967c04b0efeec4246b8ba0ff9b6961c9fe6cd (patch)
treede689284caabb8f56aa08d9e572cb35aa8e68f14 /lib
parentf7b36cb81d96817d1c69ffe9025b88112de7400c (diff)
downloadelna-147967c04b0efeec4246b8ba0ff9b6961c9fe6cd.tar.gz
Reverse procedure parameters on the stack
Diffstat (limited to 'lib')
-rw-r--r--lib/Language/Elna/Glue.hs9
1 files changed, 7 insertions, 2 deletions
diff --git a/lib/Language/Elna/Glue.hs b/lib/Language/Elna/Glue.hs
index 79ae461..f5bd005 100644
--- a/lib/Language/Elna/Glue.hs
+++ b/lib/Language/Elna/Glue.hs
@@ -72,8 +72,9 @@ declaration
-> AST.Declaration
-> Glue (Maybe (AST.Identifier, Vector (Quadruple Variable)))
declaration globalTable (AST.ProcedureDeclaration procedureName parameters variableDeclarations statements)
- = traverseWithIndex registerVariable variableDeclarations
- >> traverseWithIndex registerParameter parameters
+ = Glue (modify' resetTemporaryCounter)
+ >> traverseWithIndex registerVariable variableDeclarations
+ >> traverseWithIndex registerParameter (reverse parameters)
>> nameQuadruplesTuple <$> traverse (statement globalTable) statements
where
traverseWithIndex f = traverse_ (uncurry f) . zip [0..]
@@ -91,6 +92,10 @@ declaration globalTable (AST.ProcedureDeclaration procedureName parameters varia
$ flip Vector.snoc StopQuadruple
$ fold quadrupleList
)
+ resetTemporaryCounter paste = paste
+ { temporaryCounter = 0
+ , localMap = mempty
+ }
declaration _ (AST.TypeDefinition _ _) = pure Nothing
statement :: SymbolTable -> AST.Statement -> Glue (Vector (Quadruple Variable))