--- a/Parser.st Fri May 05 11:44:23 2006 +0200
+++ b/Parser.st Fri May 05 13:40:31 2006 +0200
@@ -7105,7 +7105,7 @@
]
!
-generateCallToExternalFunction:fn lineNr:lineNr virtual:virtual
+generateCallToExternalFunction:fn lineNr:lineNr virtualCPP:virtualCPP nonVirtualCPP:nonVirtualCPP
|args sel node|
fn argumentTypes size ~~ methodArgNames size ifTrue:[
@@ -7113,33 +7113,28 @@
].
args := (methodArgNames ? #()) collect:[:eachArgName | self nodeForMethodArg:eachArgName].
- virtual ifTrue:[
+ virtualCPP ifTrue:[
sel := #(
- invokeVirtualOn:
- invokeVirtualOn:with:
- invokeVirtualOn:with:with:
- invokeVirtualOn:with:with:with:
-"/ invokeVirtualOn:with:with:with:with:
-"/ invokeVirtualOn:with:with:with:with:with:
-"/ invokeVirtualOn:with:with:with:with:with:with:
-"/ invokeVirtualOn:with:with:with:with:with:with:with:
+ 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 := #invokeVirtualOn:withArguments:.
+ sel := #invokeCPPVirtualOn:withArguments:.
] ifFalse:[
args := (Array with:(self selfNode)) , args.
].
] ifFalse:[
+ nonVirtualCPP ifTrue:[ self halt.
+ args := (Array with:(self selfNode)) , args
+ ].
sel := #(
invoke
invokeWith:
invokeWith:with:
invokeWith:with:with:
-"/ invokeWith:with:with:with:
-"/ invokeWith:with:with:with:with:
-"/ invokeWith:with:with:with:with:with:
-"/ invokeWith:with:with:with:with:with:with:
) at:args size+1 ifAbsent:nil.
sel isNil ifTrue:[
args := Array with:(self genMakeArrayWith:args).
@@ -7472,7 +7467,7 @@
returnType:returnType
argumentTypes:argTypes asArray.
- self generateCallToExternalFunction:function lineNr:lineNr virtual:false.
+ self generateCallToExternalFunction:function lineNr:lineNr virtualCPP:false nonVirtualCPP:false.
!
parseSqueakOrDolphinExternalFunctionDeclarationFrom:aStream definitionType:definitionType
@@ -7486,7 +7481,7 @@
"
|cParser callType
- isVirtualCall returnType functionName functionIndex argTypes moduleName type function
+ isVirtualCall isNonVirtualCall returnType functionName functionIndex argTypes moduleName type function
typeFromSqueakTypeSpec parentized |
typeFromSqueakTypeSpec := [:tok | |e cls cType|
@@ -7536,7 +7531,7 @@
] ifFalse:[
callType := ExternalLibraryFunction callTypeCDecl.
].
- isVirtualCall := false.
+ isVirtualCall := isNonVirtualCall := false.
cParser := CParser new.
cParser knownDefinitions:dictionaryOfTypesOrNil.
@@ -7544,9 +7539,16 @@
cParser source:aStream scannerClass:CDeclScanner.
cParser nextToken.
- (cParser tokenType == #Identifier and:[cParser token = 'virtual']) ifTrue:[
- cParser nextToken.
- isVirtualCall := true.
+ (cParser tokenType == #Identifier) ifTrue:[
+ (cParser token = 'virtual') ifTrue:[
+ cParser nextToken.
+ isVirtualCall := true.
+ ] ifFalse:[
+ (cParser token = 'nonVirtual') ifTrue:[
+ cParser nextToken.
+ isNonVirtualCall := true.
+ ]
+ ]
].
returnType := (typeFromSqueakTypeSpec value:cParser token).
@@ -7623,7 +7625,7 @@
returnType:returnType
argumentTypes:argTypes asArray.
- self generateCallToExternalFunction:function lineNr:lineNr virtual:isVirtualCall.
+ self generateCallToExternalFunction:function lineNr:lineNr virtualCPP:isVirtualCall nonVirtualCPP:isNonVirtualCall.
!
parseTraditionalPrimitive
@@ -7729,7 +7731,7 @@
returnType:function returnType
argumentTypes:function argumentTypes asArray.
- self generateCallToExternalFunction:function lineNr:lineNr virtual:false.
+ self generateCallToExternalFunction:function lineNr:lineNr virtualCPP:false nonVirtualCPP:false.
!
primitiveNumberFromName:aPrimitiveName
@@ -8583,7 +8585,7 @@
!Parser class methodsFor:'documentation'!
version
- ^ '$Header: /cvs/stx/stx/libcomp/Parser.st,v 1.498 2006-05-05 09:44:23 cg Exp $'
+ ^ '$Header: /cvs/stx/stx/libcomp/Parser.st,v 1.499 2006-05-05 11:40:31 cg Exp $'
! !
Parser initialize!