factor/unmaintained/javascriptcore/javascriptcore.factor

49 lines
1.4 KiB
Factor

! Copyright (C) 2010 Doug Coleman.
! See http://factorcode.org/license.txt for BSD license.
USING: alien.c-types alien.data byte-arrays continuations fry
io.encodings.string io.encodings.utf8 io.files
javascriptcore.ffi javascriptcore.ffi.hack kernel namespaces
sequences ;
IN: javascriptcore
ERROR: javascriptcore-error error ;
SYMBOL: js-context
: with-global-context ( quot -- )
[
[ f JSGlobalContextCreate dup js-context set ] dip
[ nip '[ @ ] ]
[ drop '[ _ JSGlobalContextRelease ] ] 2bi
[ ] cleanup
] with-scope ; inline
: with-javascriptcore ( quot -- )
set-callstack-bounds
with-global-context ; inline
: JSString>string ( JSString -- string )
dup JSStringGetMaximumUTF8CStringSize [ <byte-array> ] keep
[ JSStringGetUTF8CString drop ] [ drop ] 2bi
utf8 decode [ 0 = ] trim-tail ;
: JSValueRef>string ( ctx JSValueRef/f -- string/f )
[
f JSValueToStringCopy
[ JSString>string ] [ JSStringRelease ] bi
] [
drop f
] if* ;
: eval-js ( string -- result-string )
[ js-context get dup ] dip
JSStringCreateWithUTF8CString f f 0
{ { void* initial: f } } [ JSEvaluateScript ] with-out-parameters
dup [ nip JSValueRef>string javascriptcore-error ] [ drop JSValueRef>string ] if ;
: eval-js-standalone ( string -- result-string )
'[ _ eval-js ] with-javascriptcore ;
: eval-js-path-standalone ( path -- result-string ) utf8 file-contents eval-js-standalone ;