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 declare idnamea
calc idnamea add "id_" id calc idnamea add "%id_" id
return idnamea return idnamea
/ /
emitln data: emitln data:
emit data emit data
emit eol emit eol
return ""
/ /
lexident: lexident:
@ -89,9 +90,8 @@ parseconststring:
mapsetkey "stringconst" str constid mapsetkey "stringconst" str constid
mapsetkey "stringconst" constid str mapsetkey "stringconst" constid str
emit "i8* noundef getelementptr inbounds ([14 x i8], [14 x i8]* @str." emit "i8* @str."
emit constid emit constid
emit ", i64 0, i64 0)"
return return
/ /
@ -100,7 +100,7 @@ parseexprvarref:
declare varname declare varname
calc varname lexident calc varname lexident
calc varid registerid varname calc varid registerid varname
emit "i8* %" emit "i8* "
emit varid emit varid
return return
/ /
@ -168,9 +168,9 @@ parsestatset indent:
skipchar " " skipchar " "
emit indent emit indent
emit varid emit varid
emit " = " emit " = call i8* @__drop_i8_type("
parseconststring parseconststring
emit ";" emit ")"
emit eol emit eol
skipchar eol skipchar eol
return return
@ -185,14 +185,12 @@ parsestatcalc indent:
calc varid registerid varname calc varid registerid varname
skipchar " " skipchar " "
emit indent emit indent
emit "%"
emit varid emit varid
calc varidx mapgetkey "funcvarused" varid "" calc varidx mapgetkey "funcvarused" varid ""
calc varidx add varidx "1" calc varidx add varidx "1"
mapsetkey "funcvarused" varid varidx mapsetkey "funcvarused" varid varidx
emit " = call i8* @" emit " = call i8* @"
parseexprcall parseexprcall
emit ";"
emit eol emit eol
skipchar eol skipchar eol
return return
@ -209,7 +207,7 @@ parsestatif indent:
mapsetkey "localvarused" "" strlenvar mapsetkey "localvarused" "" strlenvar
trace strlenvar trace strlenvar
emit indent emit indent
emit "%" emit "%tmp"
emit strlenvar emit strlenvar
emit " = call i64 @__strlen(" emit " = call i64 @__strlen("
parseexprvarref parseexprvarref
@ -223,9 +221,9 @@ parsestatif indent:
trace strnotemptyvar trace strnotemptyvar
emit indent emit indent
emit "%" emit "%tmp"
emit strnotemptyvar emit strnotemptyvar
emit " = icmp ne i64 %" emit " = icmp ne i64 %tmp"
emit strlenvar emit strlenvar
emitln ", 0" emitln ", 0"
@ -242,7 +240,7 @@ parsestatif indent:
trace labelempty trace labelempty
emit indent emit indent
emit "br i1 %" emit "br i1 %tmp"
emit strnotemptyvar emit strnotemptyvar
emit ", label %lbl" emit ", label %lbl"
emit labelnotempty emit labelnotempty
@ -310,7 +308,6 @@ parsestatreturn indent:
if isnotspace if isnotspace
emit "i18* 0" emit "i18* 0"
/ /
emit ";"
emit eol emit eol
skipchar eol skipchar eol
return return
@ -499,6 +496,7 @@ parsestat indent:
check mapgetkey "FUNCREG" call "" : "Function" call "does not exist" check mapgetkey "FUNCREG" call "" : "Function" call "does not exist"
calc callid registerid call calc callid registerid call
emit indent emit indent
emit "call i8* @"
emit callid emit callid
emit "(" emit "("
set first "1" set first "1"
@ -527,7 +525,7 @@ parsestat indent:
set first "0" set first "0"
/ /
skipchar eol skipchar eol
emitln ");" emitln ")"
return return
/ /
@ -607,7 +605,7 @@ parsefunc:
if isnotfirst if isnotfirst
emit ", " emit ", "
/ /
emit "i8* %" emit "i8* "
emit varid emit varid
mapsetkey "funcvarused" varid "0" mapsetkey "funcvarused" varid "0"
set first "0" set first "0"
@ -645,17 +643,19 @@ emitheader:
emit eol emit eol
emit "define i8* @addstringchar(i8* %0, i8* %1)" emit "@__EOL = internal constant [2 x i8] c"
emit eol emit quote
emit "{" emit "\\0A\\00"
emit eol emitln quote
emit " ; todo"
emit eol
emit " ret i8* %0;"
emit eol
emit "}"
emit eol emit eol
emitln "define i8* @__drop_i8_type(i8* %0) alwaysinline readnone"
emitln "{"
emitln " ret i8* %0"
emitln "}"
emit eol emit eol
return return
@ -700,9 +700,9 @@ main:
emitheader emitheader
mapsetkey "REGISTERID" "eof" "__EOF" mapsetkey "REGISTERID" "eof" "@__EOF"
mapsetkey "REGISTERID" "eol" "__EOL" mapsetkey "REGISTERID" "eol" "@__EOL"
mapsetkey "REGISTERID" "quote" "__QUOTE" mapsetkey "REGISTERID" "quote" "@__QUOTE"
mapsetkey "FUNCREG" "add" "1" mapsetkey "FUNCREG" "add" "1"
mapsetkey "REGISTERID" "add" "__add" mapsetkey "REGISTERID" "add" "__add"