mirror of
https://github.com/dschmenk/PLASMA.git
synced 2025-02-19 09:30:53 +00:00
add increment and decrement statements
This commit is contained in:
parent
a02c6ccb82
commit
0614edd3e2
BIN
SANDBOX.PO
BIN
SANDBOX.PO
Binary file not shown.
@ -57,10 +57,18 @@ def ascii
|
||||
end
|
||||
def nums(range)
|
||||
word i
|
||||
byte j
|
||||
for i = range downto -range step range/10
|
||||
puti(i)
|
||||
putln
|
||||
next
|
||||
i++
|
||||
j = 2
|
||||
j++
|
||||
array[0]++
|
||||
array++
|
||||
a1[0]++
|
||||
a1++
|
||||
end
|
||||
export def main(range)
|
||||
nums(*range)
|
||||
|
@ -1091,6 +1091,32 @@ int parse_stmnt(void)
|
||||
(elem_type & BYTE_TYPE) ? emit_sab(addr, elem_offset, type) : emit_saw(addr, elem_offset, type);
|
||||
break;
|
||||
}
|
||||
else if (scantoken == INC_TOKEN || scantoken == DEC_TOKEN)
|
||||
{
|
||||
if (type & LOCAL_TYPE)
|
||||
{
|
||||
if (elem_type & BYTE_TYPE)
|
||||
{
|
||||
emit_llb(addr + elem_offset); emit_unaryop(scantoken); emit_slb(addr + elem_offset);
|
||||
}
|
||||
else
|
||||
{
|
||||
emit_llw(addr + elem_offset); emit_unaryop(scantoken); emit_slw(addr + elem_offset);
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
if (elem_type & BYTE_TYPE)
|
||||
{
|
||||
emit_lab(addr, elem_offset, type); emit_unaryop(scantoken); emit_sab(addr, elem_offset, type);
|
||||
}
|
||||
else
|
||||
{
|
||||
emit_law(addr, elem_offset, type); emit_unaryop(scantoken); emit_saw(addr, elem_offset, type);
|
||||
}
|
||||
}
|
||||
break;
|
||||
}
|
||||
}
|
||||
else if (type & FUNC_TYPE)
|
||||
{
|
||||
@ -1118,6 +1144,23 @@ int parse_stmnt(void)
|
||||
else
|
||||
(type & (BYTE_TYPE | BPTR_TYPE)) ? emit_sb() : emit_sw();
|
||||
}
|
||||
else if (scantoken == INC_TOKEN || scantoken == DEC_TOKEN)
|
||||
{
|
||||
if (type & (BYTE_TYPE | BPTR_TYPE))
|
||||
{
|
||||
emit_dup();
|
||||
emit_lb();
|
||||
emit_unaryop(scantoken);
|
||||
emit_sb();
|
||||
}
|
||||
else
|
||||
{
|
||||
emit_dup();
|
||||
emit_lw();
|
||||
emit_unaryop(scantoken);
|
||||
emit_sw();
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
if (type & BPTR_TYPE)
|
||||
|
@ -90,7 +90,7 @@ word = $0450,$04D0,$0550,$05D0,$0650,$06D0,$0750,$07D0
|
||||
// Editor variables
|
||||
//
|
||||
byte nullstr = ""
|
||||
byte version = "PLASMA ][ SANDBOX VERSION 00.92"
|
||||
byte version = "PLASMA ][ SANDBOX VERSION 00.93"
|
||||
byte errorstr = "ERROR: $"
|
||||
byte okstr = "OK"
|
||||
byte outofmem = "OUT OF MEMORY!"
|
||||
@ -2169,6 +2169,9 @@ def emit_slw(offset)
|
||||
emit_op($76)
|
||||
return emit_byte(offset)
|
||||
end
|
||||
def emit_dup
|
||||
return emit_op($32)
|
||||
end
|
||||
def emit_dlb(offset)
|
||||
emit_op($6C)
|
||||
return emit_byte(offset)
|
||||
@ -2714,11 +2717,23 @@ def scan
|
||||
if ^(scanptr + 1) == '>'
|
||||
token = PTRB_TKN
|
||||
scanptr = scanptr + 2
|
||||
elsif ^(scanptr + 1) == '-'
|
||||
token = DEC_TKN
|
||||
scanptr = scanptr + 2
|
||||
else
|
||||
token = SUB_TKN
|
||||
scanptr = scanptr + 1
|
||||
fin
|
||||
break
|
||||
is '+'
|
||||
if ^(scanptr + 1) == '+'
|
||||
token = INC_TKN
|
||||
scanptr = scanptr + 2
|
||||
else
|
||||
token = ADD_TKN
|
||||
scanptr = scanptr + 1
|
||||
fin
|
||||
break
|
||||
is '>'
|
||||
if ^(scanptr + 1) == '>'
|
||||
token = SHR_TKN
|
||||
@ -3745,6 +3760,29 @@ def parse_stmnt
|
||||
fin
|
||||
fin
|
||||
break
|
||||
elsif token == INC_TKN or token == DEC_TKN
|
||||
if type & LOCAL_TYPE
|
||||
if elem_type & BYTE_TYPE
|
||||
emit_llb(addr + elem_offset)
|
||||
emit_unaryop(token)
|
||||
emit_slb(addr + elem_offset)
|
||||
else
|
||||
emit_llw(addr + elem_offset)
|
||||
emit_unaryop(token)
|
||||
emit_slw(addr + elem_offset)
|
||||
fin
|
||||
else
|
||||
if elem_type & BYTE_TYPE
|
||||
emit_lab(addr, elem_offset)
|
||||
emit_unaryop(token)
|
||||
emit_sab(addr, elem_offset)
|
||||
else
|
||||
emit_law(addr, elem_offset)
|
||||
emit_unaryop(token)
|
||||
emit_saw(addr, elem_offset)
|
||||
fin
|
||||
fin
|
||||
break
|
||||
fin
|
||||
elsif type & FUNC_TYPE
|
||||
if scan == EOL_TKN
|
||||
@ -3765,6 +3803,17 @@ def parse_stmnt
|
||||
else
|
||||
emit_sw
|
||||
fin
|
||||
elsif token == INC_TKN or token == DEC_TKN
|
||||
emit_dup
|
||||
if type & XBYTE_TYPE
|
||||
emit_lb
|
||||
emit_unaryop(token)
|
||||
emit_sb
|
||||
else
|
||||
emit_lw
|
||||
emit_unaryop(token)
|
||||
emit_sw
|
||||
fin
|
||||
else
|
||||
if type & BPTR_TYPE
|
||||
emit_lb
|
||||
|
Loading…
x
Reference in New Issue
Block a user