##API
All extensions should extend JPExtension
:
@interface JPExtension : NSObject + (void)main:(JSContext *)context; + (void *)formatPointerJSToOC:(JSValue *)val; + (id)formatPointerOCToJS:(void *)pointer; + (id)formatJSToOC:(JSValue *)val; + (id)formatOCToJS:(id)obj; + (int)sizeOfStructTypes:(NSString *)structTypes; + (void)getStructDataWidthDict:(void *)structData dict:(NSDictionary *)dict structDefine:(NSDictionary *)structDefine; + (NSDictionary *)getDictOfStruct:(void *)structData structDefine:(NSDictionary *)structDefine; @end
##Add C function support
The +main:
method in JPExtension
will be executed when the extension added to JPEngine
, so we can add JS methods in +main:
.
The 4 formatXXX
methods are used for translate types through OC and JS, use -formatPointerJSToOC:
/ -formatJSToOC:
to convert params from JS to OC, use -formatPointerOCToJS:
/ -formatOCToJS:
to convert return value from OC to JS. Example:
@interface JPMemory : JPExtension @end @implementation JPMemory + (void)main:(JSContext *)context { context[@"malloc"] = ^id(size_t size) { void *m = malloc(size); return [self formatPointerOCToJS:m]; }; context[@"free"] = ^id(JSValue *jsVal) { void *m = [self formatPointerJSToOC:jsVal]; free(m) }; } @end
Now we can use malloc()
and free()
in JS:
require('JPEngine').addExtensions(['JPMemory']) var m = malloc(1024) free(m)
RetroSearch is an open source project built by @garambo | Open a GitHub Issue
Search and Browse the WWW like it's 1997 | Search results from DuckDuckGo
HTML:
3.2
| Encoding:
UTF-8
| Version:
0.7.4