Bug fixes

This commit is contained in:
retropikzel 2024-09-25 19:10:05 +03:00
parent 7cba9b5d7e
commit 466dc7d674
6 changed files with 28 additions and 49 deletions

View File

@ -78,7 +78,6 @@
pffi-pointer-deref pffi-pointer-deref
pffi-os-name) pffi-os-name)
(begin (begin
(include "r7rs-pffi/main.scm")
(cond-expand (cond-expand
(chicken (include "r7rs-pffi/chicken.scm")) (chicken (include "r7rs-pffi/chicken.scm"))
(cyclone (include "r7rs-pffi/cyclone.scm")) (cyclone (include "r7rs-pffi/cyclone.scm"))
@ -88,4 +87,6 @@
(racket (include "r7rs-pffi/racket.scm")) (racket (include "r7rs-pffi/racket.scm"))
(sagittarius (include "r7rs-pffi/sagittarius.scm")) (sagittarius (include "r7rs-pffi/sagittarius.scm"))
(stklos (include "r7rs-pffi/stklos.scm")) (stklos (include "r7rs-pffi/stklos.scm"))
(else #t)))) (else #t))
(include "r7rs-pffi/main.scm")
))

View File

@ -83,14 +83,19 @@
(looper (+ count 1) (append result (list count))))))) (looper (+ count 1) (append result (list count)))))))
(looper from (list))))) (looper from (list)))))
(define-syntax pffi-define-callback (define-syntax pffi-define-callback
(syntax-rules () (syntax-rules ()
((_ scheme-name return-type argument-types procedure) ((_ scheme-name return-type argument-types procedure)
(define scheme-name (define scheme-name
(let* ((helper-object (let* ((callback-procedure
(object () (lambda (arg1 . args)
((test1234 a b) (try-catch
1))) (begin
(apply procedure (append (list arg1) args)))
(ex <java.lang.Throwable>
#f))))
(function-descriptor (function-descriptor
(let ((function-descriptor (let ((function-descriptor
(if (equal? return-type 'void) (if (equal? return-type 'void)
@ -99,40 +104,17 @@
(apply (class-methods java.lang.foreign.FunctionDescriptor 'of) (apply (class-methods java.lang.foreign.FunctionDescriptor 'of)
(pffi-type->native-type return-type) (pffi-type->native-type return-type)
(map pffi-type->native-type argument-types))))) (map pffi-type->native-type argument-types)))))
(write (invoke (class-methods (invoke helper-object 'getClass) 'test1234) 'getName)) (write function-descriptor)
(newline)
(write (invoke function-descriptor 'getClass))
(newline) (newline)
(write function-descriptor) (write function-descriptor)
(newline) (newline)
(write (invoke function-descriptor 'toMethodType))
(newline)
function-descriptor)) function-descriptor))
(method-type ;(method-type (invoke function-descriptor 'toMethodType))
(let ( (method-type (field callback-procedure 'applyMethodType))
(method-type (invoke function-descriptor 'toMethodType))
;(method-type (field procedure 'applyMethodType))
)
(write method-type)
(newline)
method-type))
(method-handle (method-handle
(let ( (let* ((method-handle (field callback-procedure 'applyToConsumerDefault)))
;(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))
(write method-handle) (write method-handle)
(newline) (newline)
method-handle))) method-handle)))

View File

@ -1,3 +1,4 @@
(define pffi-os-name (define pffi-os-name
(cond-expand (cond-expand
(windows "windows") (windows "windows")

View File

@ -91,6 +91,8 @@
(define pffi-pointer->string (define pffi-pointer->string
(lambda (pointer) (lambda (pointer)
(when (pffi-pointer-null? pointer)
(error "Can not make string from null pointer" pointer))
(string-copy (cast pointer _pointer _string)))) (string-copy (cast pointer _pointer _string))))
(define pffi-shared-object-load (define pffi-shared-object-load

View File

@ -25,7 +25,8 @@
(define pffi-pointer? (define pffi-pointer?
(lambda (object) (lambda (object)
(pointer? object))) (or (pointer? object)
(string? object))))
(define-syntax pffi-define (define-syntax pffi-define
(syntax-rules () (syntax-rules ()
@ -73,17 +74,17 @@
(define pffi-pointer-null (define pffi-pointer-null
(lambda () (lambda ()
(integer->pointer 0))) null-pointer))
(define pffi-string->pointer (define pffi-string->pointer
(lambda (string-content) (lambda (string-content)
(write string-content) string-content))
(newline)
(bytevector->pointer (string->utf8 string-content))))
(define pffi-pointer->string (define pffi-pointer->string
(lambda (pointer) (lambda (pointer)
(pointer->string pointer))) (if (string? pointer)
pointer
(pointer->string pointer))))
(define pffi-shared-object-load (define pffi-shared-object-load
(lambda (header path) (lambda (header path)

View File

@ -349,14 +349,6 @@
(pffi-define qsort libc-stdlib 'qsort 'void (list 'pointer 'int 'int 'callback)) (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 (pffi-define-callback compare
'int 'int
(list 'pointer 'pointer) (list 'pointer 'pointer)