]> gitweb.factorcode.org Git - factor.git/commitdiff
fjsc: fixup alien-invoke
authorchris.double <chris.double@double.co.nz>
Fri, 15 Dec 2006 07:14:50 +0000 (07:14 +0000)
committerchris.double <chris.double@double.co.nz>
Fri, 15 Dec 2006 07:14:50 +0000 (07:14 +0000)
libs/fjsc/fjsc.factor
libs/fjsc/tests.factor

index 635db934adba46bd6bd7d762a0079f2df0bbe199..ccb28425acedd7b9b2c463a9307a4a7e7f5bd078 100644 (file)
@@ -11,7 +11,7 @@ TUPLE: ast-quotation expression ;
 TUPLE: ast-array elements ;
 TUPLE: ast-define name expression ;
 TUPLE: ast-expression values ;
-TUPLE: ast-alien return object method args ;
+TUPLE: ast-alien return method args ;
 
 LAZY: 'digit' ( -- parser )
   [ digit? ] satisfy [ digit> ] <@ ;
@@ -84,9 +84,8 @@ LAZY: 'atom' ( -- parser )
 LAZY: 'alien' ( -- parser )
   'array' [ ast-array-elements ast-expression-values [ ast-string-value ] map ] <@
   'string' [ ast-string-value ] <@ <&>
-  'string' [ ast-string-value ] <@ <:&>
   '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 )
   'define' sp 
@@ -165,12 +164,11 @@ M: ast-alien (compile)
   dup ast-alien-return empty? not [
     "factor.data_stack.push(" ,
   ] when
-  dup ast-alien-object ,       
-  "." ,
   dup ast-alien-method ,
-  "(" ,
+  ".apply(" ,
+  "factor.data_stack.pop(), [" ,
   dup ast-alien-args [ drop "factor.data_stack.pop()" , ] [ "," , ] interleave 
-  ")" ,
+  "])" ,
   ast-alien-return empty? not [
     ")" ,
   ] when ;
index 11f451d133da3a8bd4752374725a3d68db72d045..9c1b33ec090a59d7d9229e92fde2d80788c6be81 100644 (file)
@@ -36,10 +36,10 @@ IN: temporary
   ": foo 123 \"hello\" ;" 'expression' parse car parse-result-parsed fjsc-compile 
 ] unit-test
 
-{ "window.alert(factor.data_stack.pop())" } [
-  "{ } \"window\" \"alert\" { \"string\" } alien-invoke" 'expression' parse car parse-result-parsed fjsc-compile
+{ "alert.apply(factor.data_stack.pop(), [factor.data_stack.pop()])" } [
+  "{ } \"alert\" { \"string\" } alien-invoke" 'expression' parse car parse-result-parsed fjsc-compile
 ] unit-test
 
-{ "factor.data_stack.push(window.alert(factor.data_stack.pop()))" } [
-  "{ \"string\" } \"window\" \"alert\" { \"string\" } alien-invoke" 'expression' parse car parse-result-parsed fjsc-compile
+{ "factor.data_stack.push(alert.apply(factor.data_stack.pop(), [factor.data_stack.pop()]))" } [
+  "{ \"string\" } \"alert\" { \"string\" } alien-invoke" 'expression' parse car parse-result-parsed fjsc-compile
 ] unit-test