From 1be0f2af6e62c9ffbcd8a09e04e222684a042a12 Mon Sep 17 00:00:00 2001 From: Abdulaziz Ghuloum Date: Sun, 12 Oct 2008 02:06:25 -0400 Subject: [PATCH] - changed foreign accessors and mutator names to have '-c-' in their names as suggested by Ken Dickey. --- doc/Makefile.am | 3 + doc/Makefile.in | 3 + doc/ikarus-scheme-users-guide.pdf | Bin 309985 -> 308713 bytes doc/ikarus-scheme-users-guide.tex | 194 +++++++++++++++--------------- lab/test-ffi.ss | 34 +++--- lib/Cocoa/helpers.ss | 6 +- lib/ikarus/foreign.ss | 30 +++-- lib/objc.ss | 44 +++---- lib/ypsilon-compat.ikarus.ss | 16 +-- scheme/ikarus.pointers.ss | 76 ++++++------ scheme/last-revision | 2 +- scheme/makefile.ss | 60 ++++----- 12 files changed, 246 insertions(+), 222 deletions(-) diff --git a/doc/Makefile.am b/doc/Makefile.am index 739346d..4669e0e 100644 --- a/doc/Makefile.am +++ b/doc/Makefile.am @@ -18,5 +18,8 @@ all: docs: ikarus-scheme-users-guide.pdf +fast: + $(TEX) ikarus-scheme-users-guide + clean: rm -f *.aux *.log *.toc *.out *.idx *.ind *.ilg *.blg *.bbl diff --git a/doc/Makefile.in b/doc/Makefile.in index 73d9d60..0bd0110 100644 --- a/doc/Makefile.in +++ b/doc/Makefile.in @@ -352,6 +352,9 @@ all: docs: ikarus-scheme-users-guide.pdf +fast: + $(TEX) ikarus-scheme-users-guide + clean: rm -f *.aux *.log *.toc *.out *.idx *.ind *.ilg *.blg *.bbl # Tell versions [3.59,3.63) of GNU make to not export all variables. diff --git a/doc/ikarus-scheme-users-guide.pdf b/doc/ikarus-scheme-users-guide.pdf index 74979cce4b1b15e3765776b0cd23b344f2aa4d87..514fa24e8284d27e07b96932fd194a01b313d780 100644 GIT binary patch delta 51435 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

K#~D^8Osuc47`nygm%ocRf$7G2AqI$eDEE-sDu` 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 IQ?S|p0mkY{CIA2c delta 52221 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 diff --git a/doc/ikarus-scheme-users-guide.tex b/doc/ikarus-scheme-users-guide.tex index 26f9034..85e68bf 100644 --- a/doc/ikarus-scheme-users-guide.tex +++ b/doc/ikarus-scheme-users-guide.tex @@ -2242,10 +2242,10 @@ unspecified.} \newpage -\defun{pointer-set-char}{procedure} -\texttt{(pointer-set-char p i n)} +\defun{pointer-set-c-char!}{procedure} +\texttt{(pointer-set-c-char! p i n)} -The procedure \texttt{pointer-set-char} sets a single byte of memory +The procedure \texttt{pointer-set-c-char!} sets a single byte of memory located at offset \texttt{i} from the pointer \texttt{p} to the value of \texttt{n}. The pointer \texttt{p} must be a valid pointer. The index \texttt{i} must be an exact integer. The value @@ -2253,186 +2253,186 @@ of \texttt{n} must be an exact integer. Only the 8 lowermost bits of \texttt{n} are used in the operation and the remaining bits are ignored. -\defun{pointer-set-short}{procedure} -\texttt{(pointer-set-short p i n)} +\defun{pointer-set-c-short!}{procedure} +\texttt{(pointer-set-c-short! p i n)} -The procedure \texttt{pointer-set-char} sets two bytes located at +The procedure \texttt{pointer-set-c-char!!} sets two bytes located at offset \texttt{i} and \texttt{(+ i 1)} to the 16 lowermost bits of the exact integer \texttt{n}. Note that the offset \texttt{i} is a -byte offset; \texttt{pointer-set-short} does not perform any pointer +byte offset; \texttt{pointer-set-c-short!} does not perform any pointer arithmetic such as scaling the offset by the size of the memory location. -\defun{pointer-set-int}{procedure} -\texttt{(pointer-set-int p i n)} +\defun{pointer-set-c-int!}{procedure} +\texttt{(pointer-set-c-int! p i n)} -The procedure \texttt{pointer-set-int} sets four bytes located at +The procedure \texttt{pointer-set-c-int!} sets four bytes located at offset \texttt{i} to \texttt{(+ i 3)} to the 32 lowermost bits of -the exact integer \texttt{n}. Like \texttt{pointer-set-short}, -\texttt{pointer-set-int} does not scale the offset \texttt{i}. +the exact integer \texttt{n}. Like \texttt{pointer-set-c-short!}, +\texttt{pointer-set-c-int!} does not scale the offset \texttt{i}. -\defun{pointer-set-long}{procedure} -\texttt{(pointer-set-long p i n)} +\defun{pointer-set-c-long!}{procedure} +\texttt{(pointer-set-c-long! p i n)} -On 64-bit systems, the procedure \texttt{pointer-set-long} sets +On 64-bit systems, the procedure \texttt{pointer-set-c-long!} sets eight bytes located at offset \texttt{i} to \texttt{(+ i 7)} to the 64 lowermost bits of the exact integer \texttt{n}. Like the -previous procedures, \texttt{pointer-set-long} does not scale the -offset \texttt{i}. On 32-bit systems, \texttt{pointer-set-long} -performs the same task as \texttt{pointer-set-int}. +previous procedures, \texttt{pointer-set-c-long!} does not scale the +offset \texttt{i}. On 32-bit systems, \texttt{pointer-set-c-long!} +performs the same task as \texttt{pointer-set-c-int!}. -\defun{pointer-set-float}{procedure} -\texttt{(pointer-set-float p i fl)} +\defun{pointer-set-c-float!}{procedure} +\texttt{(pointer-set-c-float! p i fl)} -The procedure \texttt{pointer-set-float} converts the Scheme +The procedure \texttt{pointer-set-c-float!} converts the Scheme floating point number \texttt{fl} (represented in Ikarus as an IEEE-754 double precision floating point number) to a float (an IEEE-754 single precision floating point number) and stores the result in the four bytes at offset \texttt{i} of the pointer \texttt{p}. -\defun{pointer-set-double}{procedure} -\texttt{(pointer-set-double p i fl)} +\defun{pointer-set-c-double!}{procedure} +\texttt{(pointer-set-c-double! p i fl)} -The procedure \texttt{pointer-set-double} stores the double +The procedure \texttt{pointer-set-c-double!} stores the double precision IEEE-754 floating point value of the Scheme flonum \texttt{fl} in the eight bytes at offset \texttt{i} of the pointer \texttt{p}. -\defun{pointer-set-pointer}{procedure} -\texttt{(pointer-set-pointer p i pv)} +\defun{pointer-set-c-pointer!}{procedure} +\texttt{(pointer-set-c-pointer! p i pv)} -On 64-bit systems, the procedure \texttt{pointer-set-pointer} sets +On 64-bit systems, the procedure \texttt{pointer-set-c-pointer!} sets eight bytes located at offset \texttt{i} to \texttt{(+ i 7)} to the 64-bit pointer value of \texttt{pv}. On 32-bit systems, the -procedure \texttt{pointer-set-pointer} sets four bytes located at +procedure \texttt{pointer-set-c-pointer!} sets four bytes located at offset \texttt{i} to \texttt{(+ i 3)} to the 32-bit pointer value of \texttt{pv}. Like the previous procedures, -\texttt{pointer-set-pointer} does not scale the offset \texttt{i}. +\texttt{pointer-set-c-pointer!} does not scale the offset \texttt{i}. -\defun{pointer-ref-signed-char}{procedure} -\texttt{(pointer-ref-signed-char p i)} +\defun{pointer-ref-c-signed-char}{procedure} +\texttt{(pointer-ref-c-signed-char p i)} -The procedure \texttt{pointer-ref-signed-char} loads a single byte located +The procedure \texttt{pointer-ref-c-signed-char} loads a single byte located at offset \texttt{i} from the pointer \texttt{p} and returns an exact integer representing the sign-extended integer value of that byte. The resulting value is in the range of $[-128, 127]$ inclusive. -\defun{pointer-ref-unsigned-char}{procedure} -\texttt{(pointer-ref-unsigned-char p i)} +\defun{pointer-ref-c-unsigned-char}{procedure} +\texttt{(pointer-ref-c-unsigned-char p i)} -The procedure \texttt{pointer-ref-unsigned-char} loads a single byte +The procedure \texttt{pointer-ref-c-unsigned-char} loads a single byte located at offset \texttt{i} from the pointer \texttt{p} and returns an exact integer representing the unsigned integer value of that byte. The resulting value is in the range $[0, 255]$ inclusive. The following example shows the difference between -\texttt{pointer-ref-signed-char} and -\texttt{pointer-ref-unsigned-char}. +\texttt{pointer-ref-c-signed-char} and +\texttt{pointer-ref-c-unsigned-char}. \begin{verbatim} > (let ([p (malloc 3)]) - (pointer-set-char p 0 #b01111111) - (pointer-set-char p 1 #b10000000) - (pointer-set-char p 2 #b11111111) + (pointer-set-c-char! p 0 #b01111111) + (pointer-set-c-char! p 1 #b10000000) + (pointer-set-c-char! p 2 #b11111111) (let ([result - (list (pointer-ref-signed-char p 0) - (pointer-ref-signed-char p 1) - (pointer-ref-signed-char p 2) - (pointer-ref-unsigned-char p 0) - (pointer-ref-unsigned-char p 1) - (pointer-ref-unsigned-char p 2))]) + (list (pointer-ref-c-signed-char p 0) + (pointer-ref-c-signed-char p 1) + (pointer-ref-c-signed-char p 2) + (pointer-ref-c-unsigned-char p 0) + (pointer-ref-c-unsigned-char p 1) + (pointer-ref-c-unsigned-char p 2))]) (free p) result)) (127 -128 -1 127 128 255) \end{verbatim} -\defun{pointer-ref-signed-short}{procedure} -\texttt{(pointer-ref-signed-short p i)} +\defun{pointer-ref-c-signed-short}{procedure} +\texttt{(pointer-ref-c-signed-short p i)} -The procedure \texttt{pointer-ref-signed-short} loads two bytes +The procedure \texttt{pointer-ref-c-signed-short} loads two bytes located at offsets \texttt{i} and \texttt{(+ i 1)} from the pointer \texttt{p} and returns an exact integer representing the sign-extended integer value of the sequence. The resulting value is in the range $[-32768, 32767]$ inclusive. -\defun{pointer-ref-unsigned-short}{procedure} -\texttt{(pointer-ref-unsigned-short p i)} +\defun{pointer-ref-c-unsigned-short}{procedure} +\texttt{(pointer-ref-c-unsigned-short p i)} -The procedure \texttt{pointer-ref-unsigned-short} loads two bytes +The procedure \texttt{pointer-ref-c-unsigned-short} loads two bytes located at offsets \texttt{i} and \texttt{(+ i 1)} from the pointer \texttt{p} and returns an exact integer representing the unsigned integer value of the sequence. The resulting value is in the range $[0, 65535]$ inclusive. \newpage -\defun{pointer-ref-signed-int}{procedure} -\texttt{(pointer-ref-signed-int p i)} +\defun{pointer-ref-c-signed-int}{procedure} +\texttt{(pointer-ref-c-signed-int p i)} -The procedure \texttt{pointer-ref-signed-int} loads four bytes +The procedure \texttt{pointer-ref-c-signed-int} loads four bytes starting at offset \texttt{i} of pointer \texttt{p} and returns an exact integer in the range of $[-2^{31},2^{31}-1]$ inclusive. -\defun{pointer-ref-unsigned-int}{procedure} -\texttt{(pointer-ref-unsigned-int p i)} +\defun{pointer-ref-c-unsigned-int}{procedure} +\texttt{(pointer-ref-c-unsigned-int p i)} -The procedure \texttt{pointer-ref-unsigned-int} loads four bytes +The procedure \texttt{pointer-ref-c-unsigned-int} loads four bytes starting at offset \texttt{i} of pointer \texttt{p} and returns an exact integer in the range of $[0,2^{32}-1]$ inclusive. -\defun{pointer-ref-signed-long}{procedure} -\texttt{(pointer-ref-signed-long p i)} +\defun{pointer-ref-c-signed-long}{procedure} +\texttt{(pointer-ref-c-signed-long p i)} -On 64-bit systems, the procedure \texttt{pointer-ref-signed-long} +On 64-bit systems, the procedure \texttt{pointer-ref-c-signed-long} loads eight bytes starting at offset \texttt{i} of pointer \texttt{p} and returns an integer in the range of $[-2^{63},2^{63}-1]$ inclusive. On 32-bit systems, the procedure -\texttt{pointer-ref-signed-long} performs the same task as -\texttt{pointer-ref-signed-int}. +\texttt{pointer-ref-c-signed-long} performs the same task as +\texttt{pointer-ref-c-signed-int}. -\defun{pointer-ref-unsigned-long}{procedure} -\texttt{(pointer-ref-unsigned-long p i)} +\defun{pointer-ref-c-unsigned-long}{procedure} +\texttt{(pointer-ref-c-unsigned-long p i)} -On 64-bit systems, the procedure \texttt{pointer-ref-unsigned-long} +On 64-bit systems, the procedure \texttt{pointer-ref-c-unsigned-long} loads eight bytes starting at offset \texttt{i} of pointer \texttt{p} and returns an integer in the range of $[0,2^{64}-1]$ inclusive. On 32-bit systems, the procedure -\texttt{pointer-ref-unsigned-long} performs the same task as -\texttt{pointer-ref-unsigned-int}. +\texttt{pointer-ref-c-unsigned-long} performs the same task as +\texttt{pointer-ref-c-unsigned-int}. -\defun{pointer-ref-float}{procedure} -\texttt{(pointer-ref-float p i)} +\defun{pointer-ref-c-float}{procedure} +\texttt{(pointer-ref-c-float p i)} -The procedure \texttt{pointer-ref-float} returns the four-byte +The procedure \texttt{pointer-ref-c-float} returns the four-byte float (represented as IEEE-754 single precision floating point number) stored at offset \texttt{i} of the pointer \texttt{p}. The value is extended to an IEEE-754 double precision floating point number that Ikarus uses to represent inexact numbers. -\defun{pointer-ref-double}{procedure} -\texttt{(pointer-ref-double p i)} +\defun{pointer-ref-c-double}{procedure} +\texttt{(pointer-ref-c-double p i)} -The procedure \texttt{pointer-ref-double} returns the eight-byte +The procedure \texttt{pointer-ref-c-double} returns the eight-byte float (represented as IEEE-754 double precision floating point number) stored at offset \texttt{i} of the pointer \texttt{p}. -\defun{pointer-ref-pointer}{procedure} -\texttt{(pointer-ref-pointer p i)} +\defun{pointer-ref-c-pointer}{procedure} +\texttt{(pointer-ref-c-pointer p i)} -The procedure \texttt{pointer-ref-pointer} returns the pointer +The procedure \texttt{pointer-ref-c-pointer} returns the pointer stored at offset \texttt{i} from the pointer \texttt{p}. The size of the pointer (also the number of bytes loaded) depends on the architecture: it is 4 bytes on 32-bit systems and 8 bytes on 64-bit @@ -2567,12 +2567,12 @@ parameter type. -\defun{make-callout}{procedure} -\texttt{((make-callout return-type parameter-types) native-pointer)} +\defun{make-c-callout}{procedure} +\texttt{((make-c-callout return-type parameter-types) native-pointer)} -The procedure \texttt{make-callout} is the primary facility for +The procedure \texttt{make-c-callout} is the primary facility for making foreign procedures callable from Scheme. It works as -follows. First, \texttt{make-callout} receives two arguments +follows. First, \texttt{make-c-callout} receives two arguments denoting the signature of the procedure to be called. It prepares a bridge that converts from Scheme's calling conventions and data structures to their foreign counterparts. It returns a procedure @@ -2589,10 +2589,10 @@ types, calls the foreign procedure, obtains the result, and converts it to the appropriate Scheme value (depending on the \texttt{return-type}). -The interface of \texttt{make-callout} is broken down into three +The interface of \texttt{make-c-callout} is broken down into three stages in order to accomodate common usage patterns. Often types, a function signature can be used by many foreign procedures and -therefore, \texttt{make-callout} can be called once per signature +therefore, \texttt{make-c-callout} can be called once per signature and each signature can be used multiple times. Similarly, separating the foreign procedure preparation from parameter passing allows for preparing the foreign procedure once and calling it many @@ -2655,14 +2655,14 @@ specifier to mean ``no useful value is returned''.} The following example illustrates the use of the -\texttt{make-callout} procedure in combination with \texttt{dlopen} +\texttt{make-c-callout} procedure in combination with \texttt{dlopen} and \texttt{dlsym}. The session was run on a 32-bit Ikarus running under Mac OS X 10.4. First, the \texttt{libc.dylib} foreign library is loaded and is bound to the variable \texttt{libc}. Next, we obtain a pointer to the \texttt{atan} foreign procedure that is defined in \texttt{libc}. The native procedure \texttt{atan} takes a \texttt{double} as an argument and returns a \texttt{double} and -that's the signature that we use for \texttt{make-callout}. +that's the signature that we use for \texttt{make-c-callout}. Finally, we call the foreign procedure interface with one argument, \texttt{1.0}, which is a flonum and thus matches the required parameter type. The native procedure returns a \texttt{double} @@ -2678,7 +2678,7 @@ value which is converted to the Scheme flonum with value > libc-atan-ptr # > (define libc-atan - ((make-callout 'double '(double)) libc-atan-ptr)) + ((make-c-callout 'double '(double)) libc-atan-ptr)) > libc-atan # > (libc-atan 1.0) @@ -2713,14 +2713,14 @@ Figure~\ref{fig:foreign-types} on page~\pageref{fig:foreign-types} for details). -\defun{make-callback}{procedure} -\texttt{((make-callback return-type parameter-types) scheme-procedure)} +\defun{make-c-callback}{procedure} +\texttt{((make-c-callback return-type parameter-types) scheme-procedure)} -The procedure \texttt{make-callback} is similar to the procedure -\texttt{make-callout} except that it provides a bridge from native +The procedure \texttt{make-c-callback} is similar to the procedure +\texttt{make-c-callout} except that it provides a bridge from native procedures back into Scheme. While the procedure -\texttt{make-callout} takes a native pointer and returns a Scheme -procedure, \texttt{make-callback} takes a Scheme procedure and +\texttt{make-c-callout} takes a native pointer and returns a Scheme +procedure, \texttt{make-c-callback} takes a Scheme procedure and returns a native pointer. The native pointer can be called by foreign procedures. The native parameters are converted to Scheme data (according to \texttt{parameter-types}), the Scheme procedure @@ -2730,18 +2730,18 @@ control returns to the native call site. Note that the native procedure pointer obtained from -\texttt{make-callback} is indistinguishable from other native +\texttt{make-c-callback} is indistinguishable from other native procedures that are obtained using \texttt{dlsym} or similar means. -In particular, such native pointers can be used as arguments to -\texttt{make-callout} resulting in a Scheme procedure that calls out +In particular, such native pointers can be passed to +\texttt{make-c-callout} resulting in a Scheme procedure that calls out to the native procedure that in turn calls back into Scheme. The following segment illustrates a very inefficient way of extracting the lowermost 32 bits from an exact integer. \begin{verbatim} > (format "~x" - (((make-callout 'unsigned-int '(unsigned-int)) - ((make-callback 'unsigned-int '(unsigned-int)) + (((make-c-callout 'unsigned-int '(unsigned-int)) + ((make-c-callback 'unsigned-int '(unsigned-int)) values)) #xfedcba09876543210fedcba09876543210)) "76543210" diff --git a/lab/test-ffi.ss b/lab/test-ffi.ss index 7d4684c..652a56e 100644 --- a/lab/test-ffi.ss +++ b/lab/test-ffi.ss @@ -20,22 +20,22 @@ (define hosym (dlsym self "ho")) (define ho - ((make-callout 'signed-int '(pointer signed-int)) hosym)) + ((make-c-callout 'signed-int '(pointer signed-int)) hosym)) (define traced-foradd1 - ((make-callback 'signed-int '(signed-int)) + ((make-c-callback 'signed-int '(signed-int)) (trace-lambda add1 (n) (collect) (add1 n)))) (define foradd1 - ((make-callback 'signed-int '(signed-int)) + ((make-c-callback 'signed-int '(signed-int)) (lambda (n) (collect) (add1 n)))) (define foradd1-by-foreign-call - ((make-callback 'signed-int '(signed-int)) + ((make-c-callback 'signed-int '(signed-int)) (trace-lambda foradd1-by-foreign-call (n) (/ (ho traced-foradd1 n) 2)))) @@ -46,11 +46,11 @@ (define test_I_I - ((make-callout 'signed-int '(pointer signed-int)) (dlsym self "test_I_I"))) + ((make-c-callout 'signed-int '(pointer signed-int)) (dlsym self "test_I_I"))) (define test_I_II - ((make-callout 'signed-int '(pointer signed-int signed-int)) (dlsym self "test_I_II"))) + ((make-c-callout 'signed-int '(pointer signed-int signed-int)) (dlsym self "test_I_II"))) (define test_I_III - ((make-callout 'signed-int '(pointer signed-int signed-int signed-int)) (dlsym self "test_I_III"))) + ((make-c-callout 'signed-int '(pointer signed-int signed-int signed-int)) (dlsym self "test_I_III"))) (define C_add_I_I (dlsym self "add_I_I")) (define C_add_I_II (dlsym self "add_I_II")) @@ -60,10 +60,10 @@ (check = (test_I_II C_add_I_II 12 13) (+ 12 13)) (check = (test_I_III C_add_I_III 12 13 14) (+ 12 13 14)) -(define S_add_I_I ((make-callback 'signed-int '(signed-int)) +)) -(define S_add_I_II ((make-callback 'signed-int '(signed-int +(define S_add_I_I ((make-c-callback 'signed-int '(signed-int)) +)) +(define S_add_I_II ((make-c-callback 'signed-int '(signed-int signed-int)) +)) -(define S_add_I_III ((make-callback 'signed-int '(signed-int +(define S_add_I_III ((make-c-callback 'signed-int '(signed-int signed-int signed-int)) +)) @@ -73,11 +73,11 @@ (define test_D_D - ((make-callout 'double '(pointer double)) (dlsym self "test_D_D"))) + ((make-c-callout 'double '(pointer double)) (dlsym self "test_D_D"))) (define test_D_DD - ((make-callout 'double '(pointer double double)) (dlsym self "test_D_DD"))) + ((make-c-callout 'double '(pointer double double)) (dlsym self "test_D_DD"))) (define test_D_DDD - ((make-callout 'double '(pointer double double double)) (dlsym self "test_D_DDD"))) + ((make-c-callout 'double '(pointer double double double)) (dlsym self "test_D_DDD"))) (define C_add_D_D (dlsym self "add_D_D")) (define C_add_D_DD (dlsym self "add_D_DD")) @@ -87,9 +87,9 @@ (check = (test_D_DD C_add_D_DD 12.0 13.0) (+ 12.0 13.0)) (check = (test_D_DDD C_add_D_DDD 12.0 13.0 14.0) (+ 12.0 13.0 14.0)) -(define S_add_D_D ((make-callback 'double '(double)) +)) -(define S_add_D_DD ((make-callback 'double '(double double)) +)) -(define S_add_D_DDD ((make-callback 'double '(double double double)) +)) +(define S_add_D_D ((make-c-callback 'double '(double)) +)) +(define S_add_D_DD ((make-c-callback 'double '(double double)) +)) +(define S_add_D_DDD ((make-c-callback 'double '(double double double)) +)) (check = (test_D_D S_add_D_D 12.0) (+ 12.0)) (check = (test_D_DD S_add_D_DD 12.0 13.0) (+ 12.0 13.0)) @@ -97,7 +97,7 @@ (define RectArea - ((make-callout 'float '(#(#(float float) #(float float)))) + ((make-c-callout 'float '(#(#(float float) #(float float)))) (dlsym self "test_area_F_R"))) (check = (RectArea '#(#(0.0 0.0) #(10.0 10.0))) 100.0) diff --git a/lib/Cocoa/helpers.ss b/lib/Cocoa/helpers.ss index 59f7399..0432ad0 100644 --- a/lib/Cocoa/helpers.ss +++ b/lib/Cocoa/helpers.ss @@ -6,13 +6,13 @@ (define kProcessTransformToForegroundApplication 1) (define self (dlopen)) (define get-current-process - ((make-callout 'void '(pointer)) + ((make-c-callout 'void '(pointer)) (dlsym self "GetCurrentProcess"))) (define transform-process-type - ((make-callout 'void '(pointer signed-int)) + ((make-c-callout 'void '(pointer signed-int)) (dlsym self "TransformProcessType"))) (define set-front-process - ((make-callout 'void '(pointer)) + ((make-c-callout 'void '(pointer)) (dlsym self "SetFrontProcess"))) (let ([p (malloc 16)]) (get-current-process p) diff --git a/lib/ikarus/foreign.ss b/lib/ikarus/foreign.ss index d536b5d..bfd7ba0 100644 --- a/lib/ikarus/foreign.ss +++ b/lib/ikarus/foreign.ss @@ -1,17 +1,29 @@ (library (ikarus foreign) - (export malloc free pointer-set-char pointer-set-short - pointer-set-int pointer-set-long pointer-set-pointer - pointer-set-float pointer-set-double - pointer-ref-signed-char pointer-ref-signed-short - pointer-ref-signed-int pointer-ref-signed-long - pointer-ref-unsigned-char pointer-ref-unsigned-short - pointer-ref-unsigned-int pointer-ref-unsigned-long - pointer-ref-pointer pointer-ref-float pointer-ref-double + (export + pointer-set-c-char! + pointer-set-c-short! + pointer-set-c-int! + pointer-set-c-long! + pointer-set-c-pointer! + pointer-set-c-float! + pointer-set-c-double! + pointer-ref-c-signed-char + pointer-ref-c-signed-short + pointer-ref-c-signed-int + pointer-ref-c-signed-long + pointer-ref-c-unsigned-char + pointer-ref-c-unsigned-short + pointer-ref-c-unsigned-int + pointer-ref-c-unsigned-long + pointer-ref-c-pointer + pointer-ref-c-float + pointer-ref-c-double + malloc free pointer->integer integer->pointer pointer? dlopen dlsym dlclose dlerror - make-callout make-callback) + make-c-callout make-c-callback) (import (ikarus system $foreign))) diff --git a/lib/objc.ss b/lib/objc.ss index 5e92127..2925337 100644 --- a/lib/objc.ss +++ b/lib/objc.ss @@ -61,7 +61,7 @@ (define (pointer-ref addr offset) (assert (pointer? addr)) - (integer->pointer (pointer-ref-signed-long addr offset))) + (pointer-ref-c-pointer addr offset)) (define (offset? x) (or (fixnum? x) (bignum? x))) @@ -70,12 +70,12 @@ (check who pointer? addr) (check who pointer? val) (check who offset? offset) - (pointer-set-long addr offset (pointer->integer val))) + (pointer-set-c-pointer! addr offset val)) (define (char*len x) (let f ([i 0]) (cond - [(zero? (pointer-ref-unsigned-char x i)) i] + [(zero? (pointer-ref-c-unsigned-char x i)) i] [else (f (+ i 1))]))) (define (char*->bv x) @@ -85,18 +85,18 @@ (cond [(= i n) bv] [else - (bytevector-u8-set! bv i (pointer-ref-unsigned-char x i)) + (bytevector-u8-set! bv i (pointer-ref-c-unsigned-char x i)) (f (+ i 1))]))))) (define (bv->char* x) (let ([n (bytevector-length x)]) (let ([p (malloc (+ n 1))]) - (pointer-set-char p n 0) + (pointer-set-c-char! p n 0) (let f ([i 0]) (cond [(= i n) p] [else - (pointer-set-char p i (bytevector-s8-ref x i)) + (pointer-set-c-char! p i (bytevector-s8-ref x i)) (f (+ i 1))]))))) (define (bv->u8* x) @@ -108,7 +108,7 @@ (cond [(= i n) p] [else - (pointer-set-char p i (bytevector-s8-ref x i)) + (pointer-set-c-char! p i (bytevector-s8-ref x i)) (f (+ i 1))])))))) (define (char*->string x) @@ -183,7 +183,7 @@ (define (class-instance-size x) (check 'class-instance-size class? x) - (pointer-ref-signed-long (class-ptr x) objc-class-instance-size-offset)) + (pointer-ref-c-signed-long (class-ptr x) objc-class-instance-size-offset)) (define (ivar-name x) (check 'ivar-name ivar? x) @@ -195,14 +195,14 @@ (define (ivar-offset x) (check 'ivar-offset ivar? x) - (pointer-ref-signed-int (ivar-ptr x) (* 2 ptrsize))) + (pointer-ref-c-signed-int (ivar-ptr x) (* 2 ptrsize))) (define (class-ivars x) (check 'class-ivars class? x) (let ([p (pointer-ref (class-ptr x) objc-class-ivars-offset)]) (if (nil? p) '() - (let ([n (pointer-ref-signed-long p 0)]) + (let ([n (pointer-ref-c-signed-long p 0)]) (let f ([i 0] [off objc-ivarlist-ivars-offset]) (if (= i n) '() @@ -223,7 +223,7 @@ [class (malloc objc-class-struct-size)] [meta (malloc objc-class-struct-size)]) ;;; init meta class - (pointer-set-long meta objc-class-info-offset CLS_META) + (pointer-set-c-long! meta objc-class-info-offset CLS_META) (pointer-set meta objc-class-name-offset (string->char* name)) (pointer-set meta objc-class-methodlists-offset (malloc objc-methodlist-methods-offset)) @@ -232,14 +232,14 @@ (pointer-set meta objc-class-isa-offset (pointer-ref (class-ptr root-class) objc-class-isa-offset)) ;;; init class - (pointer-set-long class objc-class-info-offset CLS_CLASS) + (pointer-set-c-long! class objc-class-info-offset CLS_CLASS) (pointer-set class objc-class-name-offset (string->char* name)) (pointer-set class objc-class-methodlists-offset (malloc objc-methodlist-methods-offset)) (pointer-set class objc-class-superclass-offset (class-ptr super-class)) (pointer-set class objc-class-ivars-offset ivars-ptr) - (pointer-set-long class objc-class-instance-size-offset instance-size) + (pointer-set-c-long! class objc-class-instance-size-offset instance-size) ;;; wire up (pointer-set class objc-class-isa-offset meta) (when intern? (objc_addClass class)) @@ -251,7 +251,7 @@ (check who procedure? proc) (let ([type (make-objc-type (cons rtype argtypes))]) (let ([callback - (make-callback + (make-c-callback (objc-type->ikarus-type rtype) (map objc-type->ikarus-type argtypes))]) (let ([imp (callback @@ -260,7 +260,7 @@ (apply proc (map convert-incoming argtypes args)))))]) (let ([p (malloc (+ objc-methodlist-methods-offset objc-method-size))]) - (pointer-set-int p objc-methodlist-count-offset 1) + (pointer-set-c-int! p objc-methodlist-count-offset 1) (pointer-set p (+ objc-methodlist-methods-offset objc-method-sel-offset) (selector-ptr @@ -312,11 +312,11 @@ (cond [(assq what alist) => cadr] [else (error 'class-is? "invalid what" what)])]) - (= mask (bitwise-and mask (pointer-ref-signed-long (class-ptr x) (* ptrsize 4)))))) + (= mask (bitwise-and mask (pointer-ref-c-signed-long (class-ptr x) (* ptrsize 4)))))) (define (class-methods x) (define (methods x) - (let ([n (pointer-ref-signed-int x ptrsize)] + (let ([n (pointer-ref-c-signed-int x ptrsize)] [array (integer->pointer (+ (pointer->integer x) (* 2 ptrsize)))]) (let f ([i 0]) (if (= i n) @@ -330,7 +330,7 @@ (when (class-is? x 'method-array) (error 'class-methods "BUG: not yet for method arrays")) (let ([iterator (malloc ptrsize)]) - (pointer-set-long iterator 0 0) + (pointer-set-c-long! iterator 0 0) (let f () (let ([methodlist (class_nextMethodList (class-ptr x) iterator)]) (cond @@ -354,7 +354,7 @@ (cons (make-class (integer->pointer - (pointer-ref-signed-long buffer (* ptrsize i)))) + (pointer-ref-c-signed-long buffer (* ptrsize i)))) ac))))))))) (define (nil? x) @@ -475,7 +475,7 @@ (define count (length ivars)) (define p (malloc (+ objc-ivarlist-ivars-offset (* count objc-ivar-size)))) - (pointer-set-int p objc-ivarlist-count-offset count) + (pointer-set-c-int! p objc-ivarlist-count-offset count) (let f ([ivars ivars] [poff objc-ivarlist-ivars-offset] [ivaroff (class-instance-size super-class)]) @@ -489,7 +489,7 @@ (string->char* (symbol->string name))) (pointer-set p (+ poff objc-ivar-type-offset) (string->char* ivar-type)) - (pointer-set-int p (+ poff objc-ivar-offset-offset) ivaroff) + (pointer-set-c-int! p (+ poff objc-ivar-offset-offset) ivaroff) (f (cdr ivars) (+ poff objc-ivar-size) (+ ivaroff ivar-size)))))]))) @@ -643,7 +643,7 @@ (let ([rtype (car sig)] [argtypes (cdr sig)]) (unless (= (length args) (length argtypes)) (error 'call-with-sig "incorrect number of args" args argtypes)) - (let ([ffi (make-callout + (let ([ffi (make-c-callout (objc-type->ikarus-type rtype) (map objc-type->ikarus-type argtypes))]) (let ([proc (ffi mptr)]) diff --git a/lib/ypsilon-compat.ikarus.ss b/lib/ypsilon-compat.ikarus.ss index 318f7d8..057b65c 100644 --- a/lib/ypsilon-compat.ikarus.ss +++ b/lib/ypsilon-compat.ikarus.ss @@ -80,7 +80,7 @@ (cond [(= i n) p] [else - (pointer-set-int p (* i 4) (vector-ref x i)) + (pointer-set-c-int! p (* i 4) (vector-ref x i)) (f (+ i 1))]))))] [else (die who "not an int*" x)])) @@ -104,7 +104,7 @@ (cond [(= i n) p] [else - (pointer-set-int p (* i pointer-size) + (pointer-set-c-int! p (* i pointer-size) (pointer->integer (check-char* who (vector-ref x i)))) (f (+ i 1))]))))] [else (die who "not a char**" x)])) @@ -114,12 +114,12 @@ [(bytevector? x) (let ([n (bytevector-length x)]) (let ([p (malloc (+ n 1))]) - (pointer-set-char p n 0) + (pointer-set-c-char! p n 0) (let f ([i 0]) (cond [(= i n) p] [else - (pointer-set-char p i (bytevector-u8-ref x i)) + (pointer-set-c-char! p i (bytevector-u8-ref x i)) (f (+ i 1))]))))] [else (die who "not a byte*" x)])) @@ -139,7 +139,7 @@ [(_ foreign-name val return-type (arg-type* ...)) #'(let ([t val]) (if (procedure? t) - ((make-callback + ((make-c-callback (convert-type return-type) (list (convert-type arg-type*) ...)) t) @@ -187,7 +187,7 @@ (define (strlen x) (let f ([i 0]) (cond - [(= 0 (pointer-ref-unsigned-char x i)) i] + [(= 0 (pointer-ref-c-unsigned-char x i)) i] [else (f (+ i 1))]))) (let ([n (strlen x)]) (let ([s (make-string n)]) @@ -196,7 +196,7 @@ s (begin (string-set! s i - (integer->char (pointer-ref-unsigned-char x i))) + (integer->char (pointer-ref-c-unsigned-char x i))) (f (+ i 1)))))))) (define-syntax convert-return @@ -254,7 +254,7 @@ (with-syntax ([x x] [(t* ...) (generate-temporaries #'(arg-type* ...))]) #'(let ([callout - ((make-callout + ((make-c-callout (convert-type return-type) (list (convert-type arg-type*) ...)) (lookup-shared-object lib 'foreign-name))]) diff --git a/scheme/ikarus.pointers.ss b/scheme/ikarus.pointers.ss index f48f08a..bae3564 100644 --- a/scheme/ikarus.pointers.ss +++ b/scheme/ikarus.pointers.ss @@ -2,19 +2,25 @@ (library (ikarus.pointers) (export pointer? integer->pointer pointer->integer dlopen dlerror dlclose dlsym malloc free - pointer-ref-signed-char - pointer-ref-signed-short - pointer-ref-signed-int - pointer-ref-signed-long - pointer-ref-unsigned-char - pointer-ref-unsigned-short - pointer-ref-unsigned-int - pointer-ref-unsigned-long - pointer-set-char pointer-set-short pointer-set-int pointer-set-long - pointer-set-pointer pointer-ref-pointer - pointer-set-float pointer-ref-float - pointer-set-double pointer-ref-double - make-callout make-callback) + pointer-ref-c-signed-char + pointer-ref-c-signed-short + pointer-ref-c-signed-int + pointer-ref-c-signed-long + pointer-ref-c-unsigned-char + pointer-ref-c-unsigned-short + pointer-ref-c-unsigned-int + pointer-ref-c-unsigned-long + pointer-ref-c-float + pointer-ref-c-double + pointer-ref-c-pointer + pointer-set-c-char! + pointer-set-c-short! + pointer-set-c-int! + pointer-set-c-long! + pointer-set-c-pointer! + pointer-set-c-float! + pointer-set-c-double! + make-c-callout make-c-callback) (import (except (ikarus) pointer? @@ -120,25 +126,25 @@ (define (int? x) (or (fixnum? x) (bignum? x))) - (define-getter pointer-ref-signed-char "ikrt_ref_char") - (define-getter pointer-ref-signed-short "ikrt_ref_short") - (define-getter pointer-ref-signed-int "ikrt_ref_int") - (define-getter pointer-ref-signed-long "ikrt_ref_long") - (define-getter pointer-ref-unsigned-char "ikrt_ref_uchar") - (define-getter pointer-ref-unsigned-short "ikrt_ref_ushort") - (define-getter pointer-ref-unsigned-int "ikrt_ref_uint") - (define-getter pointer-ref-unsigned-long "ikrt_ref_ulong") - (define-getter pointer-ref-float "ikrt_ref_float") - (define-getter pointer-ref-double "ikrt_ref_double") - (define-getter pointer-ref-pointer "ikrt_ref_pointer") + (define-getter pointer-ref-c-signed-char "ikrt_ref_char") + (define-getter pointer-ref-c-signed-short "ikrt_ref_short") + (define-getter pointer-ref-c-signed-int "ikrt_ref_int") + (define-getter pointer-ref-c-signed-long "ikrt_ref_long") + (define-getter pointer-ref-c-unsigned-char "ikrt_ref_uchar") + (define-getter pointer-ref-c-unsigned-short "ikrt_ref_ushort") + (define-getter pointer-ref-c-unsigned-int "ikrt_ref_uint") + (define-getter pointer-ref-c-unsigned-long "ikrt_ref_ulong") + (define-getter pointer-ref-c-float "ikrt_ref_float") + (define-getter pointer-ref-c-double "ikrt_ref_double") + (define-getter pointer-ref-c-pointer "ikrt_ref_pointer") - (define-setter pointer-set-char int? "ikrt_set_char") - (define-setter pointer-set-short int? "ikrt_set_short") - (define-setter pointer-set-int int? "ikrt_set_int") - (define-setter pointer-set-long int? "ikrt_set_long") - (define-setter pointer-set-float flonum? "ikrt_set_float") - (define-setter pointer-set-double flonum? "ikrt_set_double") - (define-setter pointer-set-pointer pointer? "ikrt_set_pointer") + (define-setter pointer-set-c-char! int? "ikrt_set_char") + (define-setter pointer-set-c-short! int? "ikrt_set_short") + (define-setter pointer-set-c-int! int? "ikrt_set_int") + (define-setter pointer-set-c-long! int? "ikrt_set_long") + (define-setter pointer-set-c-float! flonum? "ikrt_set_float") + (define-setter pointer-set-c-double! flonum? "ikrt_set_double") + (define-setter pointer-set-c-pointer! pointer? "ikrt_set_pointer") ;;; libffi interface @@ -202,8 +208,8 @@ argtypes-n rtype-n))) - (define (make-callout rtype argtypes) - (define who 'make-callout) + (define (make-c-callout rtype argtypes) + (define who 'make-c-callout) (let-values ([(cif argtypes-n rtype-n) (ffi-prep-cif rtype argtypes)]) (let* ([argtypes-vec (list->vector argtypes)] @@ -228,11 +234,11 @@ checkers argtypes-vec argsvec) (foreign-call "ikrt_ffi_call" data argsvec))))))) - (define (make-callback rtype argtypes) + (define (make-c-callback rtype argtypes) (let-values ([(cif argtypes-n rtype-n) (ffi-prep-cif rtype argtypes)]) (lambda (proc) - (define who 'make-callback) + (define who 'make-c-callback) (unless (procedure? proc) (die who "not a procedure")) (let ([proc diff --git a/scheme/last-revision b/scheme/last-revision index fed8f61..dd3467d 100644 --- a/scheme/last-revision +++ b/scheme/last-revision @@ -1 +1 @@ -1622 +1623 diff --git a/scheme/makefile.ss b/scheme/makefile.ss index c2087f4..a5556c3 100755 --- a/scheme/makefile.ss +++ b/scheme/makefile.ss @@ -1455,36 +1455,36 @@ [cp0-effort-limit i] [tag-analysis-output i] [perform-tag-analysis i] - [pointer? $for] - [pointer->integer $for] - [integer->pointer $for] - [dlopen $for] - [dlerror $for] - [dlclose $for] - [dlsym $for] - [malloc $for] - [free $for] - [pointer-ref-signed-char $for] - [pointer-ref-signed-short $for] - [pointer-ref-signed-int $for] - [pointer-ref-signed-long $for] - [pointer-ref-unsigned-char $for] - [pointer-ref-unsigned-short $for] - [pointer-ref-unsigned-int $for] - [pointer-ref-unsigned-long $for] - [pointer-set-char $for] - [pointer-set-short $for] - [pointer-set-int $for] - [pointer-set-long $for] - [pointer-set-pointer $for] - [pointer-ref-pointer $for] - [pointer-set-float $for] - [pointer-ref-float $for] - [pointer-set-double $for] - [pointer-ref-double $for] - [make-callout $for] - [make-callback $for] - [host-info i] + [pointer? $for] + [pointer->integer $for] + [integer->pointer $for] + [dlopen $for] + [dlerror $for] + [dlclose $for] + [dlsym $for] + [malloc $for] + [free $for] + [pointer-ref-c-signed-char $for] + [pointer-ref-c-signed-short $for] + [pointer-ref-c-signed-int $for] + [pointer-ref-c-signed-long $for] + [pointer-ref-c-unsigned-char $for] + [pointer-ref-c-unsigned-short $for] + [pointer-ref-c-unsigned-int $for] + [pointer-ref-c-unsigned-long $for] + [pointer-ref-c-float $for] + [pointer-ref-c-double $for] + [pointer-ref-c-pointer $for] + [pointer-set-c-char! $for] + [pointer-set-c-short! $for] + [pointer-set-c-int! $for] + [pointer-set-c-long! $for] + [pointer-set-c-pointer! $for] + [pointer-set-c-float! $for] + [pointer-set-c-double! $for] + [make-c-callout $for] + [make-c-callback $for] + [host-info i] ))