1
0
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:
dschmenk 2016-01-06 12:13:48 -08:00
parent a02c6ccb82
commit 0614edd3e2
4 changed files with 101 additions and 1 deletions

Binary file not shown.

View File

@ -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)

View File

@ -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)

View File

@ -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