static void resolve_thenable_arg_dtor(void* data) { ResolveThenableTaskArg* arg = (ResolveThenableTaskArg*)data; /* unroot the arg's ejsvals */ _ejs_gc_remove_root(&arg->promiseToResolve); _ejs_gc_remove_root(&arg->thenable); _ejs_gc_remove_root(&arg->then); free (arg); }
static void reaction_arg_dtor(void* data) { ReactionTaskArg* arg = (ReactionTaskArg*)data; /* unroot the arg's ejsvals */ _ejs_gc_remove_root(&arg->reaction->handler); _ejs_gc_remove_root(&arg->reaction->capabilities); _ejs_gc_remove_root(&arg->arg); free (arg->reaction); free (arg); }
void _ejs_error_init(ejsval global) { ejsval toString = _ejs_function_new_native (_ejs_null, _ejs_atom_toString, (EJSClosureFunc)_ejs_Error_prototype_toString); _ejs_gc_add_root (&toString); #define EJS_ADD_NATIVE_ERROR_TYPE(err) EJS_MACRO_START \ _ejs_##err = _ejs_function_new_without_proto (_ejs_null, _ejs_atom_##err, (EJSClosureFunc)_ejs_##err##_impl); \ _ejs_object_setprop (global, _ejs_atom_##err, _ejs_##err); \ _ejs_##err##_prototype = _ejs_object_new(_ejs_null, &_ejs_Object_specops); \ _ejs_object_setprop (_ejs_##err, _ejs_atom_prototype, _ejs_##err##_prototype); \ _ejs_object_define_value_property (_ejs_##err##_prototype, _ejs_atom_constructor, _ejs_##err,\ EJS_PROP_NOT_ENUMERABLE | EJS_PROP_CONFIGURABLE | EJS_PROP_WRITABLE); \ \ _ejs_object_setprop (_ejs_##err##_prototype, _ejs_atom_name, _ejs_atom_##err); \ _ejs_object_setprop (_ejs_##err##_prototype, _ejs_atom_toString, toString); \ \ EJS_INSTALL_SYMBOL_FUNCTION_FLAGS (_ejs_##err, create, _ejs_Error_create, EJS_PROP_NOT_ENUMERABLE); \ EJS_MACRO_END EJS_ADD_NATIVE_ERROR_TYPE(Error); EJS_ADD_NATIVE_ERROR_TYPE(EvalError); EJS_ADD_NATIVE_ERROR_TYPE(RangeError); EJS_ADD_NATIVE_ERROR_TYPE(ReferenceError); EJS_ADD_NATIVE_ERROR_TYPE(SyntaxError); EJS_ADD_NATIVE_ERROR_TYPE(TypeError); EJS_ADD_NATIVE_ERROR_TYPE(URIError); _ejs_gc_remove_root (&toString); }
static void _ejs_exception_destructor(void *exc_gen) { struct ejs_exception *exc = (struct ejs_exception *)exc_gen; // remove the gc root for the throw exception _ejs_gc_remove_root (&exc->val); }