diff options
author | Andreas Baumann <mail@andreasbaumann.cc> | 2018-08-17 15:13:51 +0200 |
---|---|---|
committer | Andreas Baumann <mail@andreasbaumann.cc> | 2018-08-17 15:13:51 +0200 |
commit | a92040828b10dee6e699417742fd40733439c11b (patch) | |
tree | 7b31ac440c5dcab166debf7af8a6a9532d0f7aca /crenshaw | |
parent | ef905e956911d0010532ee8348c144474ce8f1d6 (diff) | |
download | compilertests-a92040828b10dee6e699417742fd40733439c11b.tar.gz compilertests-a92040828b10dee6e699417742fd40733439c11b.tar.bz2 |
crenshaw: separea function and variable code emitition, arange code before data section
Diffstat (limited to 'crenshaw')
-rw-r--r-- | crenshaw/main.pas | 27 |
1 files changed, 18 insertions, 9 deletions
diff --git a/crenshaw/main.pas b/crenshaw/main.pas index 74999f1..339484c 100644 --- a/crenshaw/main.pas +++ b/crenshaw/main.pas @@ -1,6 +1,8 @@ program Main; -const TAB = ^I; +const + TAB = ^I; + CR = ^M; var Look : char; @@ -218,18 +220,24 @@ begin } end; +procedure Functions; +var i : integer; +begin + for i := 0 to nof_symbols-1 do begin + if symbols[i].sym_type = FunctionType then begin + EmitLabel(symbols[i].name); + EmitLn('ret'); + end; + end; +end; + procedure Variables; var i : integer; begin for i := 0 to nof_symbols-1 do begin - EmitLabel(symbols[i].name); - case symbols[i].sym_type of - VariableType: begin - EmitLn('dw 0'); - end; - FunctionType: begin - EmitLn('ret'); - end; + if symbols[i].sym_type = VariableType then begin + EmitLabel(symbols[i].name); + EmitLn('dw 0'); end; end; end; @@ -237,6 +245,7 @@ end; procedure Epilogue; begin EmitLn('hlt'); + Functions; Variables; { EmitLn('leave'); |