这篇教程C++ DUK_UNREF函数代码示例写得很实用,希望能帮到您。
本文整理汇总了C++中DUK_UNREF函数的典型用法代码示例。如果您正苦于以下问题:C++ DUK_UNREF函数的具体用法?C++ DUK_UNREF怎么用?C++ DUK_UNREF使用的例子?那么恭喜您, 这里精选的函数代码示例或许可以为您提供帮助。 在下文中一共展示了DUK_UNREF函数的30个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于我们的系统推荐出更棒的C++代码示例。 示例1: duk_default_panic_handlerDUK_INTERNAL void duk_default_panic_handler(duk_errcode_t code, const char *msg) {#ifdef DUK_USE_FILE_IO DUK_FPRINTF(DUK_STDERR, "PANIC %ld: %s ("#if defined(DUK_USE_PANIC_ABORT) "calling abort"#elif defined(DUK_USE_PANIC_EXIT) "calling exit"#elif defined(DUK_USE_PANIC_SEGFAULT) "segfaulting on purpose"#else#error no DUK_USE_PANIC_xxx macro defined#endif ")/n", (long) code, (const char *) (msg ? msg : "null")); DUK_FFLUSH(DUK_STDERR);#else /* omit print */ DUK_UNREF(code); DUK_UNREF(msg);#endif#if defined(DUK_USE_PANIC_ABORT) DUK_ABORT();#elif defined(DUK_USE_PANIC_EXIT) DUK_EXIT(-1);#elif defined(DUK_USE_PANIC_SEGFAULT) /* exit() afterwards to satisfy "noreturn" */ DUK_CAUSE_SEGFAULT(); /* SCANBUILD: "Dereference of null pointer", normal */ DUK_EXIT(-1);#else#error no DUK_USE_PANIC_xxx macro defined#endif DUK_UNREACHABLE();}
开发者ID:CarterTsai,项目名称:duktape,代码行数:34,
示例2: duk__free_hobject_innerstatic void duk__free_hobject_inner(duk_heap *heap, duk_hobject *h) { DUK_ASSERT(heap != NULL); DUK_ASSERT(h != NULL); DUK_FREE(heap, h->p); if (DUK_HOBJECT_IS_COMPILEDFUNCTION(h)) { duk_hcompiledfunction *f = (duk_hcompiledfunction *) h; DUK_UNREF(f); /* Currently nothing to free; 'data' is a heap object */ } else if (DUK_HOBJECT_IS_NATIVEFUNCTION(h)) { duk_hnativefunction *f = (duk_hnativefunction *) h; DUK_UNREF(f); /* Currently nothing to free */ } else if (DUK_HOBJECT_IS_THREAD(h)) { duk_hthread *t = (duk_hthread *) h; DUK_FREE(heap, t->valstack); DUK_FREE(heap, t->callstack); DUK_FREE(heap, t->catchstack); /* Don't free h->resumer because it exists in the heap. * Callstack entries also contain function pointers which * are not freed for the same reason. */ /* XXX: with 'caller' property the callstack would need * to be unwound to update the 'caller' properties of * functions in the callstack. */ }}
开发者ID:rockybars,项目名称:duktape,代码行数:30,
示例3: duk__mark_hstringDUK_LOCAL void duk__mark_hstring(duk_heap *heap, duk_hstring *h) { DUK_UNREF(heap); DUK_UNREF(h); DUK_DDD(DUK_DDDPRINT("duk__mark_hstring: %p", (void *) h)); DUK_ASSERT(h); /* nothing to process */}
开发者ID:harold-b,项目名称:duktape,代码行数:9,
示例4: duk_free_hstring_innerDUK_INTERNAL void duk_free_hstring_inner(duk_heap *heap, duk_hstring *h) { DUK_ASSERT(heap != NULL); DUK_ASSERT(h != NULL); DUK_UNREF(heap); DUK_UNREF(h);#if defined(DUK_USE_HSTRING_EXTDATA) && defined(DUK_USE_EXTSTR_FREE) if (DUK_HSTRING_HAS_EXTDATA(h)) { DUK_DDD(DUK_DDDPRINT("free extstr: hstring %!O, extdata: %p", h, DUK_HSTRING_GET_EXTDATA((duk_hstring_external *) h))); DUK_USE_EXTSTR_FREE((const void *) DUK_HSTRING_GET_EXTDATA((duk_hstring_external *) h)); }#endif}
开发者ID:CarterTsai,项目名称:duktape,代码行数:15,
示例5: duk_bi_object_getprototype_shared/* Shared helper to implement Object.getPrototypeOf and the ES6 * Object.prototype.__proto__ getter. * * http://www.ecma-international.org/ecma-262/6.0/index.html#sec-get-object.prototype.__proto__ */DUK_INTERNAL duk_ret_t duk_bi_object_getprototype_shared(duk_context *ctx) { duk_hthread *thr = (duk_hthread *) ctx; duk_hobject *h; duk_hobject *proto; DUK_UNREF(thr); /* magic: 0=getter call, 1=Object.getPrototypeOf */ if (duk_get_current_magic(ctx) == 0) { duk_push_this_coercible_to_object(ctx); duk_insert(ctx, 0); } h = duk_require_hobject_or_lfunc(ctx, 0); /* h is NULL for lightfunc */ /* XXX: should the API call handle this directly, i.e. attempt * to duk_push_hobject(ctx, null) would push a null instead? * (On the other hand 'undefined' would be just as logical, but * not wanted here.) */ if (h == NULL) { duk_push_hobject_bidx(ctx, DUK_BIDX_FUNCTION_PROTOTYPE); } else { proto = DUK_HOBJECT_GET_PROTOTYPE(thr->heap, h); if (proto) { duk_push_hobject(ctx, proto); } else { duk_push_null(ctx); } } return 1;}
开发者ID:BaroboRobotics,项目名称:civetweb,代码行数:39,
示例6: duk_components_to_timeDUK_EXTERNAL duk_double_t duk_components_to_time(duk_context *ctx, duk_time_components *comp) { duk_double_t d; duk_double_t dparts[DUK_DATE_IDX_NUM_PARTS]; duk_uint_t flags; DUK_ASSERT(ctx != NULL); DUK_ASSERT(comp != NULL); /* XXX: or check? */ DUK_UNREF(ctx); /* Match Date constructor behavior (with UTC time). Month is given * as zero-based. Day-of-month is given as one-based so normalize * it to zero-based as the internal conversion helpers expects all * components to be zero-based. */ flags = 0; /* XXX: expensive conversion; use array format in API instead, or unify * time provider and time API to use same struct? */ dparts[DUK_DATE_IDX_YEAR] = comp->year; dparts[DUK_DATE_IDX_MONTH] = comp->month; dparts[DUK_DATE_IDX_DAY] = comp->day - 1.0; dparts[DUK_DATE_IDX_HOUR] = comp->hours; dparts[DUK_DATE_IDX_MINUTE] = comp->minutes; dparts[DUK_DATE_IDX_SECOND] = comp->seconds; dparts[DUK_DATE_IDX_MILLISECOND] = comp->milliseconds; dparts[DUK_DATE_IDX_WEEKDAY] = 0; /* ignored */ d = duk_bi_date_get_timeval_from_dparts(dparts, flags); return d;}
开发者ID:harold-b,项目名称:duktape,代码行数:33,
示例7: duk_time_to_componentsDUK_EXTERNAL void duk_time_to_components(duk_context *ctx, duk_double_t timeval, duk_time_components *comp) { duk_int_t parts[DUK_DATE_IDX_NUM_PARTS]; duk_double_t dparts[DUK_DATE_IDX_NUM_PARTS]; duk_uint_t flags; DUK_ASSERT(ctx != NULL); DUK_ASSERT(comp != NULL); /* XXX: or check? */ DUK_UNREF(ctx); /* Convert as one-based, but change month to zero-based to match the * Ecmascript Date built-in behavior 1:1. */ flags = DUK_DATE_FLAG_ONEBASED | DUK_DATE_FLAG_NAN_TO_ZERO; duk_bi_date_timeval_to_parts(timeval, parts, dparts, flags); DUK_ASSERT(dparts[DUK_DATE_IDX_MONTH] >= 1.0 && dparts[DUK_DATE_IDX_MONTH] <= 12.0); comp->year = dparts[DUK_DATE_IDX_YEAR]; comp->month = dparts[DUK_DATE_IDX_MONTH] - 1.0; comp->day = dparts[DUK_DATE_IDX_DAY]; comp->hours = dparts[DUK_DATE_IDX_HOUR]; comp->minutes = dparts[DUK_DATE_IDX_MINUTE]; comp->seconds = dparts[DUK_DATE_IDX_SECOND]; comp->milliseconds = dparts[DUK_DATE_IDX_MILLISECOND]; comp->weekday = dparts[DUK_DATE_IDX_WEEKDAY];}
开发者ID:harold-b,项目名称:duktape,代码行数:26,
示例8: duk_debugger_cooperateDUK_EXTERNAL void duk_debugger_cooperate(duk_context *ctx) { duk_hthread *thr; duk_bool_t processed_messages; thr = (duk_hthread *) ctx; DUK_ASSERT(ctx != NULL); DUK_ASSERT(thr != NULL); DUK_ASSERT(thr->heap != NULL); if (!DUK_HEAP_IS_DEBUGGER_ATTACHED(thr->heap)) { return; } if (thr->callstack_top > 0 || thr->heap->dbg_processing) { /* Calling duk_debugger_cooperate() while Duktape is being * called into is not supported. This is not a 100% check * but prevents any damage in most cases. */ return; } thr->heap->dbg_processing = 1; processed_messages = duk_debug_process_messages(thr, 1 /*no_block*/); thr->heap->dbg_processing = 0; DUK_UNREF(processed_messages);}
开发者ID:CoryXie,项目名称:duktape,代码行数:25,
示例9: duk__finalize_helperDUK_LOCAL duk_ret_t duk__finalize_helper(duk_context *ctx, void *udata) { duk_hthread *thr; DUK_ASSERT(ctx != NULL); thr = (duk_hthread *) ctx; DUK_UNREF(udata); DUK_DDD(DUK_DDDPRINT("protected finalization helper running")); /* [... obj] */ /* XXX: Finalizer lookup should traverse the prototype chain (to allow * inherited finalizers) but should not invoke accessors or proxy object * behavior. At the moment this lookup will invoke proxy behavior, so * caller must ensure that this function is not called if the target is * a Proxy. */ duk_get_prop_stridx_short(ctx, -1, DUK_STRIDX_INT_FINALIZER); /* -> [... obj finalizer] */ if (!duk_is_callable(ctx, -1)) { DUK_DDD(DUK_DDDPRINT("-> no finalizer or finalizer not callable")); return 0; } duk_dup_m2(ctx); duk_push_boolean(ctx, DUK_HEAP_HAS_FINALIZER_NORESCUE(thr->heap)); DUK_DDD(DUK_DDDPRINT("-> finalizer found, calling finalizer")); duk_call(ctx, 2); /* [ ... obj finalizer obj heapDestruct ] -> [ ... obj retval ] */ DUK_DDD(DUK_DDDPRINT("finalizer finished successfully")); return 0; /* Note: we rely on duk_safe_call() to fix up the stack for the caller, * so we don't need to pop stuff here. There is no return value; * caller determines rescued status based on object refcount. */}
开发者ID:harold-b,项目名称:duktape,代码行数:35,
示例10: duk_bi_error_prototype_nop_setterint duk_bi_error_prototype_nop_setter(duk_context *ctx) { /* Attempt to write 'stack', 'fileName', 'lineNumber' is a silent no-op. * User can use Object.defineProperty() to override this behavior. */ DUK_ASSERT_TOP(ctx, 1); /* fixed arg count */ DUK_UNREF(ctx); return 0;}
开发者ID:alwayrun,项目名称:duktape,代码行数:8,
示例11: duk__protected_compact_objectDUK_LOCAL int duk__protected_compact_object(duk_context *ctx, void *udata) { duk_hobject *obj; /* XXX: for threads, compact value stack, call stack, catch stack? */ DUK_UNREF(udata); obj = duk_known_hobject(ctx, -1); duk_hobject_compact_props((duk_hthread *) ctx, obj); return 0;}
开发者ID:harold-b,项目名称:duktape,代码行数:9,
示例12: duk__get_this_regexpDUK_LOCAL void duk__get_this_regexp(duk_hthread *thr) { duk_hobject *h; duk_push_this(thr); h = duk_require_hobject_with_class(thr, -1, DUK_HOBJECT_CLASS_REGEXP); DUK_ASSERT(h != NULL); DUK_UNREF(h); duk_insert(thr, 0); /* prepend regexp to valstack 0 index */}
开发者ID:fatcerberus,项目名称:duktape,代码行数:9,
示例13: duk_bi_logger_prototype_raw/* Default function to write a formatted log line. Writes to stderr, * appending a newline to the log line. * * The argument is a buffer whose visible size contains the log message. * This function should avoid coercing the buffer to a string to avoid * string table traffic. */DUK_INTERNAL duk_ret_t duk_bi_logger_prototype_raw(duk_context *ctx) { const char *data; duk_size_t data_len; DUK_UNREF(ctx); DUK_UNREF(data); DUK_UNREF(data_len);#ifdef DUK_USE_FILE_IO data = (const char *) duk_require_buffer(ctx, 0, &data_len); DUK_FWRITE((const void *) data, 1, data_len, DUK_STDERR); DUK_FPUTC((int) '/n', DUK_STDERR); DUK_FFLUSH(DUK_STDERR);#else /* nop */#endif return 0;}
开发者ID:bihai,项目名称:duk4vb,代码行数:25,
示例14: DUK_ASSERT /* * String comparison (E5 Section 11.8.5, step 4), which * needs to compare codepoint by codepoint. * * However, UTF-8 allows us to use strcmp directly: the shared * prefix will be encoded identically (UTF-8 has unique encoding) * and the first differing character can be compared with a simple * unsigned byte comparison (which strcmp does). * * This will not work properly for non-xutf-8 strings, but this * is not an issue for compliance. */ DUK_ASSERT(h1 != NULL); DUK_ASSERT(h2 != NULL); return duk_js_data_compare((const duk_uint8_t *) DUK_HSTRING_GET_DATA(h1), (const duk_uint8_t *) DUK_HSTRING_GET_DATA(h2), (duk_size_t) DUK_HSTRING_GET_BYTELEN(h1), (duk_size_t) DUK_HSTRING_GET_BYTELEN(h2));}#if 0 /* unused */DUK_INTERNAL duk_small_int_t duk_js_buffer_compare(duk_heap *heap, duk_hbuffer *h1, duk_hbuffer *h2) { /* Similar to String comparison. */ DUK_ASSERT(h1 != NULL); DUK_ASSERT(h2 != NULL); DUK_UNREF(heap); return duk_js_data_compare((const duk_uint8_t *) DUK_HBUFFER_GET_DATA_PTR(heap, h1), (const duk_uint8_t *) DUK_HBUFFER_GET_DATA_PTR(heap, h2), (duk_size_t) DUK_HBUFFER_GET_SIZE(h1), (duk_size_t) DUK_HBUFFER_GET_SIZE(h2));}
开发者ID:3009420,项目名称:civetweb,代码行数:35,
示例15: duk_default_fatal_handlerDUK_INTERNAL void duk_default_fatal_handler(duk_context *ctx, duk_errcode_t code, const char *msg) { DUK_UNREF(ctx);#ifdef DUK_USE_FILE_IO DUK_FPRINTF(DUK_STDERR, "FATAL %ld: %s/n", (long) code, (const char *) (msg ? msg : "null")); DUK_FFLUSH(DUK_STDERR);#else /* omit print */#endif DUK_D(DUK_DPRINT("default fatal handler called, code %ld -> calling DUK_PANIC()", (long) code)); DUK_PANIC(code, msg); DUK_UNREACHABLE();}
开发者ID:CarterTsai,项目名称:duktape,代码行数:12,
示例16: duk_heap_force_strtab_resizeDUK_INTERNAL void duk_heap_force_strtab_resize(duk_heap *heap) { /* Force a resize so that DELETED entries are eliminated. * Another option would be duk__recheck_strtab_size_probe(); * but since that happens on every intern anyway, this whole * check can now be disabled. */#if defined(DUK_USE_STRTAB_CHAIN) DUK_UNREF(heap);#elif defined(DUK_USE_STRTAB_PROBE) duk__resize_strtab_probe(heap);#endif}
开发者ID:alexdundes,项目名称:duktape,代码行数:12,
示例17: duk__run_voluntary_gcDUK_LOCAL void duk__run_voluntary_gc(duk_heap *heap) { if (DUK_HEAP_HAS_MARKANDSWEEP_RUNNING(heap)) { DUK_DD(DUK_DDPRINT("mark-and-sweep in progress -> skip voluntary mark-and-sweep now")); } else { duk_small_uint_t flags; duk_bool_t rc; DUK_D(DUK_DPRINT("triggering voluntary mark-and-sweep")); flags = 0; rc = duk_heap_mark_and_sweep(heap, flags); DUK_UNREF(rc); }}
开发者ID:harold-b,项目名称:duktape,代码行数:13,
示例18: free_hobject_innerstatic void free_hobject_inner(duk_heap *heap, duk_hobject *h) { DUK_ASSERT(heap != NULL); DUK_ASSERT(h != NULL); DUK_FREE(heap, h->p); if (DUK_HOBJECT_IS_COMPILEDFUNCTION(h)) { duk_hcompiledfunction *f = (duk_hcompiledfunction *) h; DUK_UNREF(f); /* Currently nothing to free; 'data' is a heap object */ } else if (DUK_HOBJECT_IS_NATIVEFUNCTION(h)) { duk_hnativefunction *f = (duk_hnativefunction *) h; DUK_UNREF(f); /* Currently nothing to free */ } else if (DUK_HOBJECT_IS_THREAD(h)) { duk_hthread *t = (duk_hthread *) h; DUK_FREE(heap, t->valstack); DUK_FREE(heap, t->callstack); DUK_FREE(heap, t->catchstack); /* don't free h->resumer, because it exists in the heap */ }}
开发者ID:ndob,项目名称:duktape,代码行数:22,
示例19: duk__dump_indentedDUK_LOCAL void duk__dump_indented(duk_heaphdr *obj, int index) { DUK_UNREF(obj); DUK_UNREF(index); DUK_UNREF(duk__get_heap_type_string);#ifdef DUK_USE_REFERENCE_COUNTING DUK_D(DUK_DPRINT(" [%ld]: %p %s (flags: 0x%08lx, ref: %ld) -> %!O", (long) index, (void *) obj, (const char *) duk__get_heap_type_string(obj), (unsigned long) DUK_HEAPHDR_GET_FLAGS(obj), (long) DUK_HEAPHDR_GET_REFCOUNT(obj), (duk_heaphdr *) obj));#else DUK_D(DUK_DPRINT(" [%ld]: %p %s (flags: 0x%08lx) -> %!O", (long) index, (void *) obj, (const char *) duk__get_heap_type_string(obj), (unsigned long) DUK_HEAPHDR_GET_FLAGS(obj), (duk_heaphdr *) obj));#endif}
开发者ID:bihai,项目名称:duk4vb,代码行数:22,
示例20: duk__refcount_fake_finalizerDUK_LOCAL duk_ret_t duk__refcount_fake_finalizer(duk_context *ctx) { DUK_UNREF(ctx); DUK_D(DUK_DPRINT("fake refcount torture finalizer executed"));#if 0 DUK_DD(DUK_DDPRINT("fake torture finalizer for: %!T", duk_get_tval(ctx, 0)));#endif /* Require a lot of stack to force a value stack grow/shrink. */ duk_require_stack(ctx, 100000); /* XXX: do something to force a callstack grow/shrink, perhaps * just a manual forced resize? */ return 0;}
开发者ID:alexdundes,项目名称:duktape,代码行数:14,
示例21: duk_gcDUK_EXTERNAL void duk_gc(duk_context *ctx, duk_uint_t flags) {#ifdef DUK_USE_MARK_AND_SWEEP duk_hthread *thr = (duk_hthread *) ctx; duk_heap *heap; DUK_UNREF(flags); /* NULL accepted */ if (!ctx) { return; } DUK_ASSERT_CTX_VALID(ctx); heap = thr->heap; DUK_ASSERT(heap != NULL); DUK_D(DUK_DPRINT("mark-and-sweep requested by application")); duk_heap_mark_and_sweep(heap, 0);#else DUK_D(DUK_DPRINT("mark-and-sweep requested by application but mark-and-sweep not enabled, ignoring")); DUK_UNREF(ctx); DUK_UNREF(flags);#endif}
开发者ID:3009420,项目名称:civetweb,代码行数:23,
示例22: duk_hthread_get_act_curr_pcDUK_INTERNAL duk_uint_fast32_t duk_hthread_get_act_curr_pc(duk_hthread *thr, duk_activation *act) { duk_instr_t *bcode; DUK_ASSERT(thr != NULL); DUK_ASSERT(act != NULL); DUK_UNREF(thr); /* XXX: store 'bcode' pointer to activation for faster lookup? */ if (act->func && DUK_HOBJECT_IS_COMPFUNC(act->func)) { bcode = DUK_HCOMPFUNC_GET_CODE_BASE(thr->heap, (duk_hcompfunc *) (act->func)); return (duk_uint_fast32_t) (act->curr_pc - bcode); } return 0;}
开发者ID:zimbabao,项目名称:duktape,代码行数:14,
示例23: duk__compact_object_listDUK_LOCAL void duk__compact_object_list(duk_heap *heap, duk_hthread *thr, duk_heaphdr *start, duk_size_t *p_count_check, duk_size_t *p_count_compact, duk_size_t *p_count_bytes_saved) {#elseDUK_LOCAL void duk__compact_object_list(duk_heap *heap, duk_hthread *thr, duk_heaphdr *start) {#endif duk_heaphdr *curr;#if defined(DUK_USE_DEBUG) duk_size_t old_size, new_size;#endif duk_hobject *obj; DUK_UNREF(heap); curr = start; while (curr) { DUK_DDD(DUK_DDDPRINT("mark-and-sweep compact: %p", (void *) curr)); if (DUK_HEAPHDR_GET_TYPE(curr) != DUK_HTYPE_OBJECT) { goto next; } obj = (duk_hobject *) curr;#if defined(DUK_USE_DEBUG) old_size = DUK_HOBJECT_P_COMPUTE_SIZE(DUK_HOBJECT_GET_ESIZE(obj), DUK_HOBJECT_GET_ASIZE(obj), DUK_HOBJECT_GET_HSIZE(obj));#endif DUK_DD(DUK_DDPRINT("compact object: %p", (void *) obj)); duk_push_hobject((duk_context *) thr, obj); /* XXX: disable error handlers for duration of compaction? */ duk_safe_call((duk_context *) thr, duk__protected_compact_object, NULL, 1, 0);#if defined(DUK_USE_DEBUG) new_size = DUK_HOBJECT_P_COMPUTE_SIZE(DUK_HOBJECT_GET_ESIZE(obj), DUK_HOBJECT_GET_ASIZE(obj), DUK_HOBJECT_GET_HSIZE(obj));#endif#if defined(DUK_USE_DEBUG) (*p_count_compact)++; (*p_count_bytes_saved) += (duk_size_t) (old_size - new_size);#endif next: curr = DUK_HEAPHDR_GET_NEXT(heap, curr);#if defined(DUK_USE_DEBUG) (*p_count_check)++;#endif }}
开发者ID:harold-b,项目名称:duktape,代码行数:50,
示例24: duk__err_augment_builtin_createDUK_LOCAL void duk__err_augment_builtin_create(duk_hthread *thr, duk_hthread *thr_callstack, const char *c_filename, duk_int_t c_line, duk_small_int_t noblame_fileline, duk_hobject *obj) { duk_context *ctx = (duk_context *) thr;#if defined(DUK_USE_ASSERTIONS) duk_int_t entry_top;#endif#if defined(DUK_USE_ASSERTIONS) entry_top = duk_get_top(ctx);#endif DUK_ASSERT(obj != NULL); DUK_UNREF(obj); /* unreferenced w/o tracebacks */ DUK_UNREF(ctx); /* unreferenced w/o asserts */ duk__add_compiler_error_line(thr);#if defined(DUK_USE_TRACEBACKS) /* If tracebacks are enabled, the '_Tracedata' property is the only * thing we need: 'fileName' and 'lineNumber' are virtual properties * which use '_Tracedata'. */ if (duk_hobject_hasprop_raw(thr, obj, DUK_HTHREAD_STRING_INT_TRACEDATA(thr))) { DUK_DDD(DUK_DDDPRINT("error value already has a '_Tracedata' property, not modifying it")); } else { duk__add_traceback(thr, thr_callstack, c_filename, c_line, noblame_fileline); }#else /* Without tracebacks the concrete .fileName and .lineNumber need * to be added directly. */ duk__add_fileline(thr, thr_callstack, c_filename, c_line, noblame_fileline);#endif#if defined(DUK_USE_ASSERTIONS) DUK_ASSERT(duk_get_top(ctx) == entry_top);#endif}
开发者ID:OakLabsInc,项目名称:duktape,代码行数:37,
示例25: duk__call_errhandlerstatic void duk__call_errhandler(duk_hthread *thr) { int call_flags; int rc; DUK_ASSERT(thr != NULL); DUK_ASSERT(thr->heap != NULL); if (!thr->heap->lj.errhandler) { DUK_DDDPRINT("no errhandler, return"); return; } /* FIXME: assert/require for valstack space */ /* [ ... errval ] */ DUK_DDDPRINT("errhandler is %p", (void *) thr->heap->lj.errhandler); DUK_DDDPRINT("errhandler dump: %!O", (duk_heaphdr *) thr->heap->lj.errhandler); duk_push_hobject((duk_context *) thr, thr->heap->lj.errhandler); duk_insert((duk_context *) thr, -2); /* -> [ ... errhandler errval ] */ duk_push_undefined((duk_context *) thr); duk_insert((duk_context *) thr, -2); /* -> [ ... errhandler undefined(= this) errval ] */ /* [ ... errhandler undefined errval ] */ /* * DUK_CALL_FLAG_IGNORE_RECLIMIT causes duk_handle_call() to ignore C * recursion depth limit (and won't increase it either). This is * dangerous, but useful because it allows an errhandler to run even * if the original error is caused by C recursion depth limit. Because * errhandler is NULL in the errhandler call, the errhandler call * can't cause the same situation to occur again. * * We ignore errors now: a success return and an error value both * replace the original error value. (This would be easy to change.) */ call_flags = DUK_CALL_FLAG_PROTECTED | DUK_CALL_FLAG_IGNORE_RECLIMIT; /* protected, ignore reclimit, not constructor */ rc = duk_handle_call(thr, 1, /* num args */ call_flags, /* call_flags */ NULL); /* errhandler */ DUK_UNREF(rc); /* no need to check now: both success and error are OK */ /* [ ... errval ] */}
开发者ID:BpLife,项目名称:duktape,代码行数:49,
示例26: duk_bi_date_format_parts_strftimeDUK_INTERNAL duk_bool_t duk_bi_date_format_parts_strftime(duk_context *ctx, duk_int_t *parts, duk_int_t tzoffset, duk_small_uint_t flags) { char buf[DUK__STRFTIME_BUF_SIZE]; struct tm tm; const char *fmt; DUK_UNREF(tzoffset); /* If the platform doesn't support the entire Ecmascript range, we need * to return 0 so that the caller can fall back to the default formatter. * * For now, assume that if time_t is 8 bytes or more, the whole Ecmascript * range is supported. For smaller time_t values (4 bytes in practice), * assumes that the signed 32-bit range is supported. * * XXX: detect this more correctly per platform. The size of time_t is * probably not an accurate guarantee of strftime() supporting or not * supporting a large time range (the full Ecmascript range). */ if (sizeof(time_t) < 8 && (parts[DUK_DATE_IDX_YEAR] < 1970 || parts[DUK_DATE_IDX_YEAR] > 2037)) { /* be paranoid for 32-bit time values (even avoiding negative ones) */ return 0; } DUK_MEMZERO(&tm, sizeof(tm)); tm.tm_sec = parts[DUK_DATE_IDX_SECOND]; tm.tm_min = parts[DUK_DATE_IDX_MINUTE]; tm.tm_hour = parts[DUK_DATE_IDX_HOUR]; tm.tm_mday = parts[DUK_DATE_IDX_DAY]; /* already one-based */ tm.tm_mon = parts[DUK_DATE_IDX_MONTH] - 1; /* one-based -> zero-based */ tm.tm_year = parts[DUK_DATE_IDX_YEAR] - 1900; tm.tm_wday = parts[DUK_DATE_IDX_WEEKDAY]; tm.tm_isdst = 0; DUK_MEMZERO(buf, sizeof(buf)); if ((flags & DUK_DATE_FLAG_TOSTRING_DATE) && (flags & DUK_DATE_FLAG_TOSTRING_TIME)) { fmt = "%c"; } else if (flags & DUK_DATE_FLAG_TOSTRING_DATE) { fmt = "%x"; } else { DUK_ASSERT(flags & DUK_DATE_FLAG_TOSTRING_TIME); fmt = "%X"; } (void) strftime(buf, sizeof(buf) - 1, fmt, &tm); DUK_ASSERT(buf[sizeof(buf) - 1] == 0); duk_push_string(ctx, buf); return 1;}
开发者ID:janneo,项目名称:duktape,代码行数:49,
示例27: duk_js_to_arrayindex_string_helper/* Called by duk_hstring.h macros */DUK_INTERNAL duk_uarridx_t duk_js_to_arrayindex_string_helper(duk_hstring *h) { duk_uarridx_t res; duk_small_int_t rc; if (!DUK_HSTRING_HAS_ARRIDX(h)) { return DUK_HSTRING_NO_ARRAY_INDEX; } rc = duk_js_to_arrayindex_raw_string(DUK_HSTRING_GET_DATA(h), DUK_HSTRING_GET_BYTELEN(h), &res); DUK_UNREF(rc); DUK_ASSERT(rc != 0); return res;}
开发者ID:bihai,项目名称:duk4vb,代码行数:16,
示例28: duk__sanitize_snippet/* * Debug dumping of duk_heap. */#include "duk_internal.h"#ifdef DUK_USE_DEBUG#if 0 /*unused*/DUK_LOCAL void duk__sanitize_snippet(char *buf, duk_size_t buf_size, duk_hstring *str) { duk_size_t i; duk_size_t nchars; duk_size_t maxchars; duk_uint8_t *data; DUK_MEMZERO(buf, buf_size); maxchars = (duk_size_t) (buf_size - 1); data = DUK_HSTRING_GET_DATA(str); nchars = ((duk_size_t) str->blen < maxchars ? (duk_size_t) str->blen : maxchars); for (i = 0; i < nchars; i++) { duk_small_int_t c = (duk_small_int_t) data[i]; if (c < 0x20 || c > 0x7e) { c = '.'; } buf[i] = (char) c; }}#endif#if 0DUK_LOCAL const char *duk__get_heap_type_string(duk_heaphdr *hdr) { switch (DUK_HEAPHDR_GET_TYPE(hdr)) { case DUK_HTYPE_STRING: return "string"; case DUK_HTYPE_OBJECT: return "object"; case DUK_HTYPE_BUFFER: return "buffer"; default: return "???"; }}#endif#if 0DUK_LOCAL void duk__dump_indented(duk_heaphdr *obj, int index) { DUK_UNREF(obj); DUK_UNREF(index); DUK_UNREF(duk__get_heap_type_string);#ifdef DUK_USE_REFERENCE_COUNTING DUK_D(DUK_DPRINT(" [%ld]: %p %s (flags: 0x%08lx, ref: %ld) -> %!O", (long) index, (void *) obj, (const char *) duk__get_heap_type_string(obj), (unsigned long) DUK_HEAPHDR_GET_FLAGS(obj), (long) DUK_HEAPHDR_GET_REFCOUNT(obj), (duk_heaphdr *) obj));#else DUK_D(DUK_DPRINT(" [%ld]: %p %s (flags: 0x%08lx) -> %!O", (long) index, (void *) obj, (const char *) duk__get_heap_type_string(obj), (unsigned long) DUK_HEAPHDR_GET_FLAGS(obj), (duk_heaphdr *) obj));#endif}#endif#if 0 /*unused*/DUK_LOCAL void duk__dump_heaphdr_list(duk_heap *heap, duk_heaphdr *root, const char *name) { duk_int_t count; duk_heaphdr *curr; DUK_UNREF(heap); DUK_UNREF(name); count = 0; curr = root; while (curr) { count++; curr = DUK_HEAPHDR_GET_NEXT(curr); } DUK_D(DUK_DPRINT("%s, %ld objects", (const char *) name, (long) count)); count = 0; curr = root; while (curr) { count++; duk__dump_indented(curr, count); curr = DUK_HEAPHDR_GET_NEXT(curr); }}
开发者ID:bihai,项目名称:duk4vb,代码行数:95,
示例29: duk_bi_duktape_object_gcduk_ret_t duk_bi_duktape_object_gc(duk_context *ctx) {#ifdef DUK_USE_MARK_AND_SWEEP duk_hthread *thr = (duk_hthread *) ctx; int flags; int rc; flags = duk_get_int(ctx, 0); rc = duk_heap_mark_and_sweep(thr->heap, flags); duk_push_int(ctx, rc); return 1;#else DUK_UNREF(ctx); return 0;#endif}
开发者ID:remoe,项目名称:duktape,代码行数:15,
示例30: duk_hobject_set_prototype_updrefDUK_INTERNAL void duk_hobject_set_prototype_updref(duk_hthread *thr, duk_hobject *h, duk_hobject *p) {#ifdef DUK_USE_REFERENCE_COUNTING duk_hobject *tmp; DUK_ASSERT(h); tmp = DUK_HOBJECT_GET_PROTOTYPE(thr->heap, h); DUK_HOBJECT_SET_PROTOTYPE(thr->heap, h, p); DUK_HOBJECT_INCREF_ALLOWNULL(thr, p); /* avoid problems if p == h->prototype */ DUK_HOBJECT_DECREF_ALLOWNULL(thr, tmp);#else DUK_ASSERT(h); DUK_UNREF(thr); DUK_HOBJECT_SET_PROTOTYPE(thr->heap, h, p);#endif}
开发者ID:BaroboRobotics,项目名称:civetweb,代码行数:15,
注:本文中的DUK_UNREF函数示例整理自Github/MSDocs等源码及文档管理平台,相关代码片段筛选自各路编程大神贡献的开源项目,源码版权归原作者所有,传播和使用请参考对应项目的License;未经允许,请勿转载。 C++ DUMP函数代码示例 C++ DUK_HSTRING_GET_BYTELEN函数代码示例 |