diff --git a/retropikzel/r7rs-pffi/kawa.scm b/retropikzel/r7rs-pffi/kawa.scm index 47f3944..f5f3528 100644 --- a/retropikzel/r7rs-pffi/kawa.scm +++ b/retropikzel/r7rs-pffi/kawa.scm @@ -87,9 +87,10 @@ (syntax-rules () ((_ scheme-name return-type argument-types procedure) (define scheme-name - (let* ((helper-procedure - (lambda (a b) - (apply procedure (list a b)))) + (let* ((helper-object + (object () + ((test1234 a b) + 1))) (function-descriptor (let ((function-descriptor (if (equal? return-type 'void) @@ -98,24 +99,40 @@ (apply (class-methods java.lang.foreign.FunctionDescriptor 'of) (pffi-type->native-type return-type) (map pffi-type->native-type argument-types))))) + (write (invoke (class-methods (invoke helper-object 'getClass) 'test1234) 'getName)) + (newline) (write function-descriptor) (newline) (write (invoke function-descriptor 'toMethodType)) (newline) function-descriptor)) (method-type - (let ((method-type (invoke function-descriptor 'toMethodType))) + (let ( + (method-type (invoke function-descriptor 'toMethodType)) + ;(method-type (field procedure 'applyMethodType)) + ) (write method-type) (newline) method-type)) (method-handle (let ( ;(method-handle (invoke procedure 'getApplyMethod)) + (method-handle (invoke (class-methods (invoke helper-object 'getClass) 'test1234) 'getApplyMethod)) + #;(method-handle (invoke (class-methods (invoke helper-object 'getClass) + 'test1234) 'getApplyMethod)) + #;(method-handle (invoke method-handle-lookup + 'findStatic + (invoke helper-object 'getClass) + (invoke (class-methods (invoke helper-object 'getClass) 'test1234) 'getName) + method-type + + )) + ) ;(invoke method-handle-lookup 'revealDirect method-handle) (write method-handle) (newline) - (set! method-handle (invoke method-handle 'asType method-type)) + ;(set! method-handle (invoke method-handle 'asType method-type)) (write method-handle) (newline) method-handle))) diff --git a/test.scm b/test.scm index 55e560d..3bbf304 100644 --- a/test.scm +++ b/test.scm @@ -349,6 +349,14 @@ (pffi-define qsort libc-stdlib 'qsort 'void (list 'pointer 'int 'int 'callback)) +(define test1234 + (lambda (pointer-a pointer-b) + (let ((a (pffi-pointer-get pointer-a 'int 0)) + (b (pffi-pointer-get pointer-b 'int 0))) + (cond ((> a b) 1) + ((= a b) 0) + ((< a b) -1))))) + (pffi-define-callback compare 'int (list 'pointer 'pointer)