2017-12-21 13:52:30 +00:00
|
|
|
; call tests
|
|
|
|
|
2018-01-05 21:52:23 +00:00
|
|
|
%output foobar
|
2017-12-21 13:52:30 +00:00
|
|
|
|
|
|
|
|
|
|
|
~ foo {
|
|
|
|
|
2018-01-05 21:52:23 +00:00
|
|
|
|
|
|
|
|
2017-12-21 13:52:30 +00:00
|
|
|
var .word var1 = 99
|
|
|
|
memory .word mem1 = $cff0
|
|
|
|
|
|
|
|
var .byte varb1 = 99
|
|
|
|
memory .byte memb1 = $cff0
|
2017-12-21 21:16:46 +00:00
|
|
|
const .word constw = $2355
|
|
|
|
const .byte constb = $23
|
2017-12-23 00:53:48 +00:00
|
|
|
const .float constf = 3.4556677
|
|
|
|
const .text constt = "derp"
|
2017-12-21 21:16:46 +00:00
|
|
|
|
2017-12-24 23:15:04 +00:00
|
|
|
sub sub1 () -> (X?) = $ffdd
|
|
|
|
sub sub2 (A) -> (Y?) = $eecc
|
2017-12-25 21:22:19 +00:00
|
|
|
sub sub3 (XY) -> (Y?) = $ddaa
|
|
|
|
sub sub4 (string: XY, other : A) -> (Y?) = $dd22
|
2017-12-21 21:16:46 +00:00
|
|
|
|
2018-01-05 21:52:23 +00:00
|
|
|
bar2:
|
2017-12-21 13:52:30 +00:00
|
|
|
|
2018-01-05 21:52:23 +00:00
|
|
|
bar: goto $c000
|
|
|
|
goto var1 ; jumps to the address in var1
|
|
|
|
goto mem1 ; jumps to the address in mem1
|
|
|
|
goto &var1 ; strange, but jumps to the location in memory where var1 sits
|
|
|
|
goto &mem1 ; strange, but jumps to the location in mempory where mem1 sits (points to)
|
|
|
|
goto [var1]
|
2017-12-28 18:08:33 +00:00
|
|
|
goto [$c000.word]
|
|
|
|
goto [var1]
|
|
|
|
goto [mem1]
|
|
|
|
|
|
|
|
; ----
|
|
|
|
|
2017-12-23 13:36:23 +00:00
|
|
|
goto sub1
|
2018-01-05 21:52:23 +00:00
|
|
|
;goto sub2 (1 ) ; @todo error, must be return sub2(1) -> optimized in 'tail call'
|
|
|
|
return sub2 ( )
|
|
|
|
return sub2 ()
|
|
|
|
return sub2 (1 )
|
|
|
|
return sub3 (3)
|
|
|
|
return sub3 (XY="hello")
|
|
|
|
return sub3 ("hello, there")
|
|
|
|
return sub4 (string="hello, there", other = 42)
|
|
|
|
return sub4 ("hello", 42)
|
|
|
|
return sub4 ("hello", other= 42)
|
|
|
|
return sub4 (string="hello", other = 42)
|
|
|
|
return bar ()
|
2017-12-23 13:36:23 +00:00
|
|
|
goto [AX]
|
2018-01-05 21:52:23 +00:00
|
|
|
; goto [AX()] % ; @todo error, must be return()
|
2017-12-23 13:36:23 +00:00
|
|
|
goto [var1]
|
2018-01-05 21:52:23 +00:00
|
|
|
goto [mem1] ; comment
|
|
|
|
return [AX]()
|
|
|
|
return [var1] () ; comment
|
|
|
|
return [mem1] ()
|
2017-12-23 13:36:23 +00:00
|
|
|
goto $c000
|
2018-01-05 21:52:23 +00:00
|
|
|
return $c000 ( )
|
2017-12-23 13:36:23 +00:00
|
|
|
goto $c2
|
2018-01-05 21:52:23 +00:00
|
|
|
return $c2()
|
|
|
|
goto [$c2.word]
|
|
|
|
return 33
|
|
|
|
return [$c2.word] ; @todo this as rvalue
|
|
|
|
; [ $c2.word (4) ] ;@ todo parse precedence
|
|
|
|
return [$c2.word] (4)
|
|
|
|
return [$c2.word] (4)
|
|
|
|
return [$c2.word] (4)
|
|
|
|
return [$c2.word] (4)
|
|
|
|
; return [$c2dd.word] ( ) ;@ todo parse precedence
|
|
|
|
goto [$c2dd.word]
|
2017-12-21 13:52:30 +00:00
|
|
|
|
2018-01-01 22:24:39 +00:00
|
|
|
%asm {
|
2017-12-21 13:52:30 +00:00
|
|
|
nop
|
|
|
|
nop
|
|
|
|
nop
|
|
|
|
nop
|
|
|
|
}
|
|
|
|
|
2017-12-23 13:36:23 +00:00
|
|
|
sub1!()
|
|
|
|
sub2!(11)
|
2017-12-25 21:22:19 +00:00
|
|
|
sub3 !(3)
|
|
|
|
sub3! (XY="hello")
|
|
|
|
sub3! ("hello, there")
|
|
|
|
sub4! ("hello", 42)
|
|
|
|
sub4! ("hello", other=42)
|
|
|
|
sub4! (string="hello", other = 42)
|
|
|
|
sub4! (string="hello, there", other = 42)
|
2018-01-01 22:24:39 +00:00
|
|
|
|
|
|
|
sub3 (81)
|
|
|
|
sub3 !(81)
|
|
|
|
sub3 !A (81)
|
|
|
|
sub3 !X (81)
|
|
|
|
sub3 !Y (81)
|
|
|
|
sub3 !XY (81)
|
|
|
|
sub3 !AXY (81)
|
|
|
|
|
2017-12-23 13:36:23 +00:00
|
|
|
bar!()
|
2018-01-05 21:52:23 +00:00
|
|
|
bar !()
|
|
|
|
[XY]! ()
|
2017-12-23 13:36:23 +00:00
|
|
|
[XY] ! ()
|
2018-01-05 21:52:23 +00:00
|
|
|
[var1]!()
|
2017-12-23 13:36:23 +00:00
|
|
|
[mem1]!()
|
|
|
|
[$c2.word]!()
|
|
|
|
[$c2dd.word]!()
|
|
|
|
$c000!()
|
|
|
|
$c2!()
|
2017-12-21 13:52:30 +00:00
|
|
|
|
2018-01-01 22:24:39 +00:00
|
|
|
%asm {
|
2017-12-21 13:52:30 +00:00
|
|
|
nop
|
|
|
|
nop
|
|
|
|
nop
|
|
|
|
nop
|
|
|
|
}
|
|
|
|
|
2017-12-23 13:36:23 +00:00
|
|
|
sub1()
|
|
|
|
sub2(11)
|
2017-12-25 21:22:19 +00:00
|
|
|
sub3 (3)
|
|
|
|
sub3 (XY="hello")
|
|
|
|
sub3 ("hello, there")
|
|
|
|
sub4 ("hello", 42)
|
|
|
|
sub4 ("hello", other= 42)
|
|
|
|
sub4 (string="hello", other = 42)
|
|
|
|
sub4 (string="hello, there", other = 42)
|
2017-12-23 13:36:23 +00:00
|
|
|
bar ()
|
|
|
|
[AX]()
|
|
|
|
[var1] ( )
|
|
|
|
[mem1] ()
|
2018-01-05 21:52:23 +00:00
|
|
|
A= [$c2.word(4)]
|
|
|
|
;A= [$c2.word() ] ; @todo Precedence?
|
|
|
|
;A= [$c2dd.word() ] ; @todo Precedence?
|
2017-12-23 13:36:23 +00:00
|
|
|
$c000()
|
|
|
|
$c2()
|
2017-12-21 21:16:46 +00:00
|
|
|
|
|
|
|
|
2018-01-01 22:24:39 +00:00
|
|
|
%asm {
|
2017-12-21 22:05:35 +00:00
|
|
|
nop
|
|
|
|
nop
|
|
|
|
nop
|
|
|
|
nop
|
|
|
|
}
|
|
|
|
|
2017-12-23 13:36:23 +00:00
|
|
|
constw()
|
|
|
|
sub1()
|
|
|
|
main.start()
|
2017-12-21 13:52:30 +00:00
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
~ main {
|
|
|
|
|
2018-01-03 20:43:19 +00:00
|
|
|
start:
|
2017-12-23 13:36:23 +00:00
|
|
|
foo.bar()
|
2017-12-21 13:52:30 +00:00
|
|
|
return
|
2017-12-25 18:09:10 +00:00
|
|
|
|
|
|
|
sub unused_sub ()->() {
|
|
|
|
A=X
|
|
|
|
X=Y
|
|
|
|
Y=A
|
|
|
|
return
|
|
|
|
}
|
|
|
|
|
2018-01-05 21:52:23 +00:00
|
|
|
|
2017-12-21 13:52:30 +00:00
|
|
|
}
|