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