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