*** empty log message ***
authorClaus Gittinger <cg@exept.de>
Fri, 05 May 2006 13:40:31 +0200
changeset 1752 71a7a5cd8441
parent 1751 bde8b13ac950
child 1753 ecc7580a2002
*** empty log message ***
Parser.st
--- 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!