src/JavaMethod.st
branchjk_new_structure
changeset 1049 d873d4e99ef6
parent 1046 d40b1aa62700
child 1050 df4edfc9b41f
--- a/src/JavaMethod.st	Tue Oct 25 08:28:37 2011 +0000
+++ b/src/JavaMethod.st	Tue Oct 25 08:50:18 2011 +0000
@@ -1128,6 +1128,20 @@
     "Created: / 18-10-2010 / 19:10:25 / Jan Vrany <jan.vrany@fit.cvut.cz>"
 !
 
+numJArgs
+
+    ^self numberOfJavaArgs
+
+    "Created: / 25-10-2011 / 10:50:35 / Jan Vrany <jan.vrany@fit.cvut.cz>"
+!
+
+numJavaArgs
+
+    ^self numberOfJavaArgs
+
+    "Created: / 25-10-2011 / 10:50:31 / Jan Vrany <jan.vrany@fit.cvut.cz>"
+!
+
 numLocals
     ^super numVars.
 "/    numLocals isNil ifTrue:[^ 0].
@@ -1146,6 +1160,25 @@
     "Modified: / 13.1.1998 / 17:34:37 / cg"
 !
 
+numberOfJavaArgs
+
+    ^(accessFlags bitAnd: 16r00FF0000) rightShift: 16.
+
+    "Created: / 25-10-2011 / 10:45:59 / Jan Vrany <jan.vrany@fit.cvut.cz>"
+!
+
+numberOfJavaArgs: nArgs
+
+    ( nArgs > 16rFF ) ifTrue:[
+        ArgumentError raiseRequestWith:self errorString:'too many args method  - ', nArgs printString.
+    ].
+
+    accessFlags := accessFlags bitOr: 
+        ((nArgs bitAnd: 16rFF) bitShift: 16)
+
+    "Created: / 25-10-2011 / 10:43:33 / Jan Vrany <jan.vrany@fit.cvut.cz>"
+!
+
 originalMethodIfWrapped
     "return the method the receiver is wrapping - none here"
 
@@ -1706,17 +1739,20 @@
 setName:nameString descriptor:aString
 
 
-    |numArgs tooManyArgs returnType|
+    |numArgs numJArgs returnType|
 
     selector := (nameString , aString) asSymbol.
     self setDescriptor:aString.
 
-     numArgs := self class numArgsFromSignature:aString.
-     (tooManyArgs := (numArgs > self class maxNumberOfArguments)) ifTrue:[
-     numArgs := 0.
-     ].
-     self numberOfArgs:numArgs.
-     returnType := self class typeFromSignature:aString in:nil.
+    numJArgs := self class numArgsFromSignature:aString.
+    (numJArgs > self class maxNumberOfArguments) ifTrue:[
+        numArgs := 1.
+    ] ifFalse:[
+        numArgs := numJArgs.
+    ].
+    self numberOfArgs:numArgs.
+    self numberOfJavaArgs:numJArgs.
+    returnType := self class typeFromSignature:aString in:nil.
 
      "/ for the convenience of the VM, also mirror the return type in
      "/ the flags ...
@@ -1732,11 +1768,6 @@
      ]
      ]
      ].
-     tooManyArgs ifTrue:[
-     ^ ArgumentError
-     raiseRequestWith:self
-     errorString:'too many args in method'
-    ].
 
     "Created: / 14-08-2011 / 19:41:43 / Jan Vrany <jan.vrany@fit.cvut.cz>"
 !