More work

This commit is contained in:
Johan B.W. de Vries 2026-01-18 14:47:57 +01:00
parent 1671ce2285
commit c9029b1216

View File

@ -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"