C++ API Reference
Public header: engine.h. All examples use the Emjs::JsEngine class.
Create / destroy
// Caller-owned buffer (not freed on destroy)
char mem[8192];
JsEngine* js = JsEngine::create(mem, sizeof(mem));
JsEngine::destroy(js);
// Engine-owned buffer (freed on destroy)
JsEngine* js2 = JsEngine::create(8192);
JsEngine::destroy(js2);
Evaluate JavaScript
JsValue v = js->eval("1+2+3");
const char* s = js->str(v); // "6" or error message
callGlobal — faster than eval call strings
js->eval("function add(a,b){return a+b;};");
JsValue argv[2] = {JsEngine::makeNumber(10), JsEngine::makeNumber(32)};
JsValue r1 = js->callGlobal("add", argv, 2); // 42
JsValue r2 = js->callGlobal("add", {
JsEngine::makeNumber(1),
JsEngine::makeNumber(2),
}); // 3
Error cases: bad call, 'name' not found, 'name' not callable.
Inject native C++ functions
JsValue add(JsEngine* js, JsValue* args, int nargs) {
if (!JsEngine::chkArgs(args, nargs, "dd"))
return js->makeError("type mismatch");
return JsEngine::makeNumber(
JsEngine::getNumber(args[0]) + JsEngine::getNumber(args[1]));
}
js->set(js->glob(), "add", JsEngine::makeFunction(add));
chkArgs format characters
| Char | Type |
|---|---|
d | number |
b | boolean |
s | string |
j | any JS value |
Value factories
makeUndefined(),makeNull(),makeTrue(),makeFalse()makeNumber(double),makeString(data, len)makeFunction(NativeFunction),makeObject()makeError(format, ...)
Runtime controls
js->setGcThreshold(1024);
js->setMaxCss(5000);
js->gc();
size_t total=0, lwm=0, css=0;
js->stats(&total, &lwm, &css);
Object property access
JsValue obj = js->makeObject();
js->set(obj, "answer", JsEngine::makeNumber(42));
js->set(js->glob(), "cfg", obj);