fix global var set
This commit is contained in:
parent
3ac64d18a0
commit
3847c63fc9
|
|
@ -223,7 +223,12 @@ variable()
|
|||
}
|
||||
|
||||
parser.current_type = sym->type;
|
||||
emitter.emit_variable(sym, parser.depth);
|
||||
if(match(TOKEN_EQ)) {
|
||||
expression();
|
||||
emitter.emit_set_variable(sym, parser.depth);
|
||||
} else {
|
||||
emitter.emit_variable(sym, parser.depth);
|
||||
}
|
||||
}
|
||||
|
||||
void
|
||||
|
|
|
|||
1
emit.h
1
emit.h
|
|
@ -69,6 +69,7 @@ struct emitter_s {
|
|||
VoidArgEmit emit_close_paren;
|
||||
ConstEmit emit_constant;
|
||||
VarEmit emit_variable;
|
||||
VarEmit emit_set_variable;
|
||||
VoidArgEmit emit_write;
|
||||
VoidArgEmit emit_read;
|
||||
VoidArgEmit emit_open;
|
||||
|
|
|
|||
|
|
@ -367,6 +367,16 @@ rer_emit_variable(Symbol *sym, bool local)
|
|||
printf(";%.*s LDA2 ", sym->name_length, sym->name);
|
||||
}
|
||||
|
||||
void
|
||||
rer_emit_set_variable(Symbol *sym, bool local)
|
||||
{
|
||||
if(local)
|
||||
printf(",/%.*s STR2 ", sym->name_length, sym->name);
|
||||
else
|
||||
printf(";%.*s STA2 ", sym->name_length, sym->name);
|
||||
}
|
||||
|
||||
|
||||
void
|
||||
rer_emit_write()
|
||||
{
|
||||
|
|
@ -646,6 +656,7 @@ Emitter rer_emitter()
|
|||
rer_emit_close_paren,
|
||||
rer_emit_constant,
|
||||
rer_emit_variable,
|
||||
rer_emit_set_variable,
|
||||
rer_emit_write,
|
||||
rer_emit_read,
|
||||
rer_emit_open,
|
||||
|
|
|
|||
|
|
@ -513,6 +513,15 @@ uxn_emit_variable(Symbol *sym, bool local)
|
|||
printf(";%.*s LDA2 ", sym->name_length, sym->name);
|
||||
}
|
||||
|
||||
void
|
||||
uxn_emit_set_variable(Symbol *sym, bool local)
|
||||
{
|
||||
if(local)
|
||||
printf(",/%.*s STR2 ", sym->name_length, sym->name);
|
||||
else
|
||||
printf(";%.*s STA2 ", sym->name_length, sym->name);
|
||||
}
|
||||
|
||||
void
|
||||
uxn_emit_write()
|
||||
{
|
||||
|
|
@ -792,6 +801,7 @@ Emitter uxn_emitter()
|
|||
uxn_emit_close_paren,
|
||||
uxn_emit_constant,
|
||||
uxn_emit_variable,
|
||||
uxn_emit_set_variable,
|
||||
uxn_emit_write,
|
||||
uxn_emit_read,
|
||||
uxn_emit_open,
|
||||
|
|
|
|||
|
|
@ -0,0 +1,69 @@
|
|||
|100
|
||||
!{ @i $2 } #0000 ;i STA2
|
||||
&while.0 ;i LDA2 #000a LTH2 #03 JCN !{ ;i LDA2 nat_to_str_ str/<print>
|
||||
;i LDA2 #0001 ADD2 ;i STA2 !&while.0 } BRK
|
||||
|
||||
@sext
|
||||
#80 ANDk EQU #ff MUL SWP JMP2r
|
||||
|
||||
@aalloc_ ( size* -- result* )
|
||||
OVR2r LIT2r 0004 SUB2r STH2kr INC2 INC2 STA2
|
||||
;mem_length_ LDA2 STH2kr STA2
|
||||
;mem_length_ LDA2k STH2kr INC2 INC2 LDA2 ADD2 SWP2 STA2
|
||||
;mem_ STH2kr LDA2 ADD2 !&return
|
||||
#0000
|
||||
|
||||
&return
|
||||
POP2r JMP2r
|
||||
|
||||
@amcpy_ ( length* from* -- result* )
|
||||
OVR2r LIT2r 0008 SUB2r STH2kr #0006 ADD2 STA2
|
||||
STH2kr #0004 ADD2 STA2
|
||||
STH2kr #0004 ADD2 LDA2 aalloc_
|
||||
STH2kr INC2 INC2 STA2
|
||||
#0000 STH2kr STA2
|
||||
|
||||
&begin.1
|
||||
STH2kr LDA2 STH2kr #0004 ADD2 LDA2 LTH2 #00 EQU ?&break.1
|
||||
STH2kr #0006 ADD2 LDA2 STH2kr LDA2 ADD2 LDA sext
|
||||
STH2kr INC2 INC2 LDA2 STH2kr LDA2 ADD2 STA
|
||||
POP
|
||||
|
||||
&continue.1
|
||||
STH2kr LDA2k INC2k ROT2 STA2
|
||||
POP2 !&begin.1
|
||||
|
||||
&break.1
|
||||
STH2kr INC2 INC2 LDA2 !&return
|
||||
#0000
|
||||
|
||||
&return
|
||||
POP2r JMP2r
|
||||
|
||||
@nat_to_str_ ( n* -- result* )
|
||||
OVR2r LIT2r 000a SUB2r STH2kr #0008 ADD2 STA2
|
||||
#0005 STH2kr STA2
|
||||
|
||||
&begin.1
|
||||
STH2kr #0008 ADD2 LDA2 #000a OVR2 OVR2 DIV2 MUL2 SUB2 #0030 ADD2 STH2kr INC2 INC2 STH2kr LDA2k #0001 SUB2 SWP2 STA2k
|
||||
POP2 ADD2 STA
|
||||
POP STH2kr #0008 ADD2 LDA2k #000a DIV2 SWP2 STA2
|
||||
|
||||
&continue.1
|
||||
#0000 STH2kr #0008 ADD2 LDA2 LTH2 ?&begin.1
|
||||
|
||||
&break.1
|
||||
#0005 STH2kr LDA2 SUB2 STH2kr INC2 INC2 STH2kr LDA2 ADD2 amcpy_
|
||||
!&return
|
||||
#0000
|
||||
|
||||
&return
|
||||
POP2r JMP2r
|
||||
|
||||
@str/<print> ( str* -- )
|
||||
LDAk DUP ?{ POP POP2 JMP2r }
|
||||
#18 DEO
|
||||
INC2 !/<print>
|
||||
|
||||
@mem_length_ #0000
|
||||
@mem_
|
||||
Loading…
Reference in New Issue