mirror of
https://github.com/badvision/lawless-legends.git
synced 2024-12-26 19:29:27 +00:00
Improve indirect function call code generation
This commit is contained in:
parent
9fe7d4d29d
commit
5dd829161b
@ -50,7 +50,7 @@ TESTLIB: testlib.pla $(PLVM) $(PLASM)
|
|||||||
test: test.pla TESTLIB $(PLVM) $(PLASM)
|
test: test.pla TESTLIB $(PLVM) $(PLASM)
|
||||||
./$(PLASM) -AM < test.pla > test.a
|
./$(PLASM) -AM < test.pla > test.a
|
||||||
acme --setpc 4096 -o TEST.REL test.a
|
acme --setpc 4096 -o TEST.REL test.a
|
||||||
./$(PLVM) TEST.REL MAIN
|
./$(PLVM) TEST.REL
|
||||||
|
|
||||||
debug: test.pla TESTLIB $(PLVM) $(PLASM)
|
debug: test.pla TESTLIB $(PLVM) $(PLASM)
|
||||||
./$(PLASM) -AM < test.pla > test.a
|
./$(PLASM) -AM < test.pla > test.a
|
||||||
|
@ -428,19 +428,7 @@ int parse_value(int rvalue)
|
|||||||
/*
|
/*
|
||||||
* Function call
|
* Function call
|
||||||
*/
|
*/
|
||||||
if (!emit_value)
|
if (emit_value && !(type & (FUNC_TYPE | CONST_TYPE)))
|
||||||
{
|
|
||||||
if (type & VAR_TYPE)
|
|
||||||
{
|
|
||||||
if (type & LOCAL_TYPE)
|
|
||||||
emit_llw(value);
|
|
||||||
else
|
|
||||||
emit_law(value, type);
|
|
||||||
}
|
|
||||||
else if (type & PTR_TYPE)
|
|
||||||
emit_lw();
|
|
||||||
}
|
|
||||||
if (!(type & (FUNC_TYPE | CONST_TYPE)))
|
|
||||||
{
|
{
|
||||||
if (scan_lookahead() != CLOSE_PAREN_TOKEN)
|
if (scan_lookahead() != CLOSE_PAREN_TOKEN)
|
||||||
emit_push();
|
emit_push();
|
||||||
@ -461,8 +449,21 @@ int parse_value(int rvalue)
|
|||||||
emit_call(value, type);
|
emit_call(value, type);
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
if (cparams)
|
if (!emit_value)
|
||||||
emit_pull();
|
{
|
||||||
|
if (type & VAR_TYPE)
|
||||||
|
{
|
||||||
|
if (type & LOCAL_TYPE)
|
||||||
|
emit_llw(value);
|
||||||
|
else
|
||||||
|
emit_law(value, type);
|
||||||
|
}
|
||||||
|
else if (type & PTR_TYPE)
|
||||||
|
emit_lw();
|
||||||
|
}
|
||||||
|
else
|
||||||
|
if (cparams)
|
||||||
|
emit_pull();
|
||||||
emit_ical();
|
emit_ical();
|
||||||
}
|
}
|
||||||
emit_value = 1;
|
emit_value = 1;
|
||||||
|
@ -27,17 +27,17 @@ def ascii
|
|||||||
next
|
next
|
||||||
end
|
end
|
||||||
|
|
||||||
def nums
|
def nums(range)
|
||||||
word i
|
word i
|
||||||
for i = -10 to 10
|
for i = -10 to range
|
||||||
puti(i)
|
puti(i)
|
||||||
putnl
|
putnl
|
||||||
next
|
next
|
||||||
end
|
end
|
||||||
|
|
||||||
export def main
|
export def main(range)
|
||||||
cls
|
cls
|
||||||
nums
|
nums(range)
|
||||||
viewport(12, 12, 16, 8)
|
viewport(12, 12, 16, 8)
|
||||||
ascii
|
ascii
|
||||||
viewport(0, 0, 40, 24)
|
viewport(0, 0, 40, 24)
|
||||||
@ -48,7 +48,7 @@ end
|
|||||||
export def indirect
|
export def indirect
|
||||||
word mainptr
|
word mainptr
|
||||||
mainptr = @main
|
mainptr = @main
|
||||||
*mainptr()
|
return mainptr(10)
|
||||||
end
|
end
|
||||||
|
|
||||||
indirect
|
indirect
|
||||||
|
Loading…
Reference in New Issue
Block a user