From 00d2d8802788fd3a2ee6e419ef4b7dd323f07447 Mon Sep 17 00:00:00 2001 From: Slava Pestov Date: Sat, 17 Nov 2007 01:43:15 -0500 Subject: [PATCH] Revert alien.compiler tweak, it was too clever --- core/alien/compiler/compiler.factor | 54 +++++++++++++++++------------ 1 file changed, 31 insertions(+), 23 deletions(-) diff --git a/core/alien/compiler/compiler.factor b/core/alien/compiler/compiler.factor index 7e0165cd64..992c7763f2 100755 --- a/core/alien/compiler/compiler.factor +++ b/core/alien/compiler/compiler.factor @@ -202,23 +202,6 @@ M: alien-invoke-error summary : pop-parameters pop-literal nip [ expand-constants ] map ; -\ alien-invoke [ - ! Four literals - 4 ensure-values - \ alien-invoke empty-node - ! Compile-time parameters - pop-parameters over set-alien-invoke-parameters - pop-literal nip over set-alien-invoke-function - pop-literal nip over set-alien-invoke-library - pop-literal nip over set-alien-invoke-return - ! Quotation which coerces parameters to required types - dup make-prep-quot recursive-state get infer-quot - ! Add node to IR - dup node, - ! Magic #: consume exactly the number of inputs - 0 alien-invoke-stack -] "infer" set-word-prop - : stdcall-mangle ( symbol node -- symbol ) "@" swap alien-node-parameters parameter-sizes drop @@ -228,13 +211,38 @@ M: alien-invoke-error summary dup alien-invoke-function swap alien-invoke-library load-library ; +TUPLE: no-such-symbol ; + +M: no-such-symbol summary + drop "Symbol not found" ; + +: no-such-symbol ( -- ) + \ no-such-symbol inference-error ; + : alien-invoke-dlsym ( node -- symbol dll ) - dup (alien-invoke-dlsym) - >r over stdcall-mangle r> 2dup dlsym [ - rot drop - ] [ - 2drop (alien-invoke-dlsym) - ] if ; + dup (alien-invoke-dlsym) 2dup dlsym [ + >r over stdcall-mangle r> 2dup dlsym + [ no-such-symbol ] unless + ] unless rot drop ; + +\ alien-invoke [ + ! Four literals + 4 ensure-values + \ alien-invoke empty-node + ! Compile-time parameters + pop-parameters over set-alien-invoke-parameters + pop-literal nip over set-alien-invoke-function + pop-literal nip over set-alien-invoke-library + pop-literal nip over set-alien-invoke-return + ! If symbol doesn't resolve, no stack effect, no compile + dup alien-invoke-dlsym 2drop + ! Quotation which coerces parameters to required types + dup make-prep-quot recursive-state get infer-quot + ! Add node to IR + dup node, + ! Magic #: consume exactly the number of inputs + 0 alien-invoke-stack +] "infer" set-word-prop M: alien-invoke generate-node dup alien-invoke-frame [