Esempio n. 1
0
void StyleContext::setKeyword(const std::string& _key, Value _val) {
    auto keywordKey = Filter::keywordType(_key);
    if (keywordKey == FilterKeyword::undefined) {
        LOG("Undefined Keyword: %s", _key.c_str());
        return;
    }

    // Unset shortcuts in case setKeyword was not called by
    // the helper functions above.
    if (_key == key_zoom) { m_keywordZoom = -1; }
    if (_key == key_geom) { m_keywordGeom = -1; }

    Value& entry = m_keywords[static_cast<uint8_t>(keywordKey)];
    if (entry == _val) { return; }

    if (_val.is<std::string>()) {
        duk_push_string(m_ctx, _val.get<std::string>().c_str());
        duk_put_global_string(m_ctx, _key.c_str());
    } else if (_val.is<double>()) {
        duk_push_number(m_ctx, _val.get<double>());
        duk_put_global_string(m_ctx, _key.c_str());
    }

    entry = std::move(_val);
}
Esempio n. 2
0
void test(duk_context *ctx) {
	duk_eval_string(ctx, "1+2");
	printf("1+2=%d\n", (int) duk_get_int(ctx, -1));
	duk_pop(ctx);

	duk_push_c_function(ctx, native_print, 1);
	duk_put_global_string(ctx, "print");
	duk_push_c_function(ctx, native_adder, DUK_VARARGS);
	duk_put_global_string(ctx, "adder");

	duk_eval_string_noresult(ctx, "print('2+3=' + adder(2, 3));");
}
Esempio n. 3
0
StyleContext::StyleContext() {
    m_ctx = duk_create_heap_default();

    //// Create global geometry constants
    // TODO make immutable
    duk_push_number(m_ctx, GeometryType::points);
    duk_put_global_string(m_ctx, "point");

    duk_push_number(m_ctx, GeometryType::lines);
    duk_put_global_string(m_ctx, "line");

    duk_push_number(m_ctx, GeometryType::polygons);
    duk_put_global_string(m_ctx, "polygon");

    //// Create global 'feature' object
    // Get Proxy constructor
    // -> [cons]
    duk_eval_string(m_ctx, "Proxy");

    // Add feature object
    // -> [cons, { __obj: this }]
    duk_idx_t featureObj = duk_push_object(m_ctx);
    duk_push_pointer(m_ctx, this);
    duk_put_prop_string(m_ctx, featureObj, INSTANCE_ID);

    // Add handler object
    // -> [cons, {...}, { get: func, has: func }]
    duk_idx_t handlerObj = duk_push_object(m_ctx);
    // Add 'get' property to handler
    duk_push_c_function(m_ctx, jsGetProperty, 3 /*nargs*/);
    duk_put_prop_string(m_ctx, handlerObj, "get");
    // Add 'has' property to handler
    duk_push_c_function(m_ctx, jsHasProperty, 2 /*nargs*/);
    duk_put_prop_string(m_ctx, handlerObj, "has");

    // Call proxy constructor
    // [cons, feature, handler ] -> [obj|error]
    if (duk_pnew(m_ctx, 2) == 0) {
        // put feature proxy object in global scope
        if (!duk_put_global_string(m_ctx, "feature")) {
            LOGE("Initialization failed");
        }
    } else {
        LOGE("Failure: %s", duk_safe_to_string(m_ctx, -1));
        duk_pop(m_ctx);
    }

    DUMP("init\n");
}
Esempio n. 4
0
/* Thread with shared and fresh globals. */
static duk_ret_t test_2(duk_context *ctx, void *udata) {
	duk_context *ctx_a;
	duk_context *ctx_b;

	(void) udata;

	duk_eval_string_noresult(ctx, "this.globalFoo = 'bar';");

	duk_push_thread(ctx);
	ctx_a = duk_require_context(ctx, -1);
	duk_push_thread_new_globalenv(ctx);
	ctx_b = duk_require_context(ctx, -1);

	printf("top: %ld\n", (long) duk_get_top(ctx));

	/* Dummy print() binding. */
	duk_push_c_function(ctx_b, my_print, 1);
	duk_put_global_string(ctx_b, "print");

	/* index 0: thread with globals shared with 'ctx' (has globalFoo)
	 * index 1: thread with globals separate with 'ctx'
	 */

	/* Print globalFoo. */

	duk_peval_string_noresult(ctx_a, "print('context a: ' + String(this.globalFoo));");
	duk_peval_string_noresult(ctx_b, "print('context b: ' + String(this.globalFoo));");

	return 0;
}
Esempio n. 5
0
bool StyleContext::setFunctions(const std::vector<std::string>& _functions) {

    auto arr_idx = duk_push_array(m_ctx);
    int id = 0;

    bool ok = true;

    for (auto& function : _functions) {
        duk_push_string(m_ctx, function.c_str());
        duk_push_string(m_ctx, "");

        if (duk_pcompile(m_ctx, DUK_COMPILE_FUNCTION) == 0) {
            duk_put_prop_index(m_ctx, arr_idx, id);
        } else {
            LOGW("Compile failed: %s\n%s\n---",
                 duk_safe_to_string(m_ctx, -1),
                 function.c_str());
            duk_pop(m_ctx);
            ok = false;
        }
        id++;
    }

    if (!duk_put_global_string(m_ctx, FUNC_ID)) {
        LOGE("'fns' object not set");
    }

    DUMP("setFunctions\n");
    return ok;
}
Esempio n. 6
0
void
_gum_duk_process_init (GumDukProcess * self,
                       GumDukCore * core)
{
  GumDukScope scope = GUM_DUK_SCOPE_INIT (core);
  duk_context * ctx = scope.ctx;

  self->core = core;

  duk_push_c_function (ctx, gumjs_process_construct, 0);
  duk_push_object (ctx);
  duk_put_function_list (ctx, -1, gumjs_process_functions);
  duk_push_string (ctx, GUM_SCRIPT_ARCH);
  duk_put_prop_string (ctx, -2, "arch");
  duk_push_string (ctx, GUM_SCRIPT_PLATFORM);
  duk_put_prop_string (ctx, -2, "platform");
  duk_push_uint (ctx, gum_query_page_size ());
  duk_put_prop_string (ctx, -2, "pageSize");
  duk_push_uint (ctx, GLIB_SIZEOF_VOID_P);
  duk_put_prop_string (ctx, -2, "pointerSize");
  duk_put_prop_string (ctx, -2, "prototype");
  duk_new (ctx, 0);
  _gum_duk_put_data (ctx, -1, self);
  duk_put_global_string (ctx, "Process");
}
Esempio n. 7
0
static duk_ret_t test_modsearch_module(duk_context *ignored_ctx, void *udata) {
	duk_context *ctx;

	(void) udata;

	ctx = duk_create_heap_default();
	if (!ctx) {
		printf("Failed to create heap\n");
		return 0;
	}

	/* Dummy print() binding. */
	duk_push_c_function(ctx, my_print, 1);
	duk_put_global_string(ctx, "print");

	/* Register Duktape.modSearch. */
	duk_eval_string(ctx, "(function (fun) { Duktape.modSearch = fun; })");
	duk_push_c_function(ctx, my_modsearch, 4 /*nargs*/);
	duk_call(ctx, 1);
	duk_pop(ctx);

	/* Require test. */
	duk_eval_string_noresult(ctx, "var mod = require('my_module'); print(mod.FLAG_FOO); mod.func1();");

	printf("final top: %ld\n", (long) duk_get_top(ctx));
	duk_destroy_heap(ctx);
	return 0;
}
Esempio n. 8
0
void StyleContext::initFunctions(const Scene& _scene) {

    if (_scene.id == m_sceneId) {
        return;
    }
    m_sceneId = _scene.id;

    auto arr_idx = duk_push_array(m_ctx);
    int id = 0;

    for (auto& function : _scene.functions()) {
        //logMsg("compile '%s'\n", function.c_str());
        duk_push_string(m_ctx, function.c_str());
        duk_push_string(m_ctx, "");

        if (duk_pcompile(m_ctx, DUK_COMPILE_FUNCTION) == 0) {
            duk_put_prop_index(m_ctx, arr_idx, id);
        } else {
            logMsg("Error: compile failed: %s\n", duk_safe_to_string(m_ctx, -1));
            duk_pop(m_ctx);
        }
        id++;
    }

    if (!duk_put_global_string(m_ctx, FUNC_ID)) {
        logMsg("Error: 'fns' object not set\n");
    }

    DUMP("setScene - %d functions\n", id);
}
Esempio n. 9
0
void Expose_Light(duk_context* ctx)
{
    duk_push_object(ctx);
    duk_put_function_list(ctx, -1, Light_StaticFunctions);
    duk_push_number(ctx, 0);
    duk_put_prop_string(ctx, -2, "PointLight");
    duk_push_number(ctx, 1);
    duk_put_prop_string(ctx, -2, "Spotlight");
    duk_push_number(ctx, 2);
    duk_put_prop_string(ctx, -2, "DirectionalLight");
    duk_push_object(ctx);
    duk_put_function_list(ctx, -1, Light_Functions);
    DefineProperty(ctx, "ComponentNameChanged", Light_Get_ComponentNameChanged, nullptr);
    DefineProperty(ctx, "ParentEntitySet", Light_Get_ParentEntitySet, nullptr);
    DefineProperty(ctx, "ParentEntityAboutToBeDetached", Light_Get_ParentEntityAboutToBeDetached, nullptr);
    DefineProperty(ctx, "typeName", Light_TypeName, nullptr);
    DefineProperty(ctx, "typeId", Light_TypeId, nullptr);
    DefineProperty(ctx, "name", Light_Name, Light_SetName_String);
    DefineProperty(ctx, "replicated", Light_IsReplicated, Light_SetReplicated_bool);
    DefineProperty(ctx, "local", Light_IsLocal, nullptr);
    DefineProperty(ctx, "unacked", Light_IsUnacked, nullptr);
    DefineProperty(ctx, "updateMode", Light_UpdateMode, Light_SetUpdateMode_AttributeChange__Type);
    DefineProperty(ctx, "id", Light_Id, nullptr);
    DefineProperty(ctx, "temporary", Light_IsTemporary, Light_SetTemporary_bool);
    DefineProperty(ctx, "viewEnabled", Light_ViewEnabled, nullptr);
    duk_put_prop_string(ctx, -2, "prototype");
    duk_put_global_string(ctx, Light_ID);
}
Esempio n. 10
0
void StyleContext::setGlobal(const std::string& _key, const Value& _val) {
    Value& entry = m_globals[_key];
    if (entry == _val) {
        return;
    }

    entry = _val;

    if (_val.is<float>()) {
        duk_push_number(m_ctx, _val.get<float>());
        duk_put_global_string(m_ctx, _key.c_str());

    } else if (_val.is<std::string>()) {
        duk_push_string(m_ctx, _val.get<std::string>().c_str());
        duk_put_global_string(m_ctx, _key.c_str());
    }
}
void Expose_EntityReference(duk_context* ctx)
{
    duk_push_c_function(ctx, EntityReference_Ctor_Selector, DUK_VARARGS);
    duk_push_object(ctx);
    duk_put_function_list(ctx, -1, EntityReference_Functions);
    DefineProperty(ctx, "ref", EntityReference_Get_ref, EntityReference_Set_ref);
    duk_put_prop_string(ctx, -2, "prototype");
    duk_put_global_string(ctx, EntityReference_ID);
}
Esempio n. 12
0
static duk_int_t load_file(duk_context *ctx, const char *filename, const char *var) {
	size_t len; char *buf = read_file(filename, &len);
	if(!buf) FAIL_LOAD

	duk_push_external_buffer(ctx);
	duk_config_buffer(ctx, -1, buf, len);
	duk_put_global_string(ctx, var);
	return 0;
}
void Expose_AssetReferenceList(duk_context* ctx)
{
    duk_push_c_function(ctx, AssetReferenceList_Ctor_Selector, DUK_VARARGS);
    duk_push_object(ctx);
    duk_put_function_list(ctx, -1, AssetReferenceList_Functions);
    DefineProperty(ctx, "refs", AssetReferenceList_Get_refs, AssetReferenceList_Set_refs);
    DefineProperty(ctx, "type", AssetReferenceList_Get_type, AssetReferenceList_Set_type);
    duk_put_prop_string(ctx, -2, "prototype");
    duk_put_global_string(ctx, AssetReferenceList_ID);
}
Esempio n. 14
0
static int dukzip_core(duk_context *ctx) {
	int mod = duk_push_object(ctx);

	/* create readable archive prototype */
	duk_push_object(ctx);
	duk_push_c_function(ctx, dukzip_unz_finalizer, 1);
	duk_set_finalizer(ctx, -2);
	duk_put_function_list(ctx, -1, dukzip_unz_prototype);
	duk_put_global_string(ctx, DUKZIP_UNZ_PROTOTYPE);

	/* create writable archive prototype */
	duk_push_object(ctx);
	duk_push_c_function(ctx, dukzip_zip_finalizer, 1);
	duk_set_finalizer(ctx, -2);
	duk_put_function_list(ctx, -1, dukzip_zip_prototype);
	duk_put_global_string(ctx, DUKZIP_ZIP_PROTOTYPE);

	duk_put_function_list(ctx, -1, dukzip_module);
	return mod;
}
Esempio n. 15
0
void Expose_Line(duk_context* ctx)
{
    duk_push_c_function(ctx, Line_Ctor_Selector, DUK_VARARGS);
    duk_put_function_list(ctx, -1, Line_StaticFunctions);
    duk_push_object(ctx);
    duk_put_function_list(ctx, -1, Line_Functions);
    DefineProperty(ctx, "pos", Line_Get_pos, Line_Set_pos);
    DefineProperty(ctx, "dir", Line_Get_dir, Line_Set_dir);
    duk_put_prop_string(ctx, -2, "prototype");
    duk_put_global_string(ctx, Line_ID);
}
Esempio n. 16
0
int main(int argc, char *argv[]) {
	duk_context *ctx;
	int i;
	int exitcode = 0;

	ctx = duk_create_heap_default();
	if (!ctx) {
		return 1;
	}

	duk_push_c_function(ctx, handle_print, 1);
	duk_put_global_string(ctx, "print");
	duk_push_c_function(ctx, handle_assert, 2);
	duk_put_global_string(ctx, "assert");

	duk_push_object(ctx);
	duk_push_c_function(ctx, cb_resolve_module, DUK_VARARGS);
	duk_put_prop_string(ctx, -2, "resolve");
	duk_push_c_function(ctx, cb_load_module, DUK_VARARGS);
	duk_put_prop_string(ctx, -2, "load");
	duk_module_node_init(ctx);
	printf("top after init: %ld\n", (long) duk_get_top(ctx));

	for (i = 1; i < argc; i++) {
		printf("Evaling: %s\n", argv[i]);
		if (duk_peval_string(ctx, argv[i]) != 0) {
			if (duk_get_prop_string(ctx, -1, "stack")) {
				duk_replace(ctx, -2);
			} else {
				duk_pop(ctx);
			}
			exitcode = 1;
		}
		printf("--> %s\n", duk_safe_to_string(ctx, -1));
		duk_pop(ctx);
	}

	printf("Done\n");
	duk_destroy_heap(ctx);
	return exitcode;
}
Esempio n. 17
0
void
_gum_duk_store_module_data (duk_context * ctx,
                            const gchar * module_id,
                            gpointer data)
{
  guint8 key[32];

  key[0] = 0xff;
  g_strlcpy ((gchar *) (key + 1), module_id, sizeof (key) - 1);

  duk_push_pointer (ctx, data);
  duk_put_global_string (ctx, (const gchar *) key);
}
Esempio n. 18
0
void duk_console_init(duk_context *ctx, duk_uint_t flags) {
	duk_push_object(ctx);

	/* Custom function to format objects; user can replace.
	 * For now, try JX-formatting and if that fails, fall back
	 * to ToString(v).
	 */
	duk_eval_string(ctx,
		"(function format(v){"
		    "try{"
		        "return Duktape.enc('jx',v);"
		    "}catch(e){"
		        "return ''+v;"
		    "}"
		"})");
	duk_put_prop_string(ctx, -2, "format");

	duk__console_reg_vararg_func(ctx, duk__console_assert, "assert");
	duk__console_reg_vararg_func(ctx, duk__console_log, "log");
	duk__console_reg_vararg_func(ctx, duk__console_log, "debug");  /* alias to console.log */
	duk__console_reg_vararg_func(ctx, duk__console_trace, "trace");
	duk__console_reg_vararg_func(ctx, duk__console_info, "info");
	duk__console_reg_vararg_func(ctx, duk__console_warn, "warn");
	duk__console_reg_vararg_func(ctx, duk__console_error, "error");
	duk__console_reg_vararg_func(ctx, duk__console_error, "exception");  /* alias to console.error */
	duk__console_reg_vararg_func(ctx, duk__console_dir, "dir");

	duk_put_global_string(ctx, "console");

	/* Proxy wrapping: ensures any undefined console method calls are
	 * ignored silently.  This is required specifically by the
	 * DeveloperToolsWG proposal (and is implemented also by Firefox:
	 * https://bugzilla.mozilla.org/show_bug.cgi?id=629607).
	 */

	if (flags & DUK_CONSOLE_PROXY_WRAPPER) {
		/* Tolerate errors: Proxy may be disabled. */
		duk_peval_string_noresult(ctx,
			"(function(){"
			    "var D=function(){};"
			    "console=new Proxy(console,{"
			        "get:function(t,k){"
			            "var v=t[k];"
			            "return typeof v==='function'?v:D;"
			        "}"
			    "});"
			"})();"
		);
	}
}
Esempio n. 19
0
char *initPlugin(pluginHandler *_ph){
    slog(DEBUG,DEBUG,"Plugin "PLUGIN_SCOPE" initializing.");
    ph=_ph;
    ctx = ph->ctx;

    wally_put_function_list(ph,c_watchdogMethods);

    duk_push_c_function(ctx, js_watchdog_ctor, 7 );
    duk_push_object(ctx);
    duk_put_function_list(ctx, -1, watchdogMethods);
    duk_put_prop_string(ctx, -2, "prototype");
    duk_put_global_string(ctx, JS_SCOPE);

    return PLUGIN_SCOPE;
}
void Expose_IAssetTransfer(duk_context* ctx)
{
    duk_push_object(ctx);
    duk_push_object(ctx);
    duk_put_function_list(ctx, -1, IAssetTransfer_Functions);
    DefineProperty(ctx, "asset", IAssetTransfer_Get_asset, IAssetTransfer_Set_asset);
    DefineProperty(ctx, "source", IAssetTransfer_Get_source, IAssetTransfer_Set_source);
    DefineProperty(ctx, "assetType", IAssetTransfer_Get_assetType, IAssetTransfer_Set_assetType);
    DefineProperty(ctx, "internalResourceName", IAssetTransfer_Get_internalResourceName, IAssetTransfer_Set_internalResourceName);
    DefineProperty(ctx, "Downloaded", IAssetTransfer_Get_Downloaded, nullptr);
    DefineProperty(ctx, "Succeeded", IAssetTransfer_Get_Succeeded, nullptr);
    DefineProperty(ctx, "Failed", IAssetTransfer_Get_Failed, nullptr);
    duk_put_prop_string(ctx, -2, "prototype");
    duk_put_global_string(ctx, IAssetTransfer_ID);
}
Esempio n. 21
0
char *initPlugin(pluginHandler *_ph){
    slog(DEBUG,FULLDEBUG,"Plugin "PLUGIN_SCOPE" initializing.");
    ph=_ph;
    ctx = ph->ctx;

    wally_put_function(PLUGIN_SCOPE"::info", WFUNC_SYNC, myPluginInfo, 0);

    duk_push_c_function(ctx, js_myPlugin_ctor, 1 );
    duk_push_object(ctx);
    duk_put_function_list(ctx, -1, myPluginMethods);
    duk_put_prop_string(ctx, -2, "prototype");
    duk_put_global_string(ctx, "myPlugin");  /* -> stack: [ ] */

    return PLUGIN_SCOPE;
}
Esempio n. 22
0
void StyleContext::setSceneGlobals(const std::unordered_map<std::string, YAML::Node>& sceneGlobals) {

    if (sceneGlobals.size() == 0) { return; }

    //[ "ctx" ]
    auto globalObject = duk_push_object(m_ctx);

    for (auto& global : sceneGlobals) {
        auto key = global.first;
        if (key.find(":") != std::string::npos) { continue; }
        parseSceneGlobals(global.second, key, 0, globalObject);
    }

    duk_put_global_string(m_ctx, "global");
}
static duk_ret_t test_basic(duk_context *ctx, void *udata) {
	duk_bool_t ret;

	(void) udata;

	printf("top: %ld\n", (long) duk_get_top(ctx));
	duk_push_string(ctx, "1.2.3");
	ret = duk_put_global_string(ctx, "myAppVersion");
	printf("top: %ld\n", (long) duk_get_top(ctx));
	printf("ret: %ld\n", (long) ret);

	duk_eval_string_noresult(ctx, "print(myAppVersion);");

	printf("final top: %ld\n", (long) duk_get_top(ctx));
	return 0;
}
static duk_ret_t test_api_example(duk_context *ctx) {
	void *ptr;

	duk_eval_string(ctx, "({ foo: 'bar' })");
	ptr = duk_get_heapptr(ctx, -1);

	duk_put_global_string(ctx, "ref");
	duk_set_top(ctx, 0);

	duk_push_heapptr(ctx, ptr);
	duk_get_prop_string(ctx, -1, "foo");
	printf("obj.foo: %s\n", duk_safe_to_string(ctx, -1));  /* prints 'bar' */

	printf("final top: %ld\n", (long) duk_get_top(ctx));
	return 0;
}
Esempio n. 25
0
AJ_Status AJS_RegisterIO(duk_context* ctx, duk_idx_t ioIdx)
{
    duk_idx_t pinIdx;
    duk_idx_t i;
    uint16_t numPins = AJS_TargetIO_GetNumPins();

    /*
     * Create base pin protoype
     */
    pinIdx = duk_push_object(ctx);
    AJS_SetPropertyAccessors(ctx, pinIdx, "functions", NULL, NativeFunctionsGetter);
    AJS_SetPropertyAccessors(ctx, pinIdx, "info", NULL, NativeInfoGetter);
    /*
     * Create the pin objects
     */
    duk_push_array(ctx);
    for (i = 0; i < numPins; ++i) {
        AJS_CreateObjectFromPrototype(ctx, pinIdx);
        duk_push_int(ctx, i);
        duk_put_prop_string(ctx, -2, "id");
        duk_put_prop_index(ctx, -2, i);
    }
    duk_put_prop_string(ctx, ioIdx, "pin");
    duk_pop(ctx);
    /*
     * Register the native functions
     */
    AJS_PutFunctionList(ctx, ioIdx, io_native_functions, TRUE);
    /*
     * GPIO attribute constants
     */
    duk_put_number_list(ctx, ioIdx, io_constants);
    /*
     * A hidden property for keeping track of triggers
     */
    duk_push_string(ctx, AJS_HIDDEN_PROP("trigs"));
    duk_push_array(ctx);
    duk_def_prop(ctx, ioIdx, DUK_DEFPROP_HAVE_VALUE | DUK_DEFPROP_HAVE_WRITABLE);

    /*
     * Compact the IO object and set it on the global object
     */
    duk_compact(ctx, ioIdx);
    duk_dup(ctx, ioIdx);
    duk_put_global_string(ctx, AJS_IOObjectName);
    return AJ_OK;
}
Esempio n. 26
0
void js_client_init(duk_context *ctx) {
   slog(DEBUG,DEBUG,"Constructing cloud object");
  
#ifndef WITH_SEADUK 
   duv_ref_setup(ctx);
#endif

   duk_push_c_function(ctx, js_client_ctor, 5 );

   /* Push Client.prototype object. */
   duk_push_object(ctx);

   duk_put_function_list(ctx, -1, clientMethods);
   duk_put_prop_string(ctx, -2, "prototype");
   /* Finally, register Client to the global object */
   duk_put_global_string(ctx, "CloudClient");  /* -> stack: [ ] */
}
Esempio n. 27
0
void
_gum_duk_kernel_init (GumDukKernel * self,
                      GumDukCore * core)
{
  GumDukScope scope = GUM_DUK_SCOPE_INIT (core);
  duk_context * ctx = scope.ctx;

  self->core = core;

  duk_push_object (ctx);
  duk_push_uint (ctx, gum_kernel_query_page_size ());
  duk_put_prop_string (ctx, -2, "pageSize");
  _gum_duk_add_properties_to_class_by_heapptr (ctx,
      duk_require_heapptr (ctx, -1), gumjs_kernel_values);
  duk_put_function_list (ctx, -1, gumjs_kernel_functions);
  duk_put_global_string (ctx, "Kernel");
}
Esempio n. 28
0
bool StyleContext::addFunction(const std::string& _name, const std::string& _func) {

    duk_push_string(m_ctx, _func.c_str());
    duk_push_string(m_ctx, _name.c_str());

    if (duk_pcompile(m_ctx, DUK_COMPILE_FUNCTION) != 0) {
        logMsg("Error: compile failed: %s\n", duk_safe_to_string(m_ctx, -1));
        return false;
    }

    // Put function in global scope
    duk_put_global_string(m_ctx, _name.c_str());


    DUMP("addFunction\n");
    return true;
}
void Expose_PhysicsWorld(duk_context* ctx)
{
    duk_push_object(ctx);
    duk_push_object(ctx);
    duk_put_function_list(ctx, -1, PhysicsWorld_Functions);
    DefineProperty(ctx, "PhysicsCollision", PhysicsWorld_Get_PhysicsCollision, nullptr);
    DefineProperty(ctx, "NewPhysicsCollision", PhysicsWorld_Get_NewPhysicsCollision, nullptr);
    DefineProperty(ctx, "AboutToUpdate", PhysicsWorld_Get_AboutToUpdate, nullptr);
    DefineProperty(ctx, "Updated", PhysicsWorld_Get_Updated, nullptr);
    DefineProperty(ctx, "physicsUpdatePeriod", PhysicsWorld_PhysicsUpdatePeriod, PhysicsWorld_SetPhysicsUpdatePeriod_float);
    DefineProperty(ctx, "maxSubSteps", PhysicsWorld_MaxSubSteps, PhysicsWorld_SetMaxSubSteps_int);
    DefineProperty(ctx, "gravity", PhysicsWorld_Gravity, PhysicsWorld_SetGravity_float3);
    DefineProperty(ctx, "debugGeometryEnabled", PhysicsWorld_IsDebugGeometryEnabled, PhysicsWorld_SetDebugGeometryEnabled_bool);
    DefineProperty(ctx, "running", PhysicsWorld_IsRunning, PhysicsWorld_SetRunning_bool);
    DefineProperty(ctx, "client", PhysicsWorld_IsClient, nullptr);
    duk_put_prop_string(ctx, -2, "prototype");
    duk_put_global_string(ctx, PhysicsWorld_ID);
}
Esempio n. 30
0
void Expose_IAsset(duk_context* ctx)
{
    duk_push_object(ctx);
    duk_push_number(ctx, 0);
    duk_put_prop_string(ctx, -2, "Original");
    duk_push_number(ctx, 1);
    duk_put_prop_string(ctx, -2, "Cached");
    duk_push_number(ctx, 2);
    duk_put_prop_string(ctx, -2, "Programmatic");
    duk_push_number(ctx, 3);
    duk_put_prop_string(ctx, -2, "Bundle");
    duk_push_object(ctx);
    duk_put_function_list(ctx, -1, IAsset_Functions);
    DefineProperty(ctx, "Unloaded", IAsset_Get_Unloaded, nullptr);
    DefineProperty(ctx, "Loaded", IAsset_Get_Loaded, nullptr);
    DefineProperty(ctx, "PropertyStatusChanged", IAsset_Get_PropertyStatusChanged, nullptr);
    duk_put_prop_string(ctx, -2, "prototype");
    duk_put_global_string(ctx, IAsset_ID);
}