49 lines
		
	
	
		
			1.4 KiB
		
	
	
	
		
			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 ;
 | ||
|  | 
 |