From c9029b1216363bd26a4e30639275025cfd288d7c Mon Sep 17 00:00:00 2001 From: "Johan B.W. de Vries" Date: Sun, 18 Jan 2026 14:47:57 +0100 Subject: [PATCH] More work --- 3-lang0ll/lang0ll.lang0 | 54 ++++++++++++++++++++--------------------- 1 file changed, 27 insertions(+), 27 deletions(-) diff --git a/3-lang0ll/lang0ll.lang0 b/3-lang0ll/lang0ll.lang0 index ca57217..6d50f3d 100644 --- a/3-lang0ll/lang0ll.lang0 +++ b/3-lang0ll/lang0ll.lang0 @@ -8,13 +8,14 @@ registerid id: / declare idnamea - calc idnamea add "id_" id + calc idnamea add "%id_" id return idnamea / emitln data: emit data emit eol + return "" / lexident: @@ -89,9 +90,8 @@ parseconststring: mapsetkey "stringconst" str constid mapsetkey "stringconst" constid str - emit "i8* noundef getelementptr inbounds ([14 x i8], [14 x i8]* @str." + emit "i8* @str." emit constid - emit ", i64 0, i64 0)" return / @@ -100,7 +100,7 @@ parseexprvarref: declare varname calc varname lexident calc varid registerid varname - emit "i8* %" + emit "i8* " emit varid return / @@ -168,9 +168,9 @@ parsestatset indent: skipchar " " emit indent emit varid - emit " = " + emit " = call i8* @__drop_i8_type(" parseconststring - emit ";" + emit ")" emit eol skipchar eol return @@ -185,14 +185,12 @@ parsestatcalc indent: calc varid registerid varname skipchar " " emit indent - emit "%" emit varid calc varidx mapgetkey "funcvarused" varid "" calc varidx add varidx "1" mapsetkey "funcvarused" varid varidx emit " = call i8* @" parseexprcall - emit ";" emit eol skipchar eol return @@ -209,7 +207,7 @@ parsestatif indent: mapsetkey "localvarused" "" strlenvar trace strlenvar emit indent - emit "%" + emit "%tmp" emit strlenvar emit " = call i64 @__strlen(" parseexprvarref @@ -223,9 +221,9 @@ parsestatif indent: trace strnotemptyvar emit indent - emit "%" + emit "%tmp" emit strnotemptyvar - emit " = icmp ne i64 %" + emit " = icmp ne i64 %tmp" emit strlenvar emitln ", 0" @@ -242,7 +240,7 @@ parsestatif indent: trace labelempty emit indent - emit "br i1 %" + emit "br i1 %tmp" emit strnotemptyvar emit ", label %lbl" emit labelnotempty @@ -310,7 +308,6 @@ parsestatreturn indent: if isnotspace emit "i18* 0" / - emit ";" emit eol skipchar eol return @@ -499,6 +496,7 @@ parsestat indent: check mapgetkey "FUNCREG" call "" : "Function" call "does not exist" calc callid registerid call emit indent + emit "call i8* @" emit callid emit "(" set first "1" @@ -527,7 +525,7 @@ parsestat indent: set first "0" / skipchar eol - emitln ");" + emitln ")" return / @@ -607,7 +605,7 @@ parsefunc: if isnotfirst emit ", " / - emit "i8* %" + emit "i8* " emit varid mapsetkey "funcvarused" varid "0" set first "0" @@ -645,17 +643,19 @@ emitheader: emit eol - emit "define i8* @addstringchar(i8* %0, i8* %1)" - emit eol - emit "{" - emit eol - emit " ; todo" - emit eol - emit " ret i8* %0;" - emit eol - emit "}" + emit "@__EOL = internal constant [2 x i8] c" + emit quote + emit "\\0A\\00" + emitln quote + emit eol + emitln "define i8* @__drop_i8_type(i8* %0) alwaysinline readnone" + emitln "{" + emitln " ret i8* %0" + emitln "}" + + emit eol return @@ -700,9 +700,9 @@ main: emitheader - mapsetkey "REGISTERID" "eof" "__EOF" - mapsetkey "REGISTERID" "eol" "__EOL" - mapsetkey "REGISTERID" "quote" "__QUOTE" + mapsetkey "REGISTERID" "eof" "@__EOF" + mapsetkey "REGISTERID" "eol" "@__EOL" + mapsetkey "REGISTERID" "quote" "@__QUOTE" mapsetkey "FUNCREG" "add" "1" mapsetkey "REGISTERID" "add" "__add"