*** empty log message ***
authorca
Fri, 11 Aug 2006 10:56:28 +0200
changeset 1817 a46b6c33237f
parent 1816 408690039009
child 1818 918baf269481
*** empty log message ***
Parser.st
--- a/Parser.st	Fri Aug 11 10:55:46 2006 +0200
+++ b/Parser.st	Fri Aug 11 10:56:28 2006 +0200
@@ -6997,6 +6997,59 @@
     ]
 !
 
+generateCallToExternalFunction:fn lineNr:lineNr
+    |args sel node|
+
+    fn argumentTypes size ~~ (methodArgNames size 
+                             + (fn isCPPFunction ifTrue:1 ifFalse:0)) ifTrue:[
+        self 
+            ignorableParseError:('number of method args (%1) does not match function arg list'
+                                bindWith: methodArgNames size).
+    ].
+
+    args := (methodArgNames ? #()) collect:[:eachArgName | self nodeForMethodArg:eachArgName].
+    fn isVirtualCPP ifTrue:[
+        sel := #(       
+              invokeCPPVirtualOn: 
+              invokeCPPVirtualOn:with:
+              invokeCPPVirtualOn:with:with:
+              invokeCPPVirtualOn:with:with:with:
+            ) at:args size+1 ifAbsent:nil.
+        sel isNil ifTrue:[
+            args := Array with:(self selfNode) with:(self genMakeArrayWith:args).
+            sel := #invokeCPPVirtualOn:withArguments:.
+        ] ifFalse:[
+            args := (Array with:(self selfNode)) , args.
+        ].
+    ] ifFalse:[
+        fn isNonVirtualCPP ifTrue:[ 
+            args := (Array with:(self selfNode)) , args
+        ].
+        sel := #(       
+              invoke 
+              invokeWith:
+              invokeWith:with:
+              invokeWith:with:with:
+            ) at:args size+1 ifAbsent:nil.
+        sel isNil ifTrue:[
+            args := Array with:(self genMakeArrayWith:args).
+            sel := #invokeWithArguments:.
+        ].
+    ].
+
+    node := MessageNode 
+                receiver:(ConstantNode type:nil value:fn) 
+                selector:sel 
+                args:args 
+                fold:false.
+    node lineNumber:lineNr.
+    tree := ReturnNode new expression:node.
+    tree lineNumber:lineNr.
+
+    "Created: / 01-08-2006 / 13:47:44 / cg"
+    "Modified: / 01-08-2006 / 15:29:14 / cg"
+!
+
 generateReturnOfType:aType
     |node|
 
@@ -8747,7 +8800,7 @@
 !Parser class methodsFor:'documentation'!
 
 version
-    ^ '$Header: /cvs/stx/stx/libcomp/Parser.st,v 1.514 2006-08-11 08:55:46 ca Exp $'
+    ^ '$Header: /cvs/stx/stx/libcomp/Parser.st,v 1.515 2006-08-11 08:56:28 ca Exp $'
 ! !
 
 Parser initialize!