void duk_push_sphere_font(duk_context* ctx, font_t* font) { ref_font(font); duk_push_object(ctx); duk_push_c_function(ctx, js_Font_finalize, DUK_VARARGS); duk_set_finalizer(ctx, -2); duk_push_c_function(ctx, js_Font_toString, DUK_VARARGS); duk_put_prop_string(ctx, -2, "toString"); duk_push_c_function(ctx, js_Font_clone, DUK_VARARGS); duk_put_prop_string(ctx, -2, "clone"); duk_push_c_function(ctx, js_Font_getCharacterImage, DUK_VARARGS); duk_put_prop_string(ctx, -2, "getCharacterImage"); duk_push_c_function(ctx, js_Font_getColorMask, DUK_VARARGS); duk_put_prop_string(ctx, -2, "getColorMask"); duk_push_c_function(ctx, js_Font_getHeight, DUK_VARARGS); duk_put_prop_string(ctx, -2, "getHeight"); duk_push_c_function(ctx, js_Font_setCharacterImage, DUK_VARARGS); duk_put_prop_string(ctx, -2, "setCharacterImage"); duk_push_c_function(ctx, js_Font_setColorMask, DUK_VARARGS); duk_put_prop_string(ctx, -2, "setColorMask"); duk_push_c_function(ctx, js_Font_drawText, DUK_VARARGS); duk_put_prop_string(ctx, -2, "drawText"); duk_push_c_function(ctx, js_Font_drawTextBox, DUK_VARARGS); duk_put_prop_string(ctx, -2, "drawTextBox"); duk_push_c_function(ctx, js_Font_drawZoomedText, DUK_VARARGS); duk_put_prop_string(ctx, -2, "drawZoomedText"); duk_push_c_function(ctx, js_Font_getStringHeight, DUK_VARARGS); duk_put_prop_string(ctx, -2, "getStringHeight"); duk_push_c_function(ctx, js_Font_getStringWidth, DUK_VARARGS); duk_put_prop_string(ctx, -2, "getStringWidth"); duk_push_c_function(ctx, js_Font_wordWrapString, DUK_VARARGS); duk_put_prop_string(ctx, -2, "wordWrapString"); duk_push_string(ctx, "font"); duk_put_prop_string(ctx, -2, "\xFF" "sphere_type"); duk_push_pointer(ctx, font); duk_put_prop_string(ctx, -2, "\xFF" "ptr"); duk_push_sphere_color(ctx, rgba(255, 255, 255, 255)); duk_put_prop_string(ctx, -2, "\xFF" "color_mask"); }
duk_ret_t dukky_svg_element___proto(duk_context *ctx) { /* Add read/write property */ duk_dup(ctx, 0); duk_push_string(ctx, "style"); duk_push_c_function(ctx, dukky_svg_element_style_getter, 0); duk_push_c_function(ctx, dukky_svg_element_style_setter, 1); duk_def_prop(ctx, -4, DUK_DEFPROP_HAVE_GETTER | DUK_DEFPROP_HAVE_SETTER | DUK_DEFPROP_HAVE_ENUMERABLE | DUK_DEFPROP_ENUMERABLE | DUK_DEFPROP_HAVE_CONFIGURABLE); duk_pop(ctx); /* Set the destructor */ duk_dup(ctx, 0); duk_push_c_function(ctx, dukky_svg_element___destructor, 1); duk_set_finalizer(ctx, -2); duk_pop(ctx); /* Set the constructor */ duk_dup(ctx, 0); duk_push_c_function(ctx, dukky_svg_element___constructor, 1); duk_put_prop_string(ctx, -2, "\xFF\xFFNETSURF_DUKTAPE_INIT"); duk_pop(ctx); return 1; /* The prototype object */ }
duk_ret_t dukky_before_unload_event___proto(duk_context *ctx) { /* Set this prototype's prototype (left-parent) */ /* get prototype */ duk_get_global_string(ctx, dukky_magic_string_prototypes); duk_get_prop_string(ctx, -1, "\xFF\xFFNETSURF_DUKTAPE_PROTOTYPE_EVENT"); duk_replace(ctx, -2); duk_set_prototype(ctx, 0); /* Add read/write property */ duk_dup(ctx, 0); duk_push_string(ctx, "returnValue"); duk_push_c_function(ctx, dukky_before_unload_event_returnValue_getter, 0); duk_push_c_function(ctx, dukky_before_unload_event_returnValue_setter, 1); duk_def_prop(ctx, -4, DUK_DEFPROP_HAVE_GETTER | DUK_DEFPROP_HAVE_SETTER | DUK_DEFPROP_HAVE_ENUMERABLE | DUK_DEFPROP_ENUMERABLE | DUK_DEFPROP_HAVE_CONFIGURABLE); duk_pop(ctx); /* Set the destructor */ duk_dup(ctx, 0); duk_push_c_function(ctx, dukky_before_unload_event___destructor, 1); duk_set_finalizer(ctx, -2); duk_pop(ctx); /* Set the constructor */ duk_dup(ctx, 0); duk_push_c_function(ctx, dukky_before_unload_event___constructor, 2); duk_put_prop_string(ctx, -2, "\xFF\xFFNETSURF_DUKTAPE_INIT"); duk_pop(ctx); return 1; /* The prototype object */ }
void duk_push_sphere_sound(duk_context* ctx, sound_t* sound) { ref_sound(sound); duk_push_object(ctx); duk_push_pointer(ctx, sound); duk_put_prop_string(ctx, -2, "\xFF" "ptr"); duk_push_c_function(ctx, js_Sound_finalize, DUK_VARARGS); duk_set_finalizer(ctx, -2); duk_push_c_function(ctx, js_Sound_toString, DUK_VARARGS); duk_put_prop_string(ctx, -2, "toString"); duk_push_c_function(ctx, js_Sound_isPlaying, DUK_VARARGS); duk_put_prop_string(ctx, -2, "isPlaying"); duk_push_c_function(ctx, js_Sound_isSeekable, DUK_VARARGS); duk_put_prop_string(ctx, -2, "isSeekable"); duk_push_c_function(ctx, js_Sound_getLength, DUK_VARARGS); duk_put_prop_string(ctx, -2, "getLength"); duk_push_c_function(ctx, js_Sound_getPan, DUK_VARARGS); duk_put_prop_string(ctx, -2, "getPan"); duk_push_c_function(ctx, js_Sound_getPitch, DUK_VARARGS); duk_put_prop_string(ctx, -2, "getPitch"); duk_push_c_function(ctx, js_Sound_getPosition, DUK_VARARGS); duk_put_prop_string(ctx, -2, "getPosition"); duk_push_c_function(ctx, js_Sound_getRepeat, DUK_VARARGS); duk_put_prop_string(ctx, -2, "getRepeat"); duk_push_c_function(ctx, js_Sound_getVolume, DUK_VARARGS); duk_put_prop_string(ctx, -2, "getVolume"); duk_push_c_function(ctx, js_Sound_setPan, DUK_VARARGS); duk_put_prop_string(ctx, -2, "setPan"); duk_push_c_function(ctx, js_Sound_setPitch, DUK_VARARGS); duk_put_prop_string(ctx, -2, "setPitch"); duk_push_c_function(ctx, js_Sound_setPosition, DUK_VARARGS); duk_put_prop_string(ctx, -2, "setPosition"); duk_push_c_function(ctx, js_Sound_setRepeat, DUK_VARARGS); duk_put_prop_string(ctx, -2, "setRepeat"); duk_push_c_function(ctx, js_Sound_setVolume, DUK_VARARGS); duk_put_prop_string(ctx, -2, "setVolume"); duk_push_c_function(ctx, js_Sound_pause, DUK_VARARGS); duk_put_prop_string(ctx, -2, "pause"); duk_push_c_function(ctx, js_Sound_play, DUK_VARARGS); duk_put_prop_string(ctx, -2, "play"); duk_push_c_function(ctx, js_Sound_reset, DUK_VARARGS); duk_put_prop_string(ctx, -2, "reset"); duk_push_c_function(ctx, js_Sound_stop, DUK_VARARGS); duk_put_prop_string(ctx, -2, "stop"); }
static duk_ret_t test_finalizer_loop(duk_context *ctx, void *udata) { (void) udata; /* Setup a finalizer loop: the finalizer of a finalizer is the * finalizer itself. The finalizer won't be called recursively. */ duk_eval_string(ctx, "(function (obj) { print('finalizer called'); })"); duk_dup(ctx, -1); duk_set_finalizer(ctx, -2); printf("before pop\n"); duk_pop(ctx); printf("after pop\n"); /* The finalizer participates in two circular references so it won't * be collected until mark-and-sweep happens. The first circular * reference is the function<->prototype loop. The second circular * reference is the finalizer reference which points to the object * itself. */ printf("before forced gc\n"); duk_gc(ctx, 0); printf("after forced gc\n"); return 0; }
static Box * PrivatePush( duk_context * ctx, const size_t class_index, const size_t object_size, finalizer_t finalizer ) { duk_push_global_object( ctx ); duk_get_prop_string( ctx, -1, "Proxy" ); duk_remove( ctx, -2 ); duk_push_object( ctx ); size_t require_size = sizeof( Box ) + object_size; Box * box = reinterpret_cast<Box*>( duk_push_fixed_buffer( ctx, require_size ) ); box->ClassIndex = class_index; box->Finalizer = finalizer; duk_put_prop_string( ctx, -2, "\xFF" "Box" ); duk_push_c_function( ctx, &internal::ClassFinalizer, 1 ); duk_set_finalizer( ctx, -2 ); duk_push_heap_stash( ctx ); duk_get_prop_string( ctx, -1, "InstanceHandler" ); duk_remove( ctx, -2 ); duk_new( ctx, 2 ); return box; }
// Constructor of the JS Object duk_ret_t js_myPlugin_ctor(duk_context *ctx) { slog(DEBUG,DEBUG, "Creating new object of "PLUGIN_SCOPE); myPluginStructure *mps = malloc(sizeof(myPluginStructure)); mps->name = duk_require_string(ctx, 0); // Push special this binding to the function being constructed duk_push_this(ctx); // Store the underlying object duk_push_pointer(ctx, mps); duk_put_prop_string(ctx, -2, "\xff""\xff""data"); // TODO : - if not existand create a hash_map // - store structure to a hash_map('name'); // so that it can be reached from JS and C // Store a boolean flag to mark the object as deleted because the destructor may be called several times duk_push_boolean(ctx, false); duk_put_prop_string(ctx, -2, "\xff""\xff""deleted"); // Store the function destructor duk_push_c_function(ctx, js_myPlugin_dtor, 1); duk_set_finalizer(ctx, -2); return 0; }
void _gum_duk_create_subclass (duk_context * ctx, const gchar * parent, const gchar * name, duk_c_function constructor, gint constructor_nargs, duk_c_function finalize) { duk_push_global_object (ctx); duk_get_prop_string (ctx, -1, "Object"); duk_get_prop_string (ctx, -1, "create"); duk_get_prop_string (ctx, -3, parent); duk_get_prop_string (ctx, -1, "prototype"); duk_dup (ctx, -3); duk_dup (ctx, -2); duk_call (ctx, 1); if (constructor != NULL) duk_push_c_function (ctx, constructor, constructor_nargs); else duk_push_object (ctx); duk_dup (ctx, -2); if (finalize != NULL) { duk_push_c_function (ctx, finalize, 2); duk_set_finalizer (ctx, -2); } duk_put_prop_string (ctx, -2, "prototype"); duk_put_prop_string (ctx, -7, name); duk_pop_n (ctx, 6); }
void duk_push_sphere_bytearray(duk_context* ctx, bytearray_t* array) { duk_push_object(ctx); duk_push_string(ctx, "bytearray"); duk_put_prop_string(ctx, -2, "\xFF" "sphere_type"); duk_push_pointer(ctx, array); duk_put_prop_string(ctx, -2, "\xFF" "ptr"); duk_push_c_function(ctx, js_ByteArray_finalize, DUK_VARARGS); duk_set_finalizer(ctx, -2); duk_push_c_function(ctx, js_ByteArray_toString, DUK_VARARGS); duk_put_prop_string(ctx, -2, "toString"); duk_push_c_function(ctx, js_ByteArray_concat, DUK_VARARGS); duk_put_prop_string(ctx, -2, "concat"); duk_push_c_function(ctx, js_ByteArray_slice, DUK_VARARGS); duk_put_prop_string(ctx, -2, "slice"); duk_push_string(ctx, "length"); duk_push_int(ctx, array->size); duk_def_prop(ctx, -3, DUK_DEFPROP_HAVE_CONFIGURABLE | 0 | DUK_DEFPROP_HAVE_WRITABLE | 0 | DUK_DEFPROP_HAVE_VALUE); // return proxy object so we can catch array accesses duk_push_global_object(ctx); duk_get_prop_string(ctx, -1, "Proxy"); duk_dup(ctx, -3); duk_push_object(ctx); duk_push_c_function(ctx, js_ByteArray_getProp, DUK_VARARGS); duk_put_prop_string(ctx, -2, "get"); duk_push_c_function(ctx, js_ByteArray_setProp, DUK_VARARGS); duk_put_prop_string(ctx, -2, "set"); duk_new(ctx, 2); duk_remove(ctx, -2); duk_remove(ctx, -2); }
duk_ret_t JsLibrarian::Constructor(duk_context* duktapeContext) { try { if (duk_get_top(duktapeContext) != 0) JavaScriptHelper::Throw(duktapeContext, "No arguments for Librarian constructor expected"); if (duk_is_constructor_call(duktapeContext)) duk_push_this(duktapeContext); else duk_push_object(duktapeContext); duk_push_pointer(duktapeContext, new JsLibrarian); duk_put_prop_string(duktapeContext, -2, "__Ptr"); duk_push_c_function(duktapeContext, JsLibrarian::Destructor, 1); duk_set_finalizer(duktapeContext, -2); duk_push_c_function(duktapeContext, JsLibrarian::Files, DUK_VARARGS); duk_put_prop_string(duktapeContext, -2, "Files"); duk_push_c_function(duktapeContext, JsLibrarian::DependencyCheck, DUK_VARARGS); duk_put_prop_string(duktapeContext, -2, "DependencyCheck"); duk_push_c_function(duktapeContext, JsLibrarian::Output, DUK_VARARGS); duk_put_prop_string(duktapeContext, -2, "Output"); duk_push_c_function(duktapeContext, JsLibrarian::BeforeLink, DUK_VARARGS); duk_put_prop_string(duktapeContext, -2, "BeforeLink"); duk_push_c_function(duktapeContext, JsLibrarian::Create, DUK_VARARGS); duk_put_prop_string(duktapeContext, -2, "Create"); return 1; } catch (std::exception& e) { JavaScriptHelper::Throw(duktapeContext, e.what()); } }
static duk_ret_t test_set_nonobject(duk_context *ctx, void *udata) { (void) udata; duk_push_int(ctx, 123); duk_push_int(ctx, 321); duk_set_finalizer(ctx, -2); printf("never here\n"); return 0; }
void DuktapeContext::set(JNIEnv *env, jstring name, jobject object, jobjectArray methods) { CHECK_STACK(m_context); duk_push_global_object(m_context); const JString instanceName(env, name); if (duk_has_prop_string(m_context, -1, instanceName)) { duk_pop(m_context); queueIllegalArgumentException(env, "A global object called " + instanceName.str() + " already exists"); return; } const duk_idx_t objIndex = duk_require_normalize_index(m_context, duk_push_object(m_context)); // Hook up a finalizer to decrement the refcount and clean up our JavaMethods. duk_push_c_function(m_context, javaObjectFinalizer, 1); duk_set_finalizer(m_context, objIndex); const jsize numMethods = env->GetArrayLength(methods); for (jsize i = 0; i < numMethods; ++i) { jobject method = env->GetObjectArrayElement(methods, i); const jmethodID getName = env->GetMethodID(env->GetObjectClass(method), "getName", "()Ljava/lang/String;"); const JString methodName(env, static_cast<jstring>(env->CallObjectMethod(method, getName))); std::unique_ptr<JavaMethod> javaMethod; try { javaMethod.reset(new JavaMethod(m_javaValues, env, method)); } catch (const std::invalid_argument& e) { queueIllegalArgumentException(env, "In bound method \"" + instanceName.str() + "." + methodName.str() + "\": " + e.what()); // Pop the object being bound and the duktape global object. duk_pop_2(m_context); return; } // Use VARARGS here to allow us to manually validate that the proper number of arguments are // given in the call. If we specify the actual number of arguments needed, Duktape will try to // be helpful by discarding extra or providing missing arguments. That's not quite what we want. // See http://duktape.org/api.html#duk_push_c_function for details. const duk_idx_t func = duk_push_c_function(m_context, javaMethodHandler, DUK_VARARGS); duk_push_pointer(m_context, javaMethod.release()); duk_put_prop_string(m_context, func, JAVA_METHOD_PROP_NAME); // Add this method to the bound object. duk_put_prop_string(m_context, objIndex, methodName); } // Keep a reference in JavaScript to the object being bound. duk_push_pointer(m_context, env->NewGlobalRef(object)); duk_put_prop_string(m_context, objIndex, JAVA_THIS_PROP_NAME); // Make our bound Java object a property of the Duktape global object (so it's a JS global). duk_put_prop_string(m_context, -2, instanceName); // Pop the Duktape global object off the stack. duk_pop(m_context); }
void PushWeakObject(duk_context* ctx, Object* object) { if (!object) { duk_push_null(ctx); return; } duk_push_heap_stash(ctx); // Check if the wrapper for the object already exists in stash // This is required so that comparisons of object references (e.g. against the me property) work properly if (duk_has_prop_index(ctx, -1, (size_t)object)) { duk_get_prop_index(ctx, -1, (size_t)object); WeakPtr<Object>* oldPtr = GetWeakPtr(ctx, -1); if (oldPtr && oldPtr->Get() == object) { duk_remove(ctx, -2); // Remove stash return; } else duk_pop(ctx); // Valid existing wrapper not found } duk_push_object(ctx); WeakPtr<Object>* ptr = new WeakPtr<Object>(object); duk_push_pointer(ctx, ptr); duk_put_prop_string(ctx, -2, "\xff""weak"); duk_push_c_function(ctx, WeakPtr_Finalizer, 1); duk_set_finalizer(ctx, -2); // Set prototype. If not found, use base class prototype (e.g. IComponent) duk_get_global_string(ctx, object->GetTypeName().CString()); if (!duk_is_object(ctx, -1)) { duk_pop(ctx); duk_get_global_string(ctx, object->GetTypeInfo()->GetBaseTypeInfo()->GetTypeName().CString()); } duk_get_prop_string(ctx, -1, "prototype"); duk_set_prototype(ctx, -3); duk_pop(ctx); // Proxied property access handling for scene, entity & component if (object->GetType() == Scene::GetTypeStatic()) SetupProxy(ctx, SceneProxyFunctions); if (object->GetType() == Entity::GetTypeStatic()) SetupProxy(ctx, EntityProxyFunctions); else if (dynamic_cast<IComponent*>(object)) SetupProxy(ctx, ComponentProxyFunctions); // Store to stash duk_dup(ctx, -1); duk_put_prop_index(ctx, -3, (size_t)object); duk_remove(ctx, -2); // Remove stash }
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; }
void duk_mark_jsobject_to_java_object(duk_context *ctx, int index, JNIEnv *env, jobject object){ jobject ref = ((*env)->NewGlobalRef(env, object)); duk_push_pointer(ctx, ref); DEBUG_LOG("ScriptEngine", "duk_push_pointer success %d", index); duk_put_prop_string(ctx, index - 1, JAVA_OBJECT_MARK); duk_push_c_function(ctx, java_object_to_string, 0); duk_put_prop_string(ctx, index - 1, "toString"); duk_push_c_function(ctx, java_object_finalizer, 1); duk_set_finalizer(ctx, index - 1); DEBUG_LOG("ScriptEngine", "new_java_object success"); }
int es_push_native_obj(duk_context *ctx, es_native_type_t type, void *ptr) { int obj_idx = duk_push_object(ctx); duk_push_pointer(ctx, ptr); duk_put_prop_string(ctx, obj_idx, PTRNAME); duk_push_c_function(ctx, es_native_finalizer, 1); duk_set_magic(ctx, -1, type); duk_set_finalizer(ctx, obj_idx); return obj_idx; }
int __stdcall DukPushNewJSClass(duk_context *ctx, char* className, int hInst){ #pragma EXPORT if(ctx == 0) return -1; duk_get_global_string(ctx, className); duk_new(ctx, 0); if(hInst!=0){ //its a live COM object instance we creating a js obj for..so set the hInst //and register a destructor function for it so we can cleanup when js no longer needs it.. //set this.hInst = 12345 duk_push_number(ctx, hInst); duk_put_prop_string(ctx, -2, "hInst"); //register a C function to run when js obj released duk_push_c_function(ctx, js_dtor, 1); duk_set_finalizer(ctx, -2); } return 0; }
JavaScriptObject::~JavaScriptObject() { if (!m_instance) { // Instance has already been cleaned up. return; } // The instance still exists - detach from it. duk_push_global_object(m_context); duk_push_heapptr(m_context, m_instance); // Remove this pointer from the JS object's property. if (duk_get_prop_string(m_context, -1, WRAPPER_THIS_PROP_NAME)) { const duk_size_t length = duk_get_length(m_context, -1); for (duk_uarridx_t i = 0; i < length; ++i) { duk_get_prop_index(m_context, -1, i); const void* ptr = duk_get_pointer(m_context, -1); duk_pop(m_context); if (this == ptr) { // Remove this object from the array. duk_del_prop_index(m_context, -1, i); break; } } } // Pop the array (or undefined if there was none). duk_pop(m_context); if (m_nextFinalizer) { // Reset to the object's previous finalizer. duk_push_c_function(m_context, m_nextFinalizer, 1); duk_set_finalizer(m_context, -2); } // Pop the instance & global object. duk_pop_2(m_context); }
static duk_ret_t test_basic(duk_context *ctx, void *udata) { (void) udata; /* Object to be finalized, special toString() */ duk_push_object(ctx); duk_eval_string(ctx, "(function() { return 'target object'; })"); duk_put_prop_string(ctx, -2, "toString"); /* [ target ] */ /* Set finalizer */ duk_push_c_function(ctx, basic_finalizer, 1); duk_push_string(ctx, "basic_finalizer"); duk_put_prop_string(ctx, -2, "myName"); duk_set_finalizer(ctx, -2); /* [ target ] */ printf("top: %ld\n", (long) duk_get_top(ctx)); /* Get finalizer and check it is correct */ duk_get_finalizer(ctx, -1); duk_get_prop_string(ctx, -1, "myName"); printf("finalizer name: %s\n", duk_to_string(ctx, -1)); duk_pop_2(ctx); printf("top: %ld\n", (long) duk_get_top(ctx)); /* [ target ] */ printf("before set top 0\n"); duk_set_top(ctx, 0); printf("after set top 0\n"); /* [ ] */ return 0; }
duk_ret_t dukky_html_head_element___proto(duk_context *ctx) { /* Set this prototype's prototype (left-parent) */ /* get prototype */ duk_get_global_string(ctx, dukky_magic_string_prototypes); duk_get_prop_string(ctx, -1, "\xFF\xFFNETSURF_DUKTAPE_PROTOTYPE_HTMLELEMENT"); duk_replace(ctx, -2); duk_set_prototype(ctx, 0); /* Set the destructor */ duk_dup(ctx, 0); duk_push_c_function(ctx, dukky_html_head_element___destructor, 1); duk_set_finalizer(ctx, -2); duk_pop(ctx); /* Set the constructor */ duk_dup(ctx, 0); duk_push_c_function(ctx, dukky_html_head_element___constructor, 2); duk_put_prop_string(ctx, -2, "\xFF\xFFNETSURF_DUKTAPE_INIT"); duk_pop(ctx); return 1; /* The prototype object */ }
duk_ret_t dukky_html_embed_element___proto(duk_context *ctx) { /* Set this prototype's prototype (left-parent) */ /* get prototype */ duk_get_global_string(ctx, dukky_magic_string_prototypes); duk_get_prop_string(ctx, -1, "\xFF\xFFNETSURF_DUKTAPE_PROTOTYPE_HTMLELEMENT"); duk_replace(ctx, -2); duk_set_prototype(ctx, 0); /* Add a method */ duk_dup(ctx, 0); duk_push_string(ctx, "getSVGDocument"); duk_push_c_function(ctx, dukky_html_embed_element_getSVGDocument, DUK_VARARGS); duk_def_prop(ctx, -3, DUK_DEFPROP_HAVE_VALUE | DUK_DEFPROP_HAVE_WRITABLE | DUK_DEFPROP_HAVE_ENUMERABLE | DUK_DEFPROP_ENUMERABLE | DUK_DEFPROP_HAVE_CONFIGURABLE); duk_pop(ctx); /* Add read/write property */ duk_dup(ctx, 0); duk_push_string(ctx, "src"); duk_push_c_function(ctx, dukky_html_embed_element_src_getter, 0); duk_push_c_function(ctx, dukky_html_embed_element_src_setter, 1); duk_def_prop(ctx, -4, DUK_DEFPROP_HAVE_GETTER | DUK_DEFPROP_HAVE_SETTER | DUK_DEFPROP_HAVE_ENUMERABLE | DUK_DEFPROP_ENUMERABLE | DUK_DEFPROP_HAVE_CONFIGURABLE); duk_pop(ctx); /* Add read/write property */ duk_dup(ctx, 0); duk_push_string(ctx, "type"); duk_push_c_function(ctx, dukky_html_embed_element_type_getter, 0); duk_push_c_function(ctx, dukky_html_embed_element_type_setter, 1); duk_def_prop(ctx, -4, DUK_DEFPROP_HAVE_GETTER | DUK_DEFPROP_HAVE_SETTER | DUK_DEFPROP_HAVE_ENUMERABLE | DUK_DEFPROP_ENUMERABLE | DUK_DEFPROP_HAVE_CONFIGURABLE); duk_pop(ctx); /* Add read/write property */ duk_dup(ctx, 0); duk_push_string(ctx, "width"); duk_push_c_function(ctx, dukky_html_embed_element_width_getter, 0); duk_push_c_function(ctx, dukky_html_embed_element_width_setter, 1); duk_def_prop(ctx, -4, DUK_DEFPROP_HAVE_GETTER | DUK_DEFPROP_HAVE_SETTER | DUK_DEFPROP_HAVE_ENUMERABLE | DUK_DEFPROP_ENUMERABLE | DUK_DEFPROP_HAVE_CONFIGURABLE); duk_pop(ctx); /* Add read/write property */ duk_dup(ctx, 0); duk_push_string(ctx, "height"); duk_push_c_function(ctx, dukky_html_embed_element_height_getter, 0); duk_push_c_function(ctx, dukky_html_embed_element_height_setter, 1); duk_def_prop(ctx, -4, DUK_DEFPROP_HAVE_GETTER | DUK_DEFPROP_HAVE_SETTER | DUK_DEFPROP_HAVE_ENUMERABLE | DUK_DEFPROP_ENUMERABLE | DUK_DEFPROP_HAVE_CONFIGURABLE); duk_pop(ctx); /* Add read/write property */ duk_dup(ctx, 0); duk_push_string(ctx, "align"); duk_push_c_function(ctx, dukky_html_embed_element_align_getter, 0); duk_push_c_function(ctx, dukky_html_embed_element_align_setter, 1); duk_def_prop(ctx, -4, DUK_DEFPROP_HAVE_GETTER | DUK_DEFPROP_HAVE_SETTER | DUK_DEFPROP_HAVE_ENUMERABLE | DUK_DEFPROP_ENUMERABLE | DUK_DEFPROP_HAVE_CONFIGURABLE); duk_pop(ctx); /* Add read/write property */ duk_dup(ctx, 0); duk_push_string(ctx, "name"); duk_push_c_function(ctx, dukky_html_embed_element_name_getter, 0); duk_push_c_function(ctx, dukky_html_embed_element_name_setter, 1); duk_def_prop(ctx, -4, DUK_DEFPROP_HAVE_GETTER | DUK_DEFPROP_HAVE_SETTER | DUK_DEFPROP_HAVE_ENUMERABLE | DUK_DEFPROP_ENUMERABLE | DUK_DEFPROP_HAVE_CONFIGURABLE); duk_pop(ctx); /* Set the destructor */ duk_dup(ctx, 0); duk_push_c_function(ctx, dukky_html_embed_element___destructor, 1); duk_set_finalizer(ctx, -2); duk_pop(ctx); /* Set the constructor */ duk_dup(ctx, 0); duk_push_c_function(ctx, dukky_html_embed_element___constructor, 2); duk_put_prop_string(ctx, -2, "\xFF\xFFNETSURF_DUKTAPE_INIT"); duk_pop(ctx); return 1; /* The prototype object */ }
void _gum_duk_interceptor_init (GumDukInterceptor * self, GumDukCore * core) { duk_context * ctx = core->ctx; self->core = core; self->interceptor = gum_interceptor_obtain (); self->invocation_listeners = g_hash_table_new_full (NULL, NULL, NULL, (GDestroyNotify) gum_duk_invocation_listener_destroy); self->replacement_by_address = g_hash_table_new_full (NULL, NULL, NULL, (GDestroyNotify) gum_duk_replace_entry_free); _gum_duk_store_module_data (ctx, "interceptor", self); duk_push_c_function (ctx, gumjs_interceptor_construct, 0); duk_push_object (ctx); duk_put_function_list (ctx, -1, gumjs_interceptor_functions); duk_put_prop_string (ctx, -2, "prototype"); duk_new (ctx, 0); duk_put_global_string (ctx, "Interceptor"); duk_push_c_function (ctx, gumjs_invocation_listener_construct, 2); duk_push_object (ctx); duk_put_function_list (ctx, -1, gumjs_invocation_listener_functions); duk_put_prop_string (ctx, -2, "prototype"); self->invocation_listener = _gum_duk_require_heapptr (ctx, -1); duk_put_global_string (ctx, "InvocationListener"); duk_push_c_function (ctx, gumjs_invocation_context_construct, 0); duk_push_object (ctx); duk_push_c_function (ctx, gumjs_invocation_context_finalize, 1); duk_set_finalizer (ctx, -2); duk_put_prop_string (ctx, -2, "prototype"); self->invocation_context = _gum_duk_require_heapptr (ctx, -1); duk_put_global_string (ctx, "InvocationContext"); _gum_duk_add_properties_to_class (ctx, "InvocationContext", gumjs_invocation_context_values); duk_push_c_function (ctx, gumjs_invocation_args_construct, 0); duk_push_object (ctx); duk_push_c_function (ctx, gumjs_invocation_args_finalize, 1); duk_set_finalizer (ctx, -2); duk_put_prop_string (ctx, -2, "prototype"); self->invocation_args = _gum_duk_require_heapptr (ctx, -1); duk_put_global_string (ctx, "InvocationArgs"); _gum_duk_create_subclass (ctx, "NativePointer", "InvocationReturnValue", gumjs_invocation_return_value_construct, 1, NULL); duk_get_global_string (ctx, "InvocationReturnValue"); duk_get_prop_string (ctx, -1, "prototype"); duk_push_c_function (ctx, gumjs_invocation_return_value_finalize, 1); duk_set_finalizer (ctx, -2); duk_put_function_list (ctx, -1, gumjs_invocation_return_value_functions); duk_pop (ctx); self->invocation_retval = _gum_duk_require_heapptr (ctx, -1); duk_pop (ctx); self->cached_invocation_context = gum_duk_invocation_context_new (self); self->cached_invocation_context_in_use = FALSE; self->cached_invocation_args = gum_duk_invocation_args_new (self); self->cached_invocation_args_in_use = FALSE; self->cached_invocation_return_value = gum_duk_invocation_return_value_new ( self); self->cached_invocation_return_value_in_use = FALSE; }
duk_ret_t JsExe::Constructor(duk_context* duktapeContext) { try { if (duk_get_top(duktapeContext) != 0) JavaScriptHelper::Throw(duktapeContext, "No arguments for Exe/Dll constructor expected"); if (duk_is_constructor_call(duktapeContext)) duk_push_this(duktapeContext); else duk_push_object(duktapeContext); duk_push_pointer(duktapeContext, new JsExe); duk_put_prop_string(duktapeContext, -2, "__Ptr"); duk_push_c_function(duktapeContext, JsExe::Destructor, 1); duk_set_finalizer(duktapeContext, -2); duk_push_c_function(duktapeContext, JsExe::Build, DUK_VARARGS); duk_put_prop_string(duktapeContext, -2, "Build"); duk_push_c_function(duktapeContext, JsExe::Files, DUK_VARARGS); duk_put_prop_string(duktapeContext, -2, "Files"); duk_push_c_function(duktapeContext, JsExe::DependencyCheck, DUK_VARARGS); duk_put_prop_string(duktapeContext, -2, "DependencyCheck"); duk_push_c_function(duktapeContext, JsExe::CRT, DUK_VARARGS); duk_put_prop_string(duktapeContext, -2, "CRT"); duk_push_c_function(duktapeContext, JsExe::ObjDir, DUK_VARARGS); duk_put_prop_string(duktapeContext, -2, "ObjDir"); duk_push_c_function(duktapeContext, JsExe::Includes, DUK_VARARGS); duk_put_prop_string(duktapeContext, -2, "Includes"); duk_push_c_function(duktapeContext, JsExe::Defines, DUK_VARARGS); duk_put_prop_string(duktapeContext, -2, "Defines"); duk_push_c_function(duktapeContext, JsExe::Threads, DUK_VARARGS); duk_put_prop_string(duktapeContext, -2, "Threads"); duk_push_c_function(duktapeContext, JsExe::CompileArgs, DUK_VARARGS); duk_put_prop_string(duktapeContext, -2, "CompileArgs"); duk_push_c_function(duktapeContext, JsExe::CompileArgs, DUK_VARARGS); duk_put_prop_string(duktapeContext, -2, "Args"); duk_push_c_function(duktapeContext, JsExe::PrecompiledHeader, DUK_VARARGS); duk_put_prop_string(duktapeContext, -2, "PrecompiledHeader"); duk_push_c_function(duktapeContext, JsExe::WarningLevel, DUK_VARARGS); duk_put_prop_string(duktapeContext, -2, "WarningLevel"); duk_push_c_function(duktapeContext, JsExe::WarningAsError, DUK_VARARGS); duk_put_prop_string(duktapeContext, -2, "WarningAsError"); duk_push_c_function(duktapeContext, JsExe::WarningDisable, DUK_VARARGS); duk_put_prop_string(duktapeContext, -2, "WarningDisable"); duk_push_c_function(duktapeContext, JsExe::Output, DUK_VARARGS); duk_put_prop_string(duktapeContext, -2, "Output"); duk_push_c_function(duktapeContext, JsExe::LibPath, DUK_VARARGS); duk_put_prop_string(duktapeContext, -2, "LibPath"); duk_push_c_function(duktapeContext, JsExe::Libs, DUK_VARARGS); duk_put_prop_string(duktapeContext, -2, "Libs"); duk_push_c_function(duktapeContext, JsExe::ImportLib, DUK_VARARGS); duk_put_prop_string(duktapeContext, -2, "ImportLib"); duk_push_c_function(duktapeContext, JsExe::Def, DUK_VARARGS); duk_put_prop_string(duktapeContext, -2, "Def"); duk_push_c_function(duktapeContext, JsExe::LinkArgs, DUK_VARARGS); duk_put_prop_string(duktapeContext, -2, "LinkArgs"); duk_push_c_function(duktapeContext, JsExe::Res, DUK_VARARGS); duk_put_prop_string(duktapeContext, -2, "Res"); duk_push_c_function(duktapeContext, JsExe::BeforeCompile, DUK_VARARGS); duk_put_prop_string(duktapeContext, -2, "BeforeCompile"); duk_push_c_function(duktapeContext, JsExe::BeforeLink, DUK_VARARGS); duk_put_prop_string(duktapeContext, -2, "BeforeLink"); duk_push_c_function(duktapeContext, JsExe::Create, DUK_VARARGS); duk_put_prop_string(duktapeContext, -2, "Create"); return 1; } catch (std::exception& e) { JavaScriptHelper::Throw(duktapeContext, e.what()); } }
duk_ret_t dukky_storage_event___proto(duk_context *ctx) { /* Set this prototype's prototype (left-parent) */ /* get prototype */ duk_get_global_string(ctx, dukky_magic_string_prototypes); duk_get_prop_string(ctx, -1, "\xFF\xFFNETSURF_DUKTAPE_PROTOTYPE_EVENT"); duk_replace(ctx, -2); duk_set_prototype(ctx, 0); /* Add readonly property */ duk_dup(ctx, 0); duk_push_string(ctx, "key"); duk_push_c_function(ctx, dukky_storage_event_key_getter, 0); duk_def_prop(ctx, -3, DUK_DEFPROP_HAVE_GETTER | DUK_DEFPROP_HAVE_ENUMERABLE | DUK_DEFPROP_ENUMERABLE | DUK_DEFPROP_HAVE_CONFIGURABLE); duk_pop(ctx); /* Add readonly property */ duk_dup(ctx, 0); duk_push_string(ctx, "oldValue"); duk_push_c_function(ctx, dukky_storage_event_oldValue_getter, 0); duk_def_prop(ctx, -3, DUK_DEFPROP_HAVE_GETTER | DUK_DEFPROP_HAVE_ENUMERABLE | DUK_DEFPROP_ENUMERABLE | DUK_DEFPROP_HAVE_CONFIGURABLE); duk_pop(ctx); /* Add readonly property */ duk_dup(ctx, 0); duk_push_string(ctx, "newValue"); duk_push_c_function(ctx, dukky_storage_event_newValue_getter, 0); duk_def_prop(ctx, -3, DUK_DEFPROP_HAVE_GETTER | DUK_DEFPROP_HAVE_ENUMERABLE | DUK_DEFPROP_ENUMERABLE | DUK_DEFPROP_HAVE_CONFIGURABLE); duk_pop(ctx); /* Add readonly property */ duk_dup(ctx, 0); duk_push_string(ctx, "url"); duk_push_c_function(ctx, dukky_storage_event_url_getter, 0); duk_def_prop(ctx, -3, DUK_DEFPROP_HAVE_GETTER | DUK_DEFPROP_HAVE_ENUMERABLE | DUK_DEFPROP_ENUMERABLE | DUK_DEFPROP_HAVE_CONFIGURABLE); duk_pop(ctx); /* Add readonly property */ duk_dup(ctx, 0); duk_push_string(ctx, "storageArea"); duk_push_c_function(ctx, dukky_storage_event_storageArea_getter, 0); duk_def_prop(ctx, -3, DUK_DEFPROP_HAVE_GETTER | DUK_DEFPROP_HAVE_ENUMERABLE | DUK_DEFPROP_ENUMERABLE | DUK_DEFPROP_HAVE_CONFIGURABLE); duk_pop(ctx); /* Set the destructor */ duk_dup(ctx, 0); duk_push_c_function(ctx, dukky_storage_event___destructor, 1); duk_set_finalizer(ctx, -2); duk_pop(ctx); /* Set the constructor */ duk_dup(ctx, 0); duk_push_c_function(ctx, dukky_storage_event___constructor, 2); duk_put_prop_string(ctx, -2, "\xFF\xFFNETSURF_DUKTAPE_INIT"); duk_pop(ctx); return 1; /* The prototype object */ }
duk_ret_t dukky_document_fragment___proto(duk_context *ctx) { /* Set this prototype's prototype (left-parent) */ /* get prototype */ duk_get_global_string(ctx, dukky_magic_string_prototypes); duk_get_prop_string(ctx, -1, "\xFF\xFFNETSURF_DUKTAPE_PROTOTYPE_NODE"); duk_replace(ctx, -2); duk_set_prototype(ctx, 0); /* Add a method */ duk_dup(ctx, 0); duk_push_string(ctx, "getElementById"); duk_push_c_function(ctx, dukky_document_fragment_getElementById, DUK_VARARGS); duk_def_prop(ctx, -3, DUK_DEFPROP_HAVE_VALUE | DUK_DEFPROP_HAVE_WRITABLE | DUK_DEFPROP_HAVE_ENUMERABLE | DUK_DEFPROP_ENUMERABLE | DUK_DEFPROP_HAVE_CONFIGURABLE); duk_pop(ctx); /* Add a method */ duk_dup(ctx, 0); duk_push_string(ctx, "prepend"); duk_push_c_function(ctx, dukky_document_fragment_prepend, DUK_VARARGS); duk_def_prop(ctx, -3, DUK_DEFPROP_HAVE_VALUE | DUK_DEFPROP_HAVE_WRITABLE | DUK_DEFPROP_HAVE_ENUMERABLE | DUK_DEFPROP_ENUMERABLE | DUK_DEFPROP_HAVE_CONFIGURABLE); duk_pop(ctx); /* Add a method */ duk_dup(ctx, 0); duk_push_string(ctx, "append"); duk_push_c_function(ctx, dukky_document_fragment_append, DUK_VARARGS); duk_def_prop(ctx, -3, DUK_DEFPROP_HAVE_VALUE | DUK_DEFPROP_HAVE_WRITABLE | DUK_DEFPROP_HAVE_ENUMERABLE | DUK_DEFPROP_ENUMERABLE | DUK_DEFPROP_HAVE_CONFIGURABLE); duk_pop(ctx); /* Add a method */ duk_dup(ctx, 0); duk_push_string(ctx, "query"); duk_push_c_function(ctx, dukky_document_fragment_query, DUK_VARARGS); duk_def_prop(ctx, -3, DUK_DEFPROP_HAVE_VALUE | DUK_DEFPROP_HAVE_WRITABLE | DUK_DEFPROP_HAVE_ENUMERABLE | DUK_DEFPROP_ENUMERABLE | DUK_DEFPROP_HAVE_CONFIGURABLE); duk_pop(ctx); /* Add a method */ duk_dup(ctx, 0); duk_push_string(ctx, "queryAll"); duk_push_c_function(ctx, dukky_document_fragment_queryAll, DUK_VARARGS); duk_def_prop(ctx, -3, DUK_DEFPROP_HAVE_VALUE | DUK_DEFPROP_HAVE_WRITABLE | DUK_DEFPROP_HAVE_ENUMERABLE | DUK_DEFPROP_ENUMERABLE | DUK_DEFPROP_HAVE_CONFIGURABLE); duk_pop(ctx); /* Add a method */ duk_dup(ctx, 0); duk_push_string(ctx, "querySelector"); duk_push_c_function(ctx, dukky_document_fragment_querySelector, DUK_VARARGS); duk_def_prop(ctx, -3, DUK_DEFPROP_HAVE_VALUE | DUK_DEFPROP_HAVE_WRITABLE | DUK_DEFPROP_HAVE_ENUMERABLE | DUK_DEFPROP_ENUMERABLE | DUK_DEFPROP_HAVE_CONFIGURABLE); duk_pop(ctx); /* Add a method */ duk_dup(ctx, 0); duk_push_string(ctx, "querySelectorAll"); duk_push_c_function(ctx, dukky_document_fragment_querySelectorAll, DUK_VARARGS); duk_def_prop(ctx, -3, DUK_DEFPROP_HAVE_VALUE | DUK_DEFPROP_HAVE_WRITABLE | DUK_DEFPROP_HAVE_ENUMERABLE | DUK_DEFPROP_ENUMERABLE | DUK_DEFPROP_HAVE_CONFIGURABLE); duk_pop(ctx); /* Add readonly property */ duk_dup(ctx, 0); duk_push_string(ctx, "children"); duk_push_c_function(ctx, dukky_document_fragment_children_getter, 0); duk_def_prop(ctx, -3, DUK_DEFPROP_HAVE_GETTER | DUK_DEFPROP_HAVE_ENUMERABLE | DUK_DEFPROP_ENUMERABLE | DUK_DEFPROP_HAVE_CONFIGURABLE); duk_pop(ctx); /* Add readonly property */ duk_dup(ctx, 0); duk_push_string(ctx, "firstElementChild"); duk_push_c_function(ctx, dukky_document_fragment_firstElementChild_getter, 0); duk_def_prop(ctx, -3, DUK_DEFPROP_HAVE_GETTER | DUK_DEFPROP_HAVE_ENUMERABLE | DUK_DEFPROP_ENUMERABLE | DUK_DEFPROP_HAVE_CONFIGURABLE); duk_pop(ctx); /* Add readonly property */ duk_dup(ctx, 0); duk_push_string(ctx, "lastElementChild"); duk_push_c_function(ctx, dukky_document_fragment_lastElementChild_getter, 0); duk_def_prop(ctx, -3, DUK_DEFPROP_HAVE_GETTER | DUK_DEFPROP_HAVE_ENUMERABLE | DUK_DEFPROP_ENUMERABLE | DUK_DEFPROP_HAVE_CONFIGURABLE); duk_pop(ctx); /* Add readonly property */ duk_dup(ctx, 0); duk_push_string(ctx, "childElementCount"); duk_push_c_function(ctx, dukky_document_fragment_childElementCount_getter, 0); duk_def_prop(ctx, -3, DUK_DEFPROP_HAVE_GETTER | DUK_DEFPROP_HAVE_ENUMERABLE | DUK_DEFPROP_ENUMERABLE | DUK_DEFPROP_HAVE_CONFIGURABLE); duk_pop(ctx); /* Set the destructor */ duk_dup(ctx, 0); duk_push_c_function(ctx, dukky_document_fragment___destructor, 1); duk_set_finalizer(ctx, -2); duk_pop(ctx); /* Set the constructor */ duk_dup(ctx, 0); duk_push_c_function(ctx, dukky_document_fragment___constructor, 2); duk_put_prop_string(ctx, -2, "\xFF\xFFNETSURF_DUKTAPE_INIT"); duk_pop(ctx); return 1; /* The prototype object */ }
duk_ret_t dukky_html_anchor_element___proto(duk_context *ctx) { /* Set this prototype's prototype (left-parent) */ /* get prototype */ duk_get_global_string(ctx, dukky_magic_string_prototypes); duk_get_prop_string(ctx, -1, "\xFF\xFFNETSURF_DUKTAPE_PROTOTYPE_HTMLELEMENT"); duk_replace(ctx, -2); duk_set_prototype(ctx, 0); /* Add read/write property */ duk_dup(ctx, 0); duk_push_string(ctx, "target"); duk_push_c_function(ctx, dukky_html_anchor_element_target_getter, 0); duk_push_c_function(ctx, dukky_html_anchor_element_target_setter, 1); duk_def_prop(ctx, -4, DUK_DEFPROP_HAVE_GETTER | DUK_DEFPROP_HAVE_SETTER | DUK_DEFPROP_HAVE_ENUMERABLE | DUK_DEFPROP_ENUMERABLE | DUK_DEFPROP_HAVE_CONFIGURABLE); duk_pop(ctx); /* Add read/write property */ duk_dup(ctx, 0); duk_push_string(ctx, "download"); duk_push_c_function(ctx, dukky_html_anchor_element_download_getter, 0); duk_push_c_function(ctx, dukky_html_anchor_element_download_setter, 1); duk_def_prop(ctx, -4, DUK_DEFPROP_HAVE_GETTER | DUK_DEFPROP_HAVE_SETTER | DUK_DEFPROP_HAVE_ENUMERABLE | DUK_DEFPROP_ENUMERABLE | DUK_DEFPROP_HAVE_CONFIGURABLE); duk_pop(ctx); /* Add read/write property */ duk_dup(ctx, 0); duk_push_string(ctx, "ping"); duk_push_c_function(ctx, dukky_html_anchor_element_ping_getter, 0); duk_push_c_function(ctx, dukky_html_anchor_element_ping_setter, 1); duk_def_prop(ctx, -4, DUK_DEFPROP_HAVE_GETTER | DUK_DEFPROP_HAVE_SETTER | DUK_DEFPROP_HAVE_ENUMERABLE | DUK_DEFPROP_ENUMERABLE | DUK_DEFPROP_HAVE_CONFIGURABLE); duk_pop(ctx); /* Add read/write property */ duk_dup(ctx, 0); duk_push_string(ctx, "rel"); duk_push_c_function(ctx, dukky_html_anchor_element_rel_getter, 0); duk_push_c_function(ctx, dukky_html_anchor_element_rel_setter, 1); duk_def_prop(ctx, -4, DUK_DEFPROP_HAVE_GETTER | DUK_DEFPROP_HAVE_SETTER | DUK_DEFPROP_HAVE_ENUMERABLE | DUK_DEFPROP_ENUMERABLE | DUK_DEFPROP_HAVE_CONFIGURABLE); duk_pop(ctx); /* Add readonly property */ duk_dup(ctx, 0); duk_push_string(ctx, "relList"); duk_push_c_function(ctx, dukky_html_anchor_element_relList_getter, 0); duk_def_prop(ctx, -3, DUK_DEFPROP_HAVE_GETTER | DUK_DEFPROP_HAVE_ENUMERABLE | DUK_DEFPROP_ENUMERABLE | DUK_DEFPROP_HAVE_CONFIGURABLE); duk_pop(ctx); /* Add read/write property */ duk_dup(ctx, 0); duk_push_string(ctx, "hreflang"); duk_push_c_function(ctx, dukky_html_anchor_element_hreflang_getter, 0); duk_push_c_function(ctx, dukky_html_anchor_element_hreflang_setter, 1); duk_def_prop(ctx, -4, DUK_DEFPROP_HAVE_GETTER | DUK_DEFPROP_HAVE_SETTER | DUK_DEFPROP_HAVE_ENUMERABLE | DUK_DEFPROP_ENUMERABLE | DUK_DEFPROP_HAVE_CONFIGURABLE); duk_pop(ctx); /* Add read/write property */ duk_dup(ctx, 0); duk_push_string(ctx, "type"); duk_push_c_function(ctx, dukky_html_anchor_element_type_getter, 0); duk_push_c_function(ctx, dukky_html_anchor_element_type_setter, 1); duk_def_prop(ctx, -4, DUK_DEFPROP_HAVE_GETTER | DUK_DEFPROP_HAVE_SETTER | DUK_DEFPROP_HAVE_ENUMERABLE | DUK_DEFPROP_ENUMERABLE | DUK_DEFPROP_HAVE_CONFIGURABLE); duk_pop(ctx); /* Add read/write property */ duk_dup(ctx, 0); duk_push_string(ctx, "text"); duk_push_c_function(ctx, dukky_html_anchor_element_text_getter, 0); duk_push_c_function(ctx, dukky_html_anchor_element_text_setter, 1); duk_def_prop(ctx, -4, DUK_DEFPROP_HAVE_GETTER | DUK_DEFPROP_HAVE_SETTER | DUK_DEFPROP_HAVE_ENUMERABLE | DUK_DEFPROP_ENUMERABLE | DUK_DEFPROP_HAVE_CONFIGURABLE); duk_pop(ctx); /* Add read/write property */ duk_dup(ctx, 0); duk_push_string(ctx, "coords"); duk_push_c_function(ctx, dukky_html_anchor_element_coords_getter, 0); duk_push_c_function(ctx, dukky_html_anchor_element_coords_setter, 1); duk_def_prop(ctx, -4, DUK_DEFPROP_HAVE_GETTER | DUK_DEFPROP_HAVE_SETTER | DUK_DEFPROP_HAVE_ENUMERABLE | DUK_DEFPROP_ENUMERABLE | DUK_DEFPROP_HAVE_CONFIGURABLE); duk_pop(ctx); /* Add read/write property */ duk_dup(ctx, 0); duk_push_string(ctx, "charset"); duk_push_c_function(ctx, dukky_html_anchor_element_charset_getter, 0); duk_push_c_function(ctx, dukky_html_anchor_element_charset_setter, 1); duk_def_prop(ctx, -4, DUK_DEFPROP_HAVE_GETTER | DUK_DEFPROP_HAVE_SETTER | DUK_DEFPROP_HAVE_ENUMERABLE | DUK_DEFPROP_ENUMERABLE | DUK_DEFPROP_HAVE_CONFIGURABLE); duk_pop(ctx); /* Add read/write property */ duk_dup(ctx, 0); duk_push_string(ctx, "name"); duk_push_c_function(ctx, dukky_html_anchor_element_name_getter, 0); duk_push_c_function(ctx, dukky_html_anchor_element_name_setter, 1); duk_def_prop(ctx, -4, DUK_DEFPROP_HAVE_GETTER | DUK_DEFPROP_HAVE_SETTER | DUK_DEFPROP_HAVE_ENUMERABLE | DUK_DEFPROP_ENUMERABLE | DUK_DEFPROP_HAVE_CONFIGURABLE); duk_pop(ctx); /* Add read/write property */ duk_dup(ctx, 0); duk_push_string(ctx, "rev"); duk_push_c_function(ctx, dukky_html_anchor_element_rev_getter, 0); duk_push_c_function(ctx, dukky_html_anchor_element_rev_setter, 1); duk_def_prop(ctx, -4, DUK_DEFPROP_HAVE_GETTER | DUK_DEFPROP_HAVE_SETTER | DUK_DEFPROP_HAVE_ENUMERABLE | DUK_DEFPROP_ENUMERABLE | DUK_DEFPROP_HAVE_CONFIGURABLE); duk_pop(ctx); /* Add read/write property */ duk_dup(ctx, 0); duk_push_string(ctx, "shape"); duk_push_c_function(ctx, dukky_html_anchor_element_shape_getter, 0); duk_push_c_function(ctx, dukky_html_anchor_element_shape_setter, 1); duk_def_prop(ctx, -4, DUK_DEFPROP_HAVE_GETTER | DUK_DEFPROP_HAVE_SETTER | DUK_DEFPROP_HAVE_ENUMERABLE | DUK_DEFPROP_ENUMERABLE | DUK_DEFPROP_HAVE_CONFIGURABLE); duk_pop(ctx); /* Add read/write property */ duk_dup(ctx, 0); duk_push_string(ctx, "href"); duk_push_c_function(ctx, dukky_html_anchor_element_href_getter, 0); duk_push_c_function(ctx, dukky_html_anchor_element_href_setter, 1); duk_def_prop(ctx, -4, DUK_DEFPROP_HAVE_GETTER | DUK_DEFPROP_HAVE_SETTER | DUK_DEFPROP_HAVE_ENUMERABLE | DUK_DEFPROP_ENUMERABLE | DUK_DEFPROP_HAVE_CONFIGURABLE); duk_pop(ctx); /* Add readonly property */ duk_dup(ctx, 0); duk_push_string(ctx, "origin"); duk_push_c_function(ctx, dukky_html_anchor_element_origin_getter, 0); duk_def_prop(ctx, -3, DUK_DEFPROP_HAVE_GETTER | DUK_DEFPROP_HAVE_ENUMERABLE | DUK_DEFPROP_ENUMERABLE | DUK_DEFPROP_HAVE_CONFIGURABLE); duk_pop(ctx); /* Add read/write property */ duk_dup(ctx, 0); duk_push_string(ctx, "protocol"); duk_push_c_function(ctx, dukky_html_anchor_element_protocol_getter, 0); duk_push_c_function(ctx, dukky_html_anchor_element_protocol_setter, 1); duk_def_prop(ctx, -4, DUK_DEFPROP_HAVE_GETTER | DUK_DEFPROP_HAVE_SETTER | DUK_DEFPROP_HAVE_ENUMERABLE | DUK_DEFPROP_ENUMERABLE | DUK_DEFPROP_HAVE_CONFIGURABLE); duk_pop(ctx); /* Add read/write property */ duk_dup(ctx, 0); duk_push_string(ctx, "username"); duk_push_c_function(ctx, dukky_html_anchor_element_username_getter, 0); duk_push_c_function(ctx, dukky_html_anchor_element_username_setter, 1); duk_def_prop(ctx, -4, DUK_DEFPROP_HAVE_GETTER | DUK_DEFPROP_HAVE_SETTER | DUK_DEFPROP_HAVE_ENUMERABLE | DUK_DEFPROP_ENUMERABLE | DUK_DEFPROP_HAVE_CONFIGURABLE); duk_pop(ctx); /* Add read/write property */ duk_dup(ctx, 0); duk_push_string(ctx, "password"); duk_push_c_function(ctx, dukky_html_anchor_element_password_getter, 0); duk_push_c_function(ctx, dukky_html_anchor_element_password_setter, 1); duk_def_prop(ctx, -4, DUK_DEFPROP_HAVE_GETTER | DUK_DEFPROP_HAVE_SETTER | DUK_DEFPROP_HAVE_ENUMERABLE | DUK_DEFPROP_ENUMERABLE | DUK_DEFPROP_HAVE_CONFIGURABLE); duk_pop(ctx); /* Add read/write property */ duk_dup(ctx, 0); duk_push_string(ctx, "host"); duk_push_c_function(ctx, dukky_html_anchor_element_host_getter, 0); duk_push_c_function(ctx, dukky_html_anchor_element_host_setter, 1); duk_def_prop(ctx, -4, DUK_DEFPROP_HAVE_GETTER | DUK_DEFPROP_HAVE_SETTER | DUK_DEFPROP_HAVE_ENUMERABLE | DUK_DEFPROP_ENUMERABLE | DUK_DEFPROP_HAVE_CONFIGURABLE); duk_pop(ctx); /* Add read/write property */ duk_dup(ctx, 0); duk_push_string(ctx, "hostname"); duk_push_c_function(ctx, dukky_html_anchor_element_hostname_getter, 0); duk_push_c_function(ctx, dukky_html_anchor_element_hostname_setter, 1); duk_def_prop(ctx, -4, DUK_DEFPROP_HAVE_GETTER | DUK_DEFPROP_HAVE_SETTER | DUK_DEFPROP_HAVE_ENUMERABLE | DUK_DEFPROP_ENUMERABLE | DUK_DEFPROP_HAVE_CONFIGURABLE); duk_pop(ctx); /* Add read/write property */ duk_dup(ctx, 0); duk_push_string(ctx, "port"); duk_push_c_function(ctx, dukky_html_anchor_element_port_getter, 0); duk_push_c_function(ctx, dukky_html_anchor_element_port_setter, 1); duk_def_prop(ctx, -4, DUK_DEFPROP_HAVE_GETTER | DUK_DEFPROP_HAVE_SETTER | DUK_DEFPROP_HAVE_ENUMERABLE | DUK_DEFPROP_ENUMERABLE | DUK_DEFPROP_HAVE_CONFIGURABLE); duk_pop(ctx); /* Add read/write property */ duk_dup(ctx, 0); duk_push_string(ctx, "pathname"); duk_push_c_function(ctx, dukky_html_anchor_element_pathname_getter, 0); duk_push_c_function(ctx, dukky_html_anchor_element_pathname_setter, 1); duk_def_prop(ctx, -4, DUK_DEFPROP_HAVE_GETTER | DUK_DEFPROP_HAVE_SETTER | DUK_DEFPROP_HAVE_ENUMERABLE | DUK_DEFPROP_ENUMERABLE | DUK_DEFPROP_HAVE_CONFIGURABLE); duk_pop(ctx); /* Add read/write property */ duk_dup(ctx, 0); duk_push_string(ctx, "search"); duk_push_c_function(ctx, dukky_html_anchor_element_search_getter, 0); duk_push_c_function(ctx, dukky_html_anchor_element_search_setter, 1); duk_def_prop(ctx, -4, DUK_DEFPROP_HAVE_GETTER | DUK_DEFPROP_HAVE_SETTER | DUK_DEFPROP_HAVE_ENUMERABLE | DUK_DEFPROP_ENUMERABLE | DUK_DEFPROP_HAVE_CONFIGURABLE); duk_pop(ctx); /* Add read/write property */ duk_dup(ctx, 0); duk_push_string(ctx, "hash"); duk_push_c_function(ctx, dukky_html_anchor_element_hash_getter, 0); duk_push_c_function(ctx, dukky_html_anchor_element_hash_setter, 1); duk_def_prop(ctx, -4, DUK_DEFPROP_HAVE_GETTER | DUK_DEFPROP_HAVE_SETTER | DUK_DEFPROP_HAVE_ENUMERABLE | DUK_DEFPROP_ENUMERABLE | DUK_DEFPROP_HAVE_CONFIGURABLE); duk_pop(ctx); /* Set the destructor */ duk_dup(ctx, 0); duk_push_c_function(ctx, dukky_html_anchor_element___destructor, 1); duk_set_finalizer(ctx, -2); duk_pop(ctx); /* Set the constructor */ duk_dup(ctx, 0); duk_push_c_function(ctx, dukky_html_anchor_element___constructor, 2); duk_put_prop_string(ctx, -2, "\xFF\xFFNETSURF_DUKTAPE_INIT"); duk_pop(ctx); return 1; /* The prototype object */ }
duk_ret_t dukky_video_track___proto(duk_context *ctx) { /* Add readonly property */ duk_dup(ctx, 0); duk_push_string(ctx, "id"); duk_push_c_function(ctx, dukky_video_track_id_getter, 0); duk_def_prop(ctx, -3, DUK_DEFPROP_HAVE_GETTER | DUK_DEFPROP_HAVE_ENUMERABLE | DUK_DEFPROP_ENUMERABLE | DUK_DEFPROP_HAVE_CONFIGURABLE); duk_pop(ctx); /* Add readonly property */ duk_dup(ctx, 0); duk_push_string(ctx, "kind"); duk_push_c_function(ctx, dukky_video_track_kind_getter, 0); duk_def_prop(ctx, -3, DUK_DEFPROP_HAVE_GETTER | DUK_DEFPROP_HAVE_ENUMERABLE | DUK_DEFPROP_ENUMERABLE | DUK_DEFPROP_HAVE_CONFIGURABLE); duk_pop(ctx); /* Add readonly property */ duk_dup(ctx, 0); duk_push_string(ctx, "label"); duk_push_c_function(ctx, dukky_video_track_label_getter, 0); duk_def_prop(ctx, -3, DUK_DEFPROP_HAVE_GETTER | DUK_DEFPROP_HAVE_ENUMERABLE | DUK_DEFPROP_ENUMERABLE | DUK_DEFPROP_HAVE_CONFIGURABLE); duk_pop(ctx); /* Add readonly property */ duk_dup(ctx, 0); duk_push_string(ctx, "language"); duk_push_c_function(ctx, dukky_video_track_language_getter, 0); duk_def_prop(ctx, -3, DUK_DEFPROP_HAVE_GETTER | DUK_DEFPROP_HAVE_ENUMERABLE | DUK_DEFPROP_ENUMERABLE | DUK_DEFPROP_HAVE_CONFIGURABLE); duk_pop(ctx); /* Add read/write property */ duk_dup(ctx, 0); duk_push_string(ctx, "selected"); duk_push_c_function(ctx, dukky_video_track_selected_getter, 0); duk_push_c_function(ctx, dukky_video_track_selected_setter, 1); duk_def_prop(ctx, -4, DUK_DEFPROP_HAVE_GETTER | DUK_DEFPROP_HAVE_SETTER | DUK_DEFPROP_HAVE_ENUMERABLE | DUK_DEFPROP_ENUMERABLE | DUK_DEFPROP_HAVE_CONFIGURABLE); duk_pop(ctx); /* Set the destructor */ duk_dup(ctx, 0); duk_push_c_function(ctx, dukky_video_track___destructor, 1); duk_set_finalizer(ctx, -2); duk_pop(ctx); /* Set the constructor */ duk_dup(ctx, 0); duk_push_c_function(ctx, dukky_video_track___constructor, 1); duk_put_prop_string(ctx, -2, "\xFF\xFFNETSURF_DUKTAPE_INIT"); duk_pop(ctx); return 1; /* The prototype object */ }
static duk_ret_t test_func(duk_context *ctx, void *udata) { (void) udata; if (ctx) { printf("dummy - return here\n"); fflush(stdout); return 0; } /* Up-to-date for Duktape 1.3.0, alphabetical order: * $ cd website/api; ls *.yaml */ (void) duk_alloc_raw(ctx, 0); (void) duk_alloc(ctx, 0); (void) duk_base64_decode(ctx, 0); (void) duk_base64_encode(ctx, 0); (void) duk_buffer_to_string(ctx, 0); (void) duk_call_method(ctx, 0); (void) duk_call_prop(ctx, 0, 0); (void) duk_call(ctx, 0); (void) duk_char_code_at(ctx, 0, 0); (void) duk_check_stack_top(ctx, 0); (void) duk_check_stack(ctx, 0); (void) duk_check_type_mask(ctx, 0, 0); (void) duk_check_type(ctx, 0, 0); (void) duk_compact(ctx, 0); (void) duk_compile_lstring_filename(ctx, 0, "dummy", 0); (void) duk_compile_lstring(ctx, 0, "dummy", 0); (void) duk_compile_string_filename(ctx, 0, "dummy"); (void) duk_compile_string(ctx, 0, "dummy"); (void) duk_compile(ctx, 0); (void) duk_concat(ctx, 0); (void) duk_config_buffer(ctx, 0, NULL, 0); (void) duk_copy(ctx, 0, 0); (void) duk_create_heap_default(); (void) duk_create_heap(NULL, NULL, NULL, NULL, NULL); (void) duk_debugger_attach(ctx, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL); (void) duk_debugger_cooperate(ctx); (void) duk_debugger_detach(ctx); (void) duk_debugger_notify(ctx, 0); (void) duk_debugger_pause(ctx); (void) duk_decode_string(ctx, 0, NULL, NULL); (void) duk_def_prop(ctx, 0, 0); (void) duk_del_prop_index(ctx, 0, 0); (void) duk_del_prop_string(ctx, 0, "dummy"); (void) duk_del_prop(ctx, 0); (void) duk_destroy_heap(ctx); (void) duk_dump_function(ctx); (void) duk_dup_top(ctx); (void) duk_dup(ctx, 0); (void) duk_enum(ctx, 0, 0); (void) duk_equals(ctx, 0, 0); duk_error_va(ctx, 0, NULL, NULL); duk_error(ctx, 0, "dummy"); /* (void) cast won't work without variadic macros */ (void) duk_eval_lstring_noresult(ctx, "dummy", 0); (void) duk_eval_lstring(ctx, "dummy", 0); (void) duk_eval_noresult(ctx); (void) duk_eval_string_noresult(ctx, "dummy"); (void) duk_eval_string(ctx, "dummy"); (void) duk_eval(ctx); (void) duk_fatal(ctx, "dummy"); (void) duk_free_raw(ctx, NULL); (void) duk_free(ctx, NULL); (void) duk_gc(ctx, 0); (void) duk_get_boolean(ctx, 0); (void) duk_get_buffer_data(ctx, 0, NULL); (void) duk_get_buffer(ctx, 0, NULL); (void) duk_get_c_function(ctx, 0); (void) duk_get_context(ctx, 0); (void) duk_get_current_magic(ctx); (void) duk_get_error_code(ctx, 0); (void) duk_get_finalizer(ctx, 0); (void) duk_get_global_string(ctx, 0); (void) duk_get_heapptr(ctx, 0); (void) duk_get_int(ctx, 0); (void) duk_get_length(ctx, 0); (void) duk_get_lstring(ctx, 0, NULL); (void) duk_get_magic(ctx, 0); (void) duk_get_memory_functions(ctx, NULL); (void) duk_get_number(ctx, 0); (void) duk_get_pointer(ctx, 0); (void) duk_get_prop_index(ctx, 0, 0); (void) duk_get_prop_string(ctx, 0, "dummy"); (void) duk_get_prop(ctx, 0); (void) duk_get_prototype(ctx, 0); (void) duk_get_string(ctx, 0); (void) duk_get_top_index(ctx); (void) duk_get_top(ctx); (void) duk_get_type_mask(ctx, 0); (void) duk_get_type(ctx, 0); (void) duk_get_uint(ctx, 0); (void) duk_has_prop_index(ctx, 0, 0); (void) duk_has_prop_string(ctx, 0, "dummy"); (void) duk_has_prop(ctx, 0); (void) duk_hex_decode(ctx, 0); (void) duk_hex_encode(ctx, 0); (void) duk_insert(ctx, 0); (void) duk_instanceof(ctx, 0, 0); (void) duk_is_array(ctx, 0); (void) duk_is_boolean(ctx, 0); (void) duk_is_bound_function(ctx, 0); (void) duk_is_buffer(ctx, 0); (void) duk_is_callable(ctx, 0); (void) duk_is_c_function(ctx, 0); (void) duk_is_constructor_call(ctx); (void) duk_is_dynamic_buffer(ctx, 0); (void) duk_is_ecmascript_function(ctx, 0); (void) duk_is_error(ctx, 0); (void) duk_is_eval_error(ctx, 0); (void) duk_is_fixed_buffer(ctx, 0); (void) duk_is_function(ctx, 0); (void) duk_is_lightfunc(ctx, 0); (void) duk_is_nan(ctx, 0); (void) duk_is_null_or_undefined(ctx, 0); (void) duk_is_null(ctx, 0); (void) duk_is_number(ctx, 0); (void) duk_is_object_coercible(ctx, 0); (void) duk_is_object(ctx, 0); (void) duk_is_pointer(ctx, 0); (void) duk_is_primitive(ctx, 0); (void) duk_is_range_error(ctx, 0); (void) duk_is_reference_error(ctx, 0); (void) duk_is_strict_call(ctx); (void) duk_is_string(ctx, 0); (void) duk_is_syntax_error(ctx, 0); (void) duk_is_thread(ctx, 0); (void) duk_is_type_error(ctx, 0); (void) duk_is_undefined(ctx, 0); (void) duk_is_uri_error(ctx, 0); (void) duk_is_valid_index(ctx, 0); (void) duk_join(ctx, 0); (void) duk_json_decode(ctx, 0); (void) duk_json_encode(ctx, 0); (void) duk_load_function(ctx); (void) duk_map_string(ctx, 0, NULL, NULL); (void) duk_new(ctx, 0); (void) duk_next(ctx, 0, 0); (void) duk_normalize_index(ctx, 0); (void) duk_pcall_method(ctx, 0); (void) duk_pcall_prop(ctx, 0, 0); (void) duk_pcall(ctx, 0); (void) duk_pcompile_lstring_filename(ctx, 0, "dummy", 0); (void) duk_pcompile_lstring(ctx, 0, "dummy", 0); (void) duk_pcompile_string_filename(ctx, 0, "dummy"); (void) duk_pcompile_string(ctx, 0, "dummy"); (void) duk_pcompile(ctx, 0); (void) duk_peval_lstring_noresult(ctx, "dummy", 0); (void) duk_peval_lstring(ctx, "dummy", 0); (void) duk_peval_noresult(ctx); (void) duk_peval_string_noresult(ctx, "dummy"); (void) duk_peval_string(ctx, "dummy"); (void) duk_peval(ctx); (void) duk_pnew(ctx, 0); (void) duk_pop_2(ctx); (void) duk_pop_3(ctx); (void) duk_pop_n(ctx, 0); (void) duk_pop(ctx); (void) duk_push_array(ctx); (void) duk_push_boolean(ctx, 0); (void) duk_push_buffer_object(ctx, 0, 0, 0, 0); (void) duk_push_buffer(ctx, 0, 0); (void) duk_push_c_function(ctx, NULL, 0); (void) duk_push_c_lightfunc(ctx, NULL, 0, 0, 0); (void) duk_push_context_dump(ctx); (void) duk_push_current_function(ctx); (void) duk_push_current_thread(ctx); (void) duk_push_dynamic_buffer(ctx, 0); (void) duk_push_error_object_va(ctx, 0, NULL, NULL); (void) duk_push_error_object(ctx, 0, "dummy"); (void) duk_push_external_buffer(ctx); (void) duk_push_false(ctx); (void) duk_push_fixed_buffer(ctx, 0); (void) duk_push_global_object(ctx); (void) duk_push_global_stash(ctx); (void) duk_push_heap_stash(ctx); (void) duk_push_heapptr(ctx, NULL); (void) duk_push_int(ctx, 0); (void) duk_push_lstring(ctx, "dummy", 0); (void) duk_push_nan(ctx); (void) duk_push_null(ctx); (void) duk_push_number(ctx, 0.0); (void) duk_push_object(ctx); (void) duk_push_pointer(ctx, NULL); (void) duk_push_sprintf(ctx, "dummy"); (void) duk_push_string(ctx, "dummy"); (void) duk_push_this(ctx); (void) duk_push_thread_new_globalenv(ctx); (void) duk_push_thread_stash(ctx, NULL); (void) duk_push_thread(ctx); (void) duk_push_true(ctx); (void) duk_push_uint(ctx, 0); (void) duk_push_undefined(ctx); (void) duk_push_vsprintf(ctx, "dummy", NULL); (void) duk_put_function_list(ctx, 0, NULL); (void) duk_put_global_string(ctx, NULL); (void) duk_put_number_list(ctx, 0, NULL); (void) duk_put_prop_index(ctx, 0, 0); (void) duk_put_prop_string(ctx, 0, "dummy"); (void) duk_put_prop(ctx, 0); (void) duk_realloc_raw(ctx, NULL, 0); (void) duk_realloc(ctx, NULL, 0); (void) duk_remove(ctx, 0); (void) duk_replace(ctx, 0); (void) duk_require_boolean(ctx, 0); (void) duk_require_buffer_data(ctx, 0, NULL); (void) duk_require_buffer(ctx, 0, NULL); (void) duk_require_c_function(ctx, 0); (void) duk_require_callable(ctx, 0); (void) duk_require_context(ctx, 0); (void) duk_require_function(ctx, 0); (void) duk_require_heapptr(ctx, 0); (void) duk_require_int(ctx, 0); (void) duk_require_lstring(ctx, 0, NULL); (void) duk_require_normalize_index(ctx, 0); (void) duk_require_null(ctx, 0); (void) duk_require_number(ctx, 0); (void) duk_require_object_coercible(ctx, 0); (void) duk_require_pointer(ctx, 0); (void) duk_require_stack_top(ctx, 0); (void) duk_require_stack(ctx, 0); (void) duk_require_string(ctx, 0); (void) duk_require_top_index(ctx); (void) duk_require_type_mask(ctx, 0, 0); (void) duk_require_uint(ctx, 0); (void) duk_require_undefined(ctx, 0); (void) duk_require_valid_index(ctx, 0); (void) duk_resize_buffer(ctx, 0, 0); (void) duk_safe_call(ctx, NULL, NULL, 0, 0); (void) duk_safe_to_lstring(ctx, 0, NULL); (void) duk_safe_to_string(ctx, 0); (void) duk_set_finalizer(ctx, 0); (void) duk_set_global_object(ctx); (void) duk_set_magic(ctx, 0, 0); (void) duk_set_prototype(ctx, 0); (void) duk_set_top(ctx, 0); (void) duk_steal_buffer(ctx, 0, NULL); (void) duk_strict_equals(ctx, 0, 0); (void) duk_substring(ctx, 0, 0, 0); (void) duk_swap_top(ctx, 0); (void) duk_swap(ctx, 0, 0); (void) duk_throw(ctx); (void) duk_to_boolean(ctx, 0); (void) duk_to_buffer(ctx, 0, NULL); (void) duk_to_defaultvalue(ctx, 0, 0); (void) duk_to_dynamic_buffer(ctx, 0, NULL); (void) duk_to_fixed_buffer(ctx, 0, NULL); (void) duk_to_int32(ctx, 0); (void) duk_to_int(ctx, 0); (void) duk_to_lstring(ctx, 0, NULL); (void) duk_to_null(ctx, 0); (void) duk_to_number(ctx, 0); (void) duk_to_object(ctx, 0); (void) duk_to_pointer(ctx, 0); (void) duk_to_primitive(ctx, 0, 0); (void) duk_to_string(ctx, 0); (void) duk_to_uint16(ctx, 0); (void) duk_to_uint32(ctx, 0); (void) duk_to_uint(ctx, 0); (void) duk_to_undefined(ctx, 0); (void) duk_trim(ctx, 0); (void) duk_xcopy_top(ctx, NULL, 0); (void) duk_xmove_top(ctx, NULL, 0); printf("never here\n"); fflush(stdout); return 0; }
duk_ret_t dukky_html_table_cell_element___proto(duk_context *ctx) { /* Set this prototype's prototype (left-parent) */ /* get prototype */ duk_get_global_string(ctx, dukky_magic_string_prototypes); duk_get_prop_string(ctx, -1, "\xFF\xFFNETSURF_DUKTAPE_PROTOTYPE_HTMLELEMENT"); duk_replace(ctx, -2); duk_set_prototype(ctx, 0); /* Add read/write property */ duk_dup(ctx, 0); duk_push_string(ctx, "colSpan"); duk_push_c_function(ctx, dukky_html_table_cell_element_colSpan_getter, 0); duk_push_c_function(ctx, dukky_html_table_cell_element_colSpan_setter, 1); duk_def_prop(ctx, -4, DUK_DEFPROP_HAVE_GETTER | DUK_DEFPROP_HAVE_SETTER | DUK_DEFPROP_HAVE_ENUMERABLE | DUK_DEFPROP_ENUMERABLE | DUK_DEFPROP_HAVE_CONFIGURABLE); duk_pop(ctx); /* Add read/write property */ duk_dup(ctx, 0); duk_push_string(ctx, "rowSpan"); duk_push_c_function(ctx, dukky_html_table_cell_element_rowSpan_getter, 0); duk_push_c_function(ctx, dukky_html_table_cell_element_rowSpan_setter, 1); duk_def_prop(ctx, -4, DUK_DEFPROP_HAVE_GETTER | DUK_DEFPROP_HAVE_SETTER | DUK_DEFPROP_HAVE_ENUMERABLE | DUK_DEFPROP_ENUMERABLE | DUK_DEFPROP_HAVE_CONFIGURABLE); duk_pop(ctx); /* Add read/write property */ duk_dup(ctx, 0); duk_push_string(ctx, "headers"); duk_push_c_function(ctx, dukky_html_table_cell_element_headers_getter, 0); duk_push_c_function(ctx, dukky_html_table_cell_element_headers_setter, 1); duk_def_prop(ctx, -4, DUK_DEFPROP_HAVE_GETTER | DUK_DEFPROP_HAVE_SETTER | DUK_DEFPROP_HAVE_ENUMERABLE | DUK_DEFPROP_ENUMERABLE | DUK_DEFPROP_HAVE_CONFIGURABLE); duk_pop(ctx); /* Add readonly property */ duk_dup(ctx, 0); duk_push_string(ctx, "cellIndex"); duk_push_c_function(ctx, dukky_html_table_cell_element_cellIndex_getter, 0); duk_def_prop(ctx, -3, DUK_DEFPROP_HAVE_GETTER | DUK_DEFPROP_HAVE_ENUMERABLE | DUK_DEFPROP_ENUMERABLE | DUK_DEFPROP_HAVE_CONFIGURABLE); duk_pop(ctx); /* Add read/write property */ duk_dup(ctx, 0); duk_push_string(ctx, "align"); duk_push_c_function(ctx, dukky_html_table_cell_element_align_getter, 0); duk_push_c_function(ctx, dukky_html_table_cell_element_align_setter, 1); duk_def_prop(ctx, -4, DUK_DEFPROP_HAVE_GETTER | DUK_DEFPROP_HAVE_SETTER | DUK_DEFPROP_HAVE_ENUMERABLE | DUK_DEFPROP_ENUMERABLE | DUK_DEFPROP_HAVE_CONFIGURABLE); duk_pop(ctx); /* Add read/write property */ duk_dup(ctx, 0); duk_push_string(ctx, "axis"); duk_push_c_function(ctx, dukky_html_table_cell_element_axis_getter, 0); duk_push_c_function(ctx, dukky_html_table_cell_element_axis_setter, 1); duk_def_prop(ctx, -4, DUK_DEFPROP_HAVE_GETTER | DUK_DEFPROP_HAVE_SETTER | DUK_DEFPROP_HAVE_ENUMERABLE | DUK_DEFPROP_ENUMERABLE | DUK_DEFPROP_HAVE_CONFIGURABLE); duk_pop(ctx); /* Add read/write property */ duk_dup(ctx, 0); duk_push_string(ctx, "height"); duk_push_c_function(ctx, dukky_html_table_cell_element_height_getter, 0); duk_push_c_function(ctx, dukky_html_table_cell_element_height_setter, 1); duk_def_prop(ctx, -4, DUK_DEFPROP_HAVE_GETTER | DUK_DEFPROP_HAVE_SETTER | DUK_DEFPROP_HAVE_ENUMERABLE | DUK_DEFPROP_ENUMERABLE | DUK_DEFPROP_HAVE_CONFIGURABLE); duk_pop(ctx); /* Add read/write property */ duk_dup(ctx, 0); duk_push_string(ctx, "width"); duk_push_c_function(ctx, dukky_html_table_cell_element_width_getter, 0); duk_push_c_function(ctx, dukky_html_table_cell_element_width_setter, 1); duk_def_prop(ctx, -4, DUK_DEFPROP_HAVE_GETTER | DUK_DEFPROP_HAVE_SETTER | DUK_DEFPROP_HAVE_ENUMERABLE | DUK_DEFPROP_ENUMERABLE | DUK_DEFPROP_HAVE_CONFIGURABLE); duk_pop(ctx); /* Add read/write property */ duk_dup(ctx, 0); duk_push_string(ctx, "ch"); duk_push_c_function(ctx, dukky_html_table_cell_element_ch_getter, 0); duk_push_c_function(ctx, dukky_html_table_cell_element_ch_setter, 1); duk_def_prop(ctx, -4, DUK_DEFPROP_HAVE_GETTER | DUK_DEFPROP_HAVE_SETTER | DUK_DEFPROP_HAVE_ENUMERABLE | DUK_DEFPROP_ENUMERABLE | DUK_DEFPROP_HAVE_CONFIGURABLE); duk_pop(ctx); /* Add read/write property */ duk_dup(ctx, 0); duk_push_string(ctx, "chOff"); duk_push_c_function(ctx, dukky_html_table_cell_element_chOff_getter, 0); duk_push_c_function(ctx, dukky_html_table_cell_element_chOff_setter, 1); duk_def_prop(ctx, -4, DUK_DEFPROP_HAVE_GETTER | DUK_DEFPROP_HAVE_SETTER | DUK_DEFPROP_HAVE_ENUMERABLE | DUK_DEFPROP_ENUMERABLE | DUK_DEFPROP_HAVE_CONFIGURABLE); duk_pop(ctx); /* Add read/write property */ duk_dup(ctx, 0); duk_push_string(ctx, "noWrap"); duk_push_c_function(ctx, dukky_html_table_cell_element_noWrap_getter, 0); duk_push_c_function(ctx, dukky_html_table_cell_element_noWrap_setter, 1); duk_def_prop(ctx, -4, DUK_DEFPROP_HAVE_GETTER | DUK_DEFPROP_HAVE_SETTER | DUK_DEFPROP_HAVE_ENUMERABLE | DUK_DEFPROP_ENUMERABLE | DUK_DEFPROP_HAVE_CONFIGURABLE); duk_pop(ctx); /* Add read/write property */ duk_dup(ctx, 0); duk_push_string(ctx, "vAlign"); duk_push_c_function(ctx, dukky_html_table_cell_element_vAlign_getter, 0); duk_push_c_function(ctx, dukky_html_table_cell_element_vAlign_setter, 1); duk_def_prop(ctx, -4, DUK_DEFPROP_HAVE_GETTER | DUK_DEFPROP_HAVE_SETTER | DUK_DEFPROP_HAVE_ENUMERABLE | DUK_DEFPROP_ENUMERABLE | DUK_DEFPROP_HAVE_CONFIGURABLE); duk_pop(ctx); /* Add read/write property */ duk_dup(ctx, 0); duk_push_string(ctx, "bgColor"); duk_push_c_function(ctx, dukky_html_table_cell_element_bgColor_getter, 0); duk_push_c_function(ctx, dukky_html_table_cell_element_bgColor_setter, 1); duk_def_prop(ctx, -4, DUK_DEFPROP_HAVE_GETTER | DUK_DEFPROP_HAVE_SETTER | DUK_DEFPROP_HAVE_ENUMERABLE | DUK_DEFPROP_ENUMERABLE | DUK_DEFPROP_HAVE_CONFIGURABLE); duk_pop(ctx); /* Set the destructor */ duk_dup(ctx, 0); duk_push_c_function(ctx, dukky_html_table_cell_element___destructor, 1); duk_set_finalizer(ctx, -2); duk_pop(ctx); /* Set the constructor */ duk_dup(ctx, 0); duk_push_c_function(ctx, dukky_html_table_cell_element___constructor, 2); duk_put_prop_string(ctx, -2, "\xFF\xFFNETSURF_DUKTAPE_INIT"); duk_pop(ctx); return 1; /* The prototype object */ }
//void duk_set_finalizer(duk_context *ctx, duk_idx_t index); void aperl_duk_set_finalizer(duk_context *ctx, duk_idx_t index) { duk_set_finalizer(ctx, index); }