--- a/JavaNativeMethod.st Wed Jan 30 18:02:21 2013 +0000
+++ b/JavaNativeMethod.st Thu Jan 31 13:08:59 2013 +0000
@@ -78,16 +78,19 @@
!
initialize
- self flags: (self flags bitOr: Behavior flagJavaMethod).
- "By default, do not cache native impls while developing"
+ self flags: ((self flags bitClear: Behavior flagMethod) bitOr: Behavior flagJavaMethod).
+ "
+ self flags: ((self flags bitClear: Behavior flagJavaMethod) bitOr: Behavior flagMethod).
+ "
+ "By default, do not cache native impls while developing"
CacheNativeImplementation := Smalltalk isStandAloneApp.
Verbose := false.
"
-Verbose := true.
-"
+ Verbose := true.
+ "
- "Modified: / 30-04-2011 / 23:35:40 / Jan Vrany <jan.vrany@fit.cvut.cz>"
"Modified (comment): / 03-11-2011 / 10:48:12 / Marcel Hlopko <hlopkmar@fel.cvut.cz>"
+ "Modified: / 31-01-2013 / 13:06:39 / Jan Vrany <jan.vrany@fit.cvut.cz>"
! !
!JavaNativeMethod class methodsFor:'cleanup'!
@@ -330,6 +333,145 @@
"Modified: / 19-01-2013 / 23:39:17 / Jan Vrany <jan.vrany@fit.cvut.cz>"
! !
+!JavaNativeMethod methodsFor:'private-compiler interface'!
+
+numberOfArgs:aNumber
+ | sel m |
+
+ super numberOfArgs:aNumber.
+
+ (self class flags bitAnd:Behavior flagJavaMethod) ~~ 0 ifTrue:[ ^ self ].
+
+ "Now, install the trampoline..."
+ sel := #(
+ "00" #trampolineUncached:
+ "01" #trampolineUncached:
+ "02" #trampolineUncached:_:
+ "03" #trampolineUncached:_:_:
+
+ "04" #trampolineUncached:_:_:_:
+ "05" #trampolineUncached:_:_:_:_:
+ "06" #trampolineUncached:_:_:_:_:_:
+ "07" #trampolineUncached:_:_:_:_:_:_:
+
+ "08" #trampolineUncached:_:_:_:_:_:_:_:
+ "09" #trampolineUncached:_:_:_:_:_:_:_:_:
+ "10" #trampolineUncached:_:_:_:_:_:_:_:_:_:
+ "11" #trampolineUncached:_:_:_:_:_:_:_:_:_:_:
+
+ "12" #trampolineUncached:_:_:_:_:_:_:_:_:_:_:_:
+ "13" #trampolineUncached:_:_:_:_:_:_:_:_:_:_:_:_:
+ "14" #trampolineUncached:_:_:_:_:_:_:_:_:_:_:_:_:_:
+ "15" #trampolineUncached:_:_:_:_:_:_:_:_:_:_:_:_:_:_:
+ ) at: aNumber + 1.
+
+ m := self class compiledMethodAt: sel.
+ m isNil ifTrue:[
+ self error: 'Cannot find trampoline method'.
+ ].
+ self byteCode: m byteCode.
+
+ "Created: / 31-01-2013 / 12:44:16 / Jan Vrany <jan.vrany@fit.cvut.cz>"
+! !
+
+!JavaNativeMethod methodsFor:'private-trampolines'!
+
+trampolineUncached
+ ^self nativeMethodInvokation: thisContext.
+
+ "Created: / 31-01-2013 / 12:55:02 / Jan Vrany <jan.vrany@fit.cvut.cz>"
+!
+
+trampolineUncached: a1
+ ^self nativeMethodInvokation: thisContext.
+
+ "Created: / 31-01-2013 / 12:55:20 / Jan Vrany <jan.vrany@fit.cvut.cz>"
+!
+
+trampolineUncached: a1 _: a2
+ ^self nativeMethodInvokation: thisContext.
+
+ "Created: / 31-01-2013 / 12:55:26 / Jan Vrany <jan.vrany@fit.cvut.cz>"
+!
+
+trampolineUncached: a1 _: a2 _: a3
+ ^self nativeMethodInvokation: thisContext.
+
+ "Created: / 31-01-2013 / 12:55:34 / Jan Vrany <jan.vrany@fit.cvut.cz>"
+!
+
+trampolineUncached: a1 _: a2 _: a3 _: a4
+ ^self nativeMethodInvokation: thisContext.
+
+ "Created: / 31-01-2013 / 12:55:47 / Jan Vrany <jan.vrany@fit.cvut.cz>"
+!
+
+trampolineUncached: a1 _: a2 _: a3 _: a4 _: a5
+ ^self nativeMethodInvokation: thisContext.
+
+ "Created: / 31-01-2013 / 12:55:50 / Jan Vrany <jan.vrany@fit.cvut.cz>"
+!
+
+trampolineUncached: a1 _: a2 _: a3 _: a4 _: a5 _: a6
+ ^self nativeMethodInvokation: thisContext.
+
+ "Created: / 31-01-2013 / 12:55:53 / Jan Vrany <jan.vrany@fit.cvut.cz>"
+!
+
+trampolineUncached: a1 _: a2 _: a3 _: a4 _: a5 _: a6 _: a7
+ ^self nativeMethodInvokation: thisContext.
+
+ "Created: / 31-01-2013 / 12:55:55 / Jan Vrany <jan.vrany@fit.cvut.cz>"
+!
+
+trampolineUncached: a1 _: a2 _: a3 _: a4 _: a5 _: a6 _: a7 _: a8
+ ^self nativeMethodInvokation: thisContext.
+
+ "Created: / 31-01-2013 / 12:56:00 / Jan Vrany <jan.vrany@fit.cvut.cz>"
+!
+
+trampolineUncached: a1 _: a2 _: a3 _: a4 _: a5 _: a6 _: a7 _: a8 _: a9
+ ^self nativeMethodInvokation: thisContext.
+
+ "Created: / 31-01-2013 / 12:56:03 / Jan Vrany <jan.vrany@fit.cvut.cz>"
+!
+
+trampolineUncached: a1 _: a2 _: a3 _: a4 _: a5 _: a6 _: a7 _: a8 _: a9 _: a10
+ ^self nativeMethodInvokation: thisContext.
+
+ "Created: / 31-01-2013 / 12:56:08 / Jan Vrany <jan.vrany@fit.cvut.cz>"
+!
+
+trampolineUncached: a1 _: a2 _: a3 _: a4 _: a5 _: a6 _: a7 _: a8 _: a9 _: a10 _: a11
+ ^self nativeMethodInvokation: thisContext.
+
+ "Created: / 31-01-2013 / 12:56:10 / Jan Vrany <jan.vrany@fit.cvut.cz>"
+!
+
+trampolineUncached: a1 _: a2 _: a3 _: a4 _: a5 _: a6 _: a7 _: a8 _: a9 _: a10 _: a11 _: a12
+ ^self nativeMethodInvokation: thisContext.
+
+ "Created: / 31-01-2013 / 12:56:15 / Jan Vrany <jan.vrany@fit.cvut.cz>"
+!
+
+trampolineUncached: a1 _: a2 _: a3 _: a4 _: a5 _: a6 _: a7 _: a8 _: a9 _: a10 _: a11 _: a12 _: a13
+ ^self nativeMethodInvokation: thisContext.
+
+ "Created: / 31-01-2013 / 12:56:22 / Jan Vrany <jan.vrany@fit.cvut.cz>"
+!
+
+trampolineUncached: a1 _: a2 _: a3 _: a4 _: a5 _: a6 _: a7 _: a8 _: a9 _: a10 _: a11 _: a12 _: a13 _: a14
+ ^self nativeMethodInvokation: thisContext.
+
+ "Created: / 31-01-2013 / 12:56:48 / Jan Vrany <jan.vrany@fit.cvut.cz>"
+!
+
+trampolineUncached: a1 _: a2 _: a3 _: a4 _: a5 _: a6 _: a7 _: a8 _: a9 _: a10 _: a11 _: a12 _: a13 _: a14 _: a15
+ ^self nativeMethodInvokation: thisContext.
+
+ "Created: / 31-01-2013 / 12:56:36 / Jan Vrany <jan.vrany@fit.cvut.cz>"
+! !
+
!JavaNativeMethod methodsFor:'vm support'!
nativeMethodInvokation