fjsc: fixup alien-invoke
parent
7914c642a9
commit
0d2bfb1c84
|
@ -11,7 +11,7 @@ TUPLE: ast-quotation expression ;
|
||||||
TUPLE: ast-array elements ;
|
TUPLE: ast-array elements ;
|
||||||
TUPLE: ast-define name expression ;
|
TUPLE: ast-define name expression ;
|
||||||
TUPLE: ast-expression values ;
|
TUPLE: ast-expression values ;
|
||||||
TUPLE: ast-alien return object method args ;
|
TUPLE: ast-alien return method args ;
|
||||||
|
|
||||||
LAZY: 'digit' ( -- parser )
|
LAZY: 'digit' ( -- parser )
|
||||||
[ digit? ] satisfy [ digit> ] <@ ;
|
[ digit? ] satisfy [ digit> ] <@ ;
|
||||||
|
@ -84,9 +84,8 @@ LAZY: 'atom' ( -- parser )
|
||||||
LAZY: 'alien' ( -- parser )
|
LAZY: 'alien' ( -- parser )
|
||||||
'array' [ ast-array-elements ast-expression-values [ ast-string-value ] map ] <@
|
'array' [ ast-array-elements ast-expression-values [ ast-string-value ] map ] <@
|
||||||
'string' [ ast-string-value ] <@ <&>
|
'string' [ ast-string-value ] <@ <&>
|
||||||
'string' [ ast-string-value ] <@ <:&>
|
|
||||||
'array' [ ast-array-elements ast-expression-values [ ast-string-value ] map ] <@ <:&>
|
'array' [ ast-array-elements ast-expression-values [ ast-string-value ] map ] <@ <:&>
|
||||||
"alien-invoke" token sp <& [ first4 <ast-alien> ] <@ ;
|
"alien-invoke" token sp <& [ first3 <ast-alien> ] <@ ;
|
||||||
|
|
||||||
LAZY: 'expression' ( -- parser )
|
LAZY: 'expression' ( -- parser )
|
||||||
'define' sp
|
'define' sp
|
||||||
|
@ -165,12 +164,11 @@ M: ast-alien (compile)
|
||||||
dup ast-alien-return empty? not [
|
dup ast-alien-return empty? not [
|
||||||
"factor.data_stack.push(" ,
|
"factor.data_stack.push(" ,
|
||||||
] when
|
] when
|
||||||
dup ast-alien-object ,
|
|
||||||
"." ,
|
|
||||||
dup ast-alien-method ,
|
dup ast-alien-method ,
|
||||||
"(" ,
|
".apply(" ,
|
||||||
|
"factor.data_stack.pop(), [" ,
|
||||||
dup ast-alien-args [ drop "factor.data_stack.pop()" , ] [ "," , ] interleave
|
dup ast-alien-args [ drop "factor.data_stack.pop()" , ] [ "," , ] interleave
|
||||||
")" ,
|
"])" ,
|
||||||
ast-alien-return empty? not [
|
ast-alien-return empty? not [
|
||||||
")" ,
|
")" ,
|
||||||
] when ;
|
] when ;
|
||||||
|
|
|
@ -36,10 +36,10 @@ IN: temporary
|
||||||
": foo 123 \"hello\" ;" 'expression' parse car parse-result-parsed fjsc-compile
|
": foo 123 \"hello\" ;" 'expression' parse car parse-result-parsed fjsc-compile
|
||||||
] unit-test
|
] unit-test
|
||||||
|
|
||||||
{ "window.alert(factor.data_stack.pop())" } [
|
{ "alert.apply(factor.data_stack.pop(), [factor.data_stack.pop()])" } [
|
||||||
"{ } \"window\" \"alert\" { \"string\" } alien-invoke" 'expression' parse car parse-result-parsed fjsc-compile
|
"{ } \"alert\" { \"string\" } alien-invoke" 'expression' parse car parse-result-parsed fjsc-compile
|
||||||
] unit-test
|
] unit-test
|
||||||
|
|
||||||
{ "factor.data_stack.push(window.alert(factor.data_stack.pop()))" } [
|
{ "factor.data_stack.push(alert.apply(factor.data_stack.pop(), [factor.data_stack.pop()]))" } [
|
||||||
"{ \"string\" } \"window\" \"alert\" { \"string\" } alien-invoke" 'expression' parse car parse-result-parsed fjsc-compile
|
"{ \"string\" } \"alert\" { \"string\" } alien-invoke" 'expression' parse car parse-result-parsed fjsc-compile
|
||||||
] unit-test
|
] unit-test
|
||||||
|
|
Loading…
Reference in New Issue