diff options
| author | Eugen Wissner <belka@caraus.de> | 2024-11-28 16:28:19 +0100 |
|---|---|---|
| committer | Eugen Wissner <belka@caraus.de> | 2024-11-28 16:28:19 +0100 |
| commit | 147967c04b0efeec4246b8ba0ff9b6961c9fe6cd (patch) | |
| tree | de689284caabb8f56aa08d9e572cb35aa8e68f14 /lib/Language/Elna | |
| parent | f7b36cb81d96817d1c69ffe9025b88112de7400c (diff) | |
| download | elna-147967c04b0efeec4246b8ba0ff9b6961c9fe6cd.tar.gz | |
Reverse procedure parameters on the stack
Diffstat (limited to 'lib/Language/Elna')
| -rw-r--r-- | lib/Language/Elna/Glue.hs | 9 |
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)) |
