More work
This commit is contained in:
parent
1671ce2285
commit
c9029b1216
@ -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"
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user