http://git-wip-us.apache.org/repos/asf/nifi-minifi-cpp/blob/ede68a10/thirdparty/civetweb-1.10/src/third_party/duktape-1.5.2/src-separate/duk_bi_logger.c ---------------------------------------------------------------------- diff --git a/thirdparty/civetweb-1.10/src/third_party/duktape-1.5.2/src-separate/duk_bi_logger.c b/thirdparty/civetweb-1.10/src/third_party/duktape-1.5.2/src-separate/duk_bi_logger.c deleted file mode 100644 index d2b89e5..0000000 --- a/thirdparty/civetweb-1.10/src/third_party/duktape-1.5.2/src-separate/duk_bi_logger.c +++ /dev/null @@ -1,300 +0,0 @@ -/* - * Logging support - */ - -#include "duk_internal.h" - -/* 3-letter log level strings */ -DUK_LOCAL const duk_uint8_t duk__log_level_strings[] = { - (duk_uint8_t) DUK_ASC_UC_T, (duk_uint8_t) DUK_ASC_UC_R, (duk_uint8_t) DUK_ASC_UC_C, - (duk_uint8_t) DUK_ASC_UC_D, (duk_uint8_t) DUK_ASC_UC_B, (duk_uint8_t) DUK_ASC_UC_G, - (duk_uint8_t) DUK_ASC_UC_I, (duk_uint8_t) DUK_ASC_UC_N, (duk_uint8_t) DUK_ASC_UC_F, - (duk_uint8_t) DUK_ASC_UC_W, (duk_uint8_t) DUK_ASC_UC_R, (duk_uint8_t) DUK_ASC_UC_N, - (duk_uint8_t) DUK_ASC_UC_E, (duk_uint8_t) DUK_ASC_UC_R, (duk_uint8_t) DUK_ASC_UC_R, - (duk_uint8_t) DUK_ASC_UC_F, (duk_uint8_t) DUK_ASC_UC_T, (duk_uint8_t) DUK_ASC_UC_L -}; - -/* Constructor */ -DUK_INTERNAL duk_ret_t duk_bi_logger_constructor(duk_context *ctx) { - duk_hthread *thr = (duk_hthread *) ctx; - duk_idx_t nargs; - - /* Calling as a non-constructor is not meaningful. */ - if (!duk_is_constructor_call(ctx)) { - return DUK_RET_TYPE_ERROR; - } - - nargs = duk_get_top(ctx); - duk_set_top(ctx, 1); - - duk_push_this(ctx); - - /* [ name this ] */ - - if (nargs == 0) { - /* Automatic defaulting of logger name from caller. This would - * work poorly with tail calls, but constructor calls are currently - * never tail calls, so tail calls are not an issue now. - */ - - if (thr->callstack_top >= 2) { - duk_activation *act_caller = thr->callstack + thr->callstack_top - 2; - duk_hobject *func_caller; - - func_caller = DUK_ACT_GET_FUNC(act_caller); - if (func_caller) { - /* Stripping the filename might be a good idea - * ("/foo/bar/quux.js" -> logger name "quux"), - * but now used verbatim. - */ - duk_push_hobject(ctx, func_caller); - duk_get_prop_stridx(ctx, -1, DUK_STRIDX_FILE_NAME); - duk_replace(ctx, 0); - } - } - } - /* the stack is unbalanced here on purpose; we only rely on the - * initial two values: [ name this ]. - */ - - if (duk_is_string(ctx, 0)) { - duk_dup(ctx, 0); - duk_put_prop_stridx(ctx, 1, DUK_STRIDX_LC_N); - } else { - /* don't set 'n' at all, inherited value is used as name */ - } - - duk_compact(ctx, 1); - - return 0; /* keep default instance */ -} - -/* Default function to format objects. Tries to use toLogString() but falls - * back to toString(). Any errors are propagated out without catching. - */ -DUK_INTERNAL duk_ret_t duk_bi_logger_prototype_fmt(duk_context *ctx) { - if (duk_get_prop_stridx(ctx, 0, DUK_STRIDX_TO_LOG_STRING)) { - /* [ arg toLogString ] */ - - duk_dup(ctx, 0); - duk_call_method(ctx, 0); - - /* [ arg result ] */ - return 1; - } - - /* [ arg undefined ] */ - duk_pop(ctx); - duk_to_string(ctx, 0); - return 1; -} - -/* 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; -} - -/* Log frontend shared helper, magic value indicates log level. Provides - * frontend functions: trace(), debug(), info(), warn(), error(), fatal(). - * This needs to have small footprint, reasonable performance, minimal - * memory churn, etc. - */ -DUK_INTERNAL duk_ret_t duk_bi_logger_prototype_log_shared(duk_context *ctx) { - duk_hthread *thr = (duk_hthread *) ctx; - duk_double_t now; - duk_small_int_t entry_lev = duk_get_current_magic(ctx); - duk_small_int_t logger_lev; - duk_int_t nargs; - duk_int_t i; - duk_size_t tot_len; - const duk_uint8_t *arg_str; - duk_size_t arg_len; - duk_uint8_t *buf, *p; - const duk_uint8_t *q; - duk_uint8_t date_buf[DUK_BI_DATE_ISO8601_BUFSIZE]; - duk_size_t date_len; - duk_small_int_t rc; - - DUK_ASSERT(entry_lev >= 0 && entry_lev <= 5); - DUK_UNREF(thr); - - /* XXX: sanitize to printable (and maybe ASCII) */ - /* XXX: better multiline */ - - /* - * Logger arguments are: - * - * magic: log level (0-5) - * this: logger - * stack: plain log args - * - * We want to minimize memory churn so a two-pass approach - * is used: first pass formats arguments and computes final - * string length, second pass copies strings either into a - * pre-allocated and reused buffer (short messages) or into a - * newly allocated fixed buffer. If the backend function plays - * nice, it won't coerce the buffer to a string (and thus - * intern it). - */ - - nargs = duk_get_top(ctx); - - /* [ arg1 ... argN this ] */ - - /* - * Log level check - */ - - duk_push_this(ctx); - - duk_get_prop_stridx(ctx, -1, DUK_STRIDX_LC_L); - logger_lev = (duk_small_int_t) duk_get_int(ctx, -1); - if (entry_lev < logger_lev) { - return 0; - } - /* log level could be popped but that's not necessary */ - - now = DUK_USE_DATE_GET_NOW(ctx); - duk_bi_date_format_timeval(now, date_buf); - date_len = DUK_STRLEN((const char *) date_buf); - - duk_get_prop_stridx(ctx, -2, DUK_STRIDX_LC_N); - duk_to_string(ctx, -1); - DUK_ASSERT(duk_is_string(ctx, -1)); - - /* [ arg1 ... argN this loggerLevel loggerName ] */ - - /* - * Pass 1 - */ - - /* Line format: <time> <entryLev> <loggerName>: <msg> */ - - tot_len = 0; - tot_len += 3 + /* separators: space, space, colon */ - 3 + /* level string */ - date_len + /* time */ - duk_get_length(ctx, -1); /* loggerName */ - - for (i = 0; i < nargs; i++) { - /* When formatting an argument to a string, errors may happen from multiple - * causes. In general we want to catch obvious errors like a toLogString() - * throwing an error, but we don't currently try to catch every possible - * error. In particular, internal errors (like out of memory or stack) are - * not caught. Also, we expect Error toString() to not throw an error. - */ - if (duk_is_object(ctx, i)) { - /* duk_pcall_prop() may itself throw an error, but we're content - * in catching the obvious errors (like toLogString() throwing an - * error). - */ - duk_push_hstring_stridx(ctx, DUK_STRIDX_FMT); - duk_dup(ctx, i); - /* [ arg1 ... argN this loggerLevel loggerName 'fmt' arg ] */ - /* call: this.fmt(arg) */ - rc = duk_pcall_prop(ctx, -5 /*obj_index*/, 1 /*nargs*/); - if (rc) { - /* Keep the error as the result (coercing it might fail below, - * but we don't catch that now). - */ - ; - } - duk_replace(ctx, i); - } - (void) duk_to_lstring(ctx, i, &arg_len); - tot_len++; /* sep (even before first one) */ - tot_len += arg_len; - } - - /* - * Pass 2 - */ - - /* XXX: There used to be a shared log buffer here, but it was removed - * when dynamic buffer spare was removed. The problem with using - * bufwriter is that, without the spare, the buffer gets passed on - * as an argument to the raw() call so it'd need to be resized - * (reallocated) anyway. If raw() call convention is changed, this - * could be made more efficient. - */ - - buf = (duk_uint8_t *) duk_push_fixed_buffer(ctx, tot_len); - DUK_ASSERT(buf != NULL); - p = buf; - - DUK_MEMCPY((void *) p, (const void *) date_buf, (size_t) date_len); - p += date_len; - *p++ = (duk_uint8_t) DUK_ASC_SPACE; - - q = duk__log_level_strings + (entry_lev * 3); - DUK_MEMCPY((void *) p, (const void *) q, (size_t) 3); - p += 3; - - *p++ = (duk_uint8_t) DUK_ASC_SPACE; - - arg_str = (const duk_uint8_t *) duk_get_lstring(ctx, -2, &arg_len); - DUK_MEMCPY((void *) p, (const void *) arg_str, (size_t) arg_len); - p += arg_len; - - *p++ = (duk_uint8_t) DUK_ASC_COLON; - - for (i = 0; i < nargs; i++) { - *p++ = (duk_uint8_t) DUK_ASC_SPACE; - - arg_str = (const duk_uint8_t *) duk_get_lstring(ctx, i, &arg_len); - DUK_ASSERT(arg_str != NULL); - DUK_MEMCPY((void *) p, (const void *) arg_str, (size_t) arg_len); - p += arg_len; - } - DUK_ASSERT(buf + tot_len == p); - - /* [ arg1 ... argN this loggerLevel loggerName buffer ] */ - -#if defined(DUK_USE_DEBUGGER_SUPPORT) && defined(DUK_USE_DEBUGGER_FWD_LOGGING) - /* Do debugger forwarding before raw() because the raw() function - * doesn't get the log level right now. - */ - if (DUK_HEAP_IS_DEBUGGER_ATTACHED(thr->heap)) { - const char *log_buf; - duk_size_t sz_buf; - log_buf = (const char *) duk_get_buffer(ctx, -1, &sz_buf); - DUK_ASSERT(log_buf != NULL); - duk_debug_write_notify(thr, DUK_DBG_CMD_LOG); - duk_debug_write_int(thr, (duk_int32_t) entry_lev); - duk_debug_write_string(thr, (const char *) log_buf, sz_buf); - duk_debug_write_eom(thr); - } -#endif - - /* Call this.raw(msg); look up through the instance allows user to override - * the raw() function in the instance or in the prototype for maximum - * flexibility. - */ - duk_push_hstring_stridx(ctx, DUK_STRIDX_RAW); - duk_dup(ctx, -2); - /* [ arg1 ... argN this loggerLevel loggerName buffer 'raw' buffer ] */ - duk_call_prop(ctx, -6, 1); /* this.raw(buffer) */ - - return 0; -}
http://git-wip-us.apache.org/repos/asf/nifi-minifi-cpp/blob/ede68a10/thirdparty/civetweb-1.10/src/third_party/duktape-1.5.2/src-separate/duk_bi_math.c ---------------------------------------------------------------------- diff --git a/thirdparty/civetweb-1.10/src/third_party/duktape-1.5.2/src-separate/duk_bi_math.c b/thirdparty/civetweb-1.10/src/third_party/duktape-1.5.2/src-separate/duk_bi_math.c deleted file mode 100644 index 62c9341..0000000 --- a/thirdparty/civetweb-1.10/src/third_party/duktape-1.5.2/src-separate/duk_bi_math.c +++ /dev/null @@ -1,348 +0,0 @@ -/* - * Math built-ins - */ - -#include "duk_internal.h" - -#if defined(DUK_USE_MATH_BUILTIN) - -/* - * Use static helpers which can work with math.h functions matching - * the following signatures. This is not portable if any of these math - * functions is actually a macro. - * - * Typing here is intentionally 'double' wherever values interact with - * the standard library APIs. - */ - -typedef double (*duk__one_arg_func)(double); -typedef double (*duk__two_arg_func)(double, double); - -DUK_LOCAL duk_ret_t duk__math_minmax(duk_context *ctx, duk_double_t initial, duk__two_arg_func min_max) { - duk_idx_t n = duk_get_top(ctx); - duk_idx_t i; - duk_double_t res = initial; - duk_double_t t; - - /* - * Note: fmax() does not match the E5 semantics. E5 requires - * that if -any- input to Math.max() is a NaN, the result is a - * NaN. fmax() will return a NaN only if -both- inputs are NaN. - * Same applies to fmin(). - * - * Note: every input value must be coerced with ToNumber(), even - * if we know the result will be a NaN anyway: ToNumber() may have - * side effects for which even order of evaluation matters. - */ - - for (i = 0; i < n; i++) { - t = duk_to_number(ctx, i); - if (DUK_FPCLASSIFY(t) == DUK_FP_NAN || DUK_FPCLASSIFY(res) == DUK_FP_NAN) { - /* Note: not normalized, but duk_push_number() will normalize */ - res = (duk_double_t) DUK_DOUBLE_NAN; - } else { - res = (duk_double_t) min_max(res, (double) t); - } - } - - duk_push_number(ctx, res); - return 1; -} - -DUK_LOCAL double duk__fmin_fixed(double x, double y) { - /* fmin() with args -0 and +0 is not guaranteed to return - * -0 as Ecmascript requires. - */ - if (x == 0 && y == 0) { - /* XXX: what's the safest way of creating a negative zero? */ - if (DUK_SIGNBIT(x) != 0 || DUK_SIGNBIT(y) != 0) { - return -0.0; - } else { - return +0.0; - } - } -#ifdef DUK_USE_MATH_FMIN - return DUK_FMIN(x, y); -#else - return (x < y ? x : y); -#endif -} - -DUK_LOCAL double duk__fmax_fixed(double x, double y) { - /* fmax() with args -0 and +0 is not guaranteed to return - * +0 as Ecmascript requires. - */ - if (x == 0 && y == 0) { - if (DUK_SIGNBIT(x) == 0 || DUK_SIGNBIT(y) == 0) { - return +0.0; - } else { - return -0.0; - } - } -#ifdef DUK_USE_MATH_FMAX - return DUK_FMAX(x, y); -#else - return (x > y ? x : y); -#endif -} - -DUK_LOCAL double duk__round_fixed(double x) { - /* Numbers half-way between integers must be rounded towards +Infinity, - * e.g. -3.5 must be rounded to -3 (not -4). When rounded to zero, zero - * sign must be set appropriately. E5.1 Section 15.8.2.15. - * - * Note that ANSI C round() is "round to nearest integer, away from zero", - * which is incorrect for negative values. Here we make do with floor(). - */ - - duk_small_int_t c = (duk_small_int_t) DUK_FPCLASSIFY(x); - if (c == DUK_FP_NAN || c == DUK_FP_INFINITE || c == DUK_FP_ZERO) { - return x; - } - - /* - * x is finite and non-zero - * - * -1.6 -> floor(-1.1) -> -2 - * -1.5 -> floor(-1.0) -> -1 (towards +Inf) - * -1.4 -> floor(-0.9) -> -1 - * -0.5 -> -0.0 (special case) - * -0.1 -> -0.0 (special case) - * +0.1 -> +0.0 (special case) - * +0.5 -> floor(+1.0) -> 1 (towards +Inf) - * +1.4 -> floor(+1.9) -> 1 - * +1.5 -> floor(+2.0) -> 2 (towards +Inf) - * +1.6 -> floor(+2.1) -> 2 - */ - - if (x >= -0.5 && x < 0.5) { - /* +0.5 is handled by floor, this is on purpose */ - if (x < 0.0) { - return -0.0; - } else { - return +0.0; - } - } - - return DUK_FLOOR(x + 0.5); -} - -DUK_LOCAL double duk__pow_fixed(double x, double y) { - /* The ANSI C pow() semantics differ from Ecmascript. - * - * E.g. when x==1 and y is +/- infinite, the Ecmascript required - * result is NaN, while at least Linux pow() returns 1. - */ - - duk_small_int_t cx, cy, sx; - - DUK_UNREF(cx); - DUK_UNREF(sx); - cy = (duk_small_int_t) DUK_FPCLASSIFY(y); - - if (cy == DUK_FP_NAN) { - goto ret_nan; - } - if (DUK_FABS(x) == 1.0 && cy == DUK_FP_INFINITE) { - goto ret_nan; - } -#if defined(DUK_USE_POW_NETBSD_WORKAROUND) - /* See test-bug-netbsd-math-pow.js: NetBSD 6.0 on x86 (at least) does not - * correctly handle some cases where x=+/-0. Specific fixes to these - * here. - */ - cx = (duk_small_int_t) DUK_FPCLASSIFY(x); - if (cx == DUK_FP_ZERO && y < 0.0) { - sx = (duk_small_int_t) DUK_SIGNBIT(x); - if (sx == 0) { - /* Math.pow(+0,y) should be Infinity when y<0. NetBSD pow() - * returns -Infinity instead when y is <0 and finite. The - * if-clause also catches y == -Infinity (which works even - * without the fix). - */ - return DUK_DOUBLE_INFINITY; - } else { - /* Math.pow(-0,y) where y<0 should be: - * - -Infinity if y<0 and an odd integer - * - Infinity otherwise - * NetBSD pow() returns -Infinity for all finite y<0. The - * if-clause also catches y == -Infinity (which works even - * without the fix). - */ - - /* fmod() return value has same sign as input (negative) so - * the result here will be in the range ]-2,0], 1 indicates - * odd. If x is -Infinity, NaN is returned and the odd check - * always concludes "not odd" which results in desired outcome. - */ - double tmp = DUK_FMOD(y, 2); - if (tmp == -1.0) { - return -DUK_DOUBLE_INFINITY; - } else { - /* Not odd, or y == -Infinity */ - return DUK_DOUBLE_INFINITY; - } - } - } -#endif - return DUK_POW(x, y); - - ret_nan: - return DUK_DOUBLE_NAN; -} - -/* Wrappers for calling standard math library methods. These may be required - * on platforms where one or more of the math built-ins are defined as macros - * or inline functions and are thus not suitable to be used as function pointers. - */ -#if defined(DUK_USE_AVOID_PLATFORM_FUNCPTRS) -DUK_LOCAL double duk__fabs(double x) { - return DUK_FABS(x); -} -DUK_LOCAL double duk__acos(double x) { - return DUK_ACOS(x); -} -DUK_LOCAL double duk__asin(double x) { - return DUK_ASIN(x); -} -DUK_LOCAL double duk__atan(double x) { - return DUK_ATAN(x); -} -DUK_LOCAL double duk__ceil(double x) { - return DUK_CEIL(x); -} -DUK_LOCAL double duk__cos(double x) { - return DUK_COS(x); -} -DUK_LOCAL double duk__exp(double x) { - return DUK_EXP(x); -} -DUK_LOCAL double duk__floor(double x) { - return DUK_FLOOR(x); -} -DUK_LOCAL double duk__log(double x) { - return DUK_LOG(x); -} -DUK_LOCAL double duk__sin(double x) { - return DUK_SIN(x); -} -DUK_LOCAL double duk__sqrt(double x) { - return DUK_SQRT(x); -} -DUK_LOCAL double duk__tan(double x) { - return DUK_TAN(x); -} -DUK_LOCAL double duk__atan2(double x, double y) { - return DUK_ATAN2(x, y); -} -#endif /* DUK_USE_AVOID_PLATFORM_FUNCPTRS */ - -/* order must match constants in genbuiltins.py */ -DUK_LOCAL const duk__one_arg_func duk__one_arg_funcs[] = { -#if defined(DUK_USE_AVOID_PLATFORM_FUNCPTRS) - duk__fabs, - duk__acos, - duk__asin, - duk__atan, - duk__ceil, - duk__cos, - duk__exp, - duk__floor, - duk__log, - duk__round_fixed, - duk__sin, - duk__sqrt, - duk__tan -#else - DUK_FABS, - DUK_ACOS, - DUK_ASIN, - DUK_ATAN, - DUK_CEIL, - DUK_COS, - DUK_EXP, - DUK_FLOOR, - DUK_LOG, - duk__round_fixed, - DUK_SIN, - DUK_SQRT, - DUK_TAN -#endif -}; - -/* order must match constants in genbuiltins.py */ -DUK_LOCAL const duk__two_arg_func duk__two_arg_funcs[] = { -#if defined(DUK_USE_AVOID_PLATFORM_FUNCPTRS) - duk__atan2, - duk__pow_fixed -#else - DUK_ATAN2, - duk__pow_fixed -#endif -}; - -DUK_INTERNAL duk_ret_t duk_bi_math_object_onearg_shared(duk_context *ctx) { - duk_small_int_t fun_idx = duk_get_current_magic(ctx); - duk__one_arg_func fun; - - DUK_ASSERT(fun_idx >= 0); - DUK_ASSERT(fun_idx < (duk_small_int_t) (sizeof(duk__one_arg_funcs) / sizeof(duk__one_arg_func))); - fun = duk__one_arg_funcs[fun_idx]; - duk_push_number(ctx, (duk_double_t) fun((double) duk_to_number(ctx, 0))); - return 1; -} - -DUK_INTERNAL duk_ret_t duk_bi_math_object_twoarg_shared(duk_context *ctx) { - duk_small_int_t fun_idx = duk_get_current_magic(ctx); - duk__two_arg_func fun; - - DUK_ASSERT(fun_idx >= 0); - DUK_ASSERT(fun_idx < (duk_small_int_t) (sizeof(duk__two_arg_funcs) / sizeof(duk__two_arg_func))); - fun = duk__two_arg_funcs[fun_idx]; - duk_push_number(ctx, (duk_double_t) fun((double) duk_to_number(ctx, 0), (double) duk_to_number(ctx, 1))); - return 1; -} - -DUK_INTERNAL duk_ret_t duk_bi_math_object_max(duk_context *ctx) { - return duk__math_minmax(ctx, -DUK_DOUBLE_INFINITY, duk__fmax_fixed); -} - -DUK_INTERNAL duk_ret_t duk_bi_math_object_min(duk_context *ctx) { - return duk__math_minmax(ctx, DUK_DOUBLE_INFINITY, duk__fmin_fixed); -} - -DUK_INTERNAL duk_ret_t duk_bi_math_object_random(duk_context *ctx) { - duk_push_number(ctx, (duk_double_t) duk_util_tinyrandom_get_double((duk_hthread *) ctx)); - return 1; -} - -#else /* DUK_USE_MATH_BUILTIN */ - -/* A stubbed built-in is useful for e.g. compilation torture testing with BCC. */ - -DUK_INTERNAL duk_ret_t duk_bi_math_object_onearg_shared(duk_context *ctx) { - DUK_UNREF(ctx); - return DUK_RET_UNIMPLEMENTED_ERROR; -} - -DUK_INTERNAL duk_ret_t duk_bi_math_object_twoarg_shared(duk_context *ctx) { - DUK_UNREF(ctx); - return DUK_RET_UNIMPLEMENTED_ERROR; -} - -DUK_INTERNAL duk_ret_t duk_bi_math_object_max(duk_context *ctx) { - DUK_UNREF(ctx); - return DUK_RET_UNIMPLEMENTED_ERROR; -} - -DUK_INTERNAL duk_ret_t duk_bi_math_object_min(duk_context *ctx) { - DUK_UNREF(ctx); - return DUK_RET_UNIMPLEMENTED_ERROR; -} - -DUK_INTERNAL duk_ret_t duk_bi_math_object_random(duk_context *ctx) { - DUK_UNREF(ctx); - return DUK_RET_UNIMPLEMENTED_ERROR; -} - -#endif /* DUK_USE_MATH_BUILTIN */ http://git-wip-us.apache.org/repos/asf/nifi-minifi-cpp/blob/ede68a10/thirdparty/civetweb-1.10/src/third_party/duktape-1.5.2/src-separate/duk_bi_number.c ---------------------------------------------------------------------- diff --git a/thirdparty/civetweb-1.10/src/third_party/duktape-1.5.2/src-separate/duk_bi_number.c b/thirdparty/civetweb-1.10/src/third_party/duktape-1.5.2/src-separate/duk_bi_number.c deleted file mode 100644 index 4b7abf5..0000000 --- a/thirdparty/civetweb-1.10/src/third_party/duktape-1.5.2/src-separate/duk_bi_number.c +++ /dev/null @@ -1,240 +0,0 @@ -/* - * Number built-ins - */ - -#include "duk_internal.h" - -DUK_LOCAL duk_double_t duk__push_this_number_plain(duk_context *ctx) { - duk_hobject *h; - - /* Number built-in accepts a plain number or a Number object (whose - * internal value is operated on). Other types cause TypeError. - */ - - duk_push_this(ctx); - if (duk_is_number(ctx, -1)) { - DUK_DDD(DUK_DDDPRINT("plain number value: %!T", (duk_tval *) duk_get_tval(ctx, -1))); - goto done; - } - h = duk_get_hobject(ctx, -1); - if (!h || - (DUK_HOBJECT_GET_CLASS_NUMBER(h) != DUK_HOBJECT_CLASS_NUMBER)) { - DUK_DDD(DUK_DDDPRINT("unacceptable this value: %!T", (duk_tval *) duk_get_tval(ctx, -1))); - DUK_ERROR_TYPE((duk_hthread *) ctx, "number expected"); - } - duk_get_prop_stridx(ctx, -1, DUK_STRIDX_INT_VALUE); - DUK_ASSERT(duk_is_number(ctx, -1)); - DUK_DDD(DUK_DDDPRINT("number object: %!T, internal value: %!T", - (duk_tval *) duk_get_tval(ctx, -2), (duk_tval *) duk_get_tval(ctx, -1))); - duk_remove(ctx, -2); - - done: - return duk_get_number(ctx, -1); -} - -DUK_INTERNAL duk_ret_t duk_bi_number_constructor(duk_context *ctx) { - duk_hthread *thr = (duk_hthread *) ctx; - duk_idx_t nargs; - duk_hobject *h_this; - - DUK_UNREF(thr); - - /* - * The Number constructor uses ToNumber(arg) for number coercion - * (coercing an undefined argument to NaN). However, if the - * argument is not given at all, +0 must be used instead. To do - * this, a vararg function is used. - */ - - nargs = duk_get_top(ctx); - if (nargs == 0) { - duk_push_int(ctx, 0); - } - duk_to_number(ctx, 0); - duk_set_top(ctx, 1); - DUK_ASSERT_TOP(ctx, 1); - - if (!duk_is_constructor_call(ctx)) { - return 1; - } - - /* - * E5 Section 15.7.2.1 requires that the constructed object - * must have the original Number.prototype as its internal - * prototype. However, since Number.prototype is non-writable - * and non-configurable, this doesn't have to be enforced here: - * The default object (bound to 'this') is OK, though we have - * to change its class. - * - * Internal value set to ToNumber(arg) or +0; if no arg given, - * ToNumber(undefined) = NaN, so special treatment is needed - * (above). String internal value is immutable. - */ - - /* XXX: helper */ - duk_push_this(ctx); - h_this = duk_get_hobject(ctx, -1); - DUK_ASSERT(h_this != NULL); - DUK_HOBJECT_SET_CLASS_NUMBER(h_this, DUK_HOBJECT_CLASS_NUMBER); - - DUK_ASSERT(DUK_HOBJECT_GET_PROTOTYPE(thr->heap, h_this) == thr->builtins[DUK_BIDX_NUMBER_PROTOTYPE]); - DUK_ASSERT(DUK_HOBJECT_GET_CLASS_NUMBER(h_this) == DUK_HOBJECT_CLASS_NUMBER); - DUK_ASSERT(DUK_HOBJECT_HAS_EXTENSIBLE(h_this)); - - duk_dup(ctx, 0); /* -> [ val obj val ] */ - duk_xdef_prop_stridx(ctx, -2, DUK_STRIDX_INT_VALUE, DUK_PROPDESC_FLAGS_NONE); - return 0; /* no return value -> don't replace created value */ -} - -DUK_INTERNAL duk_ret_t duk_bi_number_prototype_value_of(duk_context *ctx) { - (void) duk__push_this_number_plain(ctx); - return 1; -} - -DUK_INTERNAL duk_ret_t duk_bi_number_prototype_to_string(duk_context *ctx) { - duk_small_int_t radix; - duk_small_uint_t n2s_flags; - - (void) duk__push_this_number_plain(ctx); - if (duk_is_undefined(ctx, 0)) { - radix = 10; - } else { - radix = (duk_small_int_t) duk_to_int_check_range(ctx, 0, 2, 36); - } - DUK_DDD(DUK_DDDPRINT("radix=%ld", (long) radix)); - - n2s_flags = 0; - - duk_numconv_stringify(ctx, - radix /*radix*/, - 0 /*digits*/, - n2s_flags /*flags*/); - return 1; -} - -DUK_INTERNAL duk_ret_t duk_bi_number_prototype_to_locale_string(duk_context *ctx) { - /* XXX: just use toString() for now; permitted although not recommended. - * nargs==1, so radix is passed to toString(). - */ - return duk_bi_number_prototype_to_string(ctx); -} - -/* - * toFixed(), toExponential(), toPrecision() - */ - -/* XXX: shared helper for toFixed(), toExponential(), toPrecision()? */ - -DUK_INTERNAL duk_ret_t duk_bi_number_prototype_to_fixed(duk_context *ctx) { - duk_small_int_t frac_digits; - duk_double_t d; - duk_small_int_t c; - duk_small_uint_t n2s_flags; - - frac_digits = (duk_small_int_t) duk_to_int_check_range(ctx, 0, 0, 20); - d = duk__push_this_number_plain(ctx); - - c = (duk_small_int_t) DUK_FPCLASSIFY(d); - if (c == DUK_FP_NAN || c == DUK_FP_INFINITE) { - goto use_to_string; - } - - if (d >= 1.0e21 || d <= -1.0e21) { - goto use_to_string; - } - - n2s_flags = DUK_N2S_FLAG_FIXED_FORMAT | - DUK_N2S_FLAG_FRACTION_DIGITS; - - duk_numconv_stringify(ctx, - 10 /*radix*/, - frac_digits /*digits*/, - n2s_flags /*flags*/); - return 1; - - use_to_string: - DUK_ASSERT_TOP(ctx, 2); - duk_to_string(ctx, -1); - return 1; -} - -DUK_INTERNAL duk_ret_t duk_bi_number_prototype_to_exponential(duk_context *ctx) { - duk_bool_t frac_undefined; - duk_small_int_t frac_digits; - duk_double_t d; - duk_small_int_t c; - duk_small_uint_t n2s_flags; - - d = duk__push_this_number_plain(ctx); - - frac_undefined = duk_is_undefined(ctx, 0); - duk_to_int(ctx, 0); /* for side effects */ - - c = (duk_small_int_t) DUK_FPCLASSIFY(d); - if (c == DUK_FP_NAN || c == DUK_FP_INFINITE) { - goto use_to_string; - } - - frac_digits = (duk_small_int_t) duk_to_int_check_range(ctx, 0, 0, 20); - - n2s_flags = DUK_N2S_FLAG_FORCE_EXP | - (frac_undefined ? 0 : DUK_N2S_FLAG_FIXED_FORMAT); - - duk_numconv_stringify(ctx, - 10 /*radix*/, - frac_digits + 1 /*leading digit + fractions*/, - n2s_flags /*flags*/); - return 1; - - use_to_string: - DUK_ASSERT_TOP(ctx, 2); - duk_to_string(ctx, -1); - return 1; -} - -DUK_INTERNAL duk_ret_t duk_bi_number_prototype_to_precision(duk_context *ctx) { - /* The specification has quite awkward order of coercion and - * checks for toPrecision(). The operations below are a bit - * reordered, within constraints of observable side effects. - */ - - duk_double_t d; - duk_small_int_t prec; - duk_small_int_t c; - duk_small_uint_t n2s_flags; - - DUK_ASSERT_TOP(ctx, 1); - - d = duk__push_this_number_plain(ctx); - if (duk_is_undefined(ctx, 0)) { - goto use_to_string; - } - DUK_ASSERT_TOP(ctx, 2); - - duk_to_int(ctx, 0); /* for side effects */ - - c = (duk_small_int_t) DUK_FPCLASSIFY(d); - if (c == DUK_FP_NAN || c == DUK_FP_INFINITE) { - goto use_to_string; - } - - prec = (duk_small_int_t) duk_to_int_check_range(ctx, 0, 1, 21); - - n2s_flags = DUK_N2S_FLAG_FIXED_FORMAT | - DUK_N2S_FLAG_NO_ZERO_PAD; - - duk_numconv_stringify(ctx, - 10 /*radix*/, - prec /*digits*/, - n2s_flags /*flags*/); - return 1; - - use_to_string: - /* Used when precision is undefined; also used for NaN (-> "NaN"), - * and +/- infinity (-> "Infinity", "-Infinity"). - */ - - DUK_ASSERT_TOP(ctx, 2); - duk_to_string(ctx, -1); - return 1; -} http://git-wip-us.apache.org/repos/asf/nifi-minifi-cpp/blob/ede68a10/thirdparty/civetweb-1.10/src/third_party/duktape-1.5.2/src-separate/duk_bi_object.c ---------------------------------------------------------------------- diff --git a/thirdparty/civetweb-1.10/src/third_party/duktape-1.5.2/src-separate/duk_bi_object.c b/thirdparty/civetweb-1.10/src/third_party/duktape-1.5.2/src-separate/duk_bi_object.c deleted file mode 100644 index 28509ab..0000000 --- a/thirdparty/civetweb-1.10/src/third_party/duktape-1.5.2/src-separate/duk_bi_object.c +++ /dev/null @@ -1,577 +0,0 @@ -/* - * Object built-ins - */ - -#include "duk_internal.h" - -DUK_INTERNAL duk_ret_t duk_bi_object_constructor(duk_context *ctx) { - if (!duk_is_constructor_call(ctx) && - !duk_is_null_or_undefined(ctx, 0)) { - duk_to_object(ctx, 0); - return 1; - } - - if (duk_is_object(ctx, 0)) { - return 1; - } - - /* Pointer and buffer primitive values are treated like other - * primitives values which have a fully fledged object counterpart: - * promote to an object value. Lightfuncs are coerced with - * ToObject() even they could also be returned as is. - */ - if (duk_check_type_mask(ctx, 0, DUK_TYPE_MASK_STRING | - DUK_TYPE_MASK_BOOLEAN | - DUK_TYPE_MASK_NUMBER | - DUK_TYPE_MASK_POINTER | - DUK_TYPE_MASK_BUFFER | - DUK_TYPE_MASK_LIGHTFUNC)) { - duk_to_object(ctx, 0); - return 1; - } - - duk_push_object_helper(ctx, - DUK_HOBJECT_FLAG_EXTENSIBLE | - DUK_HOBJECT_CLASS_AS_FLAGS(DUK_HOBJECT_CLASS_OBJECT), - DUK_BIDX_OBJECT_PROTOTYPE); - return 1; -} - -/* 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; -} - -/* Shared helper to implement ES6 Object.setPrototypeOf and - * Object.prototype.__proto__ setter. - * - * http://www.ecma-international.org/ecma-262/6.0/index.html#sec-get-object.prototype.__proto__ - * http://www.ecma-international.org/ecma-262/6.0/index.html#sec-object.setprototypeof - */ -DUK_INTERNAL duk_ret_t duk_bi_object_setprototype_shared(duk_context *ctx) { - duk_hthread *thr = (duk_hthread *) ctx; - duk_hobject *h_obj; - duk_hobject *h_new_proto; - duk_hobject *h_curr; - duk_ret_t ret_success = 1; /* retval for success path */ - - /* Preliminaries for __proto__ and setPrototypeOf (E6 19.1.2.18 steps 1-4); - * magic: 0=setter call, 1=Object.setPrototypeOf - */ - if (duk_get_current_magic(ctx) == 0) { - duk_push_this_check_object_coercible(ctx); - duk_insert(ctx, 0); - if (!duk_check_type_mask(ctx, 1, DUK_TYPE_MASK_NULL | DUK_TYPE_MASK_OBJECT)) { - return 0; - } - - /* __proto__ setter returns 'undefined' on success unlike the - * setPrototypeOf() call which returns the target object. - */ - ret_success = 0; - } else { - duk_require_object_coercible(ctx, 0); - duk_require_type_mask(ctx, 1, DUK_TYPE_MASK_NULL | DUK_TYPE_MASK_OBJECT); - } - - h_new_proto = duk_get_hobject(ctx, 1); - /* h_new_proto may be NULL */ - if (duk_is_lightfunc(ctx, 0)) { - if (h_new_proto == thr->builtins[DUK_BIDX_FUNCTION_PROTOTYPE]) { - goto skip; - } - goto fail_nonextensible; - } - h_obj = duk_get_hobject(ctx, 0); - if (!h_obj) { - goto skip; - } - DUK_ASSERT(h_obj != NULL); - - /* [[SetPrototypeOf]] standard behavior, E6 9.1.2 */ - /* TODO: implement Proxy object support here */ - - if (h_new_proto == DUK_HOBJECT_GET_PROTOTYPE(thr->heap, h_obj)) { - goto skip; - } - if (!DUK_HOBJECT_HAS_EXTENSIBLE(h_obj)) { - goto fail_nonextensible; - } - for (h_curr = h_new_proto; h_curr != NULL; h_curr = DUK_HOBJECT_GET_PROTOTYPE(thr->heap, h_curr)) { - /* Loop prevention */ - if (h_curr == h_obj) { - goto fail_loop; - } - } - DUK_HOBJECT_SET_PROTOTYPE_UPDREF(thr, h_obj, h_new_proto); - /* fall thru */ - - skip: - duk_set_top(ctx, 1); - return ret_success; - - fail_nonextensible: - fail_loop: - return DUK_RET_TYPE_ERROR; -} - -DUK_INTERNAL duk_ret_t duk_bi_object_constructor_get_own_property_descriptor(duk_context *ctx) { - /* XXX: no need for indirect call */ - return duk_hobject_object_get_own_property_descriptor(ctx); -} - -DUK_INTERNAL duk_ret_t duk_bi_object_constructor_create(duk_context *ctx) { - duk_tval *tv; - duk_hobject *proto = NULL; - - DUK_ASSERT_TOP(ctx, 2); - - tv = duk_get_tval(ctx, 0); - DUK_ASSERT(tv != NULL); - if (DUK_TVAL_IS_NULL(tv)) { - ; - } else if (DUK_TVAL_IS_OBJECT(tv)) { - proto = DUK_TVAL_GET_OBJECT(tv); - DUK_ASSERT(proto != NULL); - } else { - return DUK_RET_TYPE_ERROR; - } - - (void) duk_push_object_helper_proto(ctx, - DUK_HOBJECT_FLAG_EXTENSIBLE | - DUK_HOBJECT_CLASS_AS_FLAGS(DUK_HOBJECT_CLASS_OBJECT), - proto); - - if (!duk_is_undefined(ctx, 1)) { - /* [ O Properties obj ] */ - - duk_replace(ctx, 0); - - /* [ obj Properties ] */ - - /* Just call the "original" Object.defineProperties() to - * finish up. - */ - - return duk_bi_object_constructor_define_properties(ctx); - } - - /* [ O Properties obj ] */ - - return 1; -} - -DUK_INTERNAL duk_ret_t duk_bi_object_constructor_define_property(duk_context *ctx) { - duk_hobject *obj; - duk_hstring *key; - duk_hobject *get; - duk_hobject *set; - duk_idx_t idx_value; - duk_uint_t defprop_flags; - - DUK_ASSERT(ctx != NULL); - - DUK_DDD(DUK_DDDPRINT("Object.defineProperty(): ctx=%p obj=%!T key=%!T desc=%!T", - (void *) ctx, - (duk_tval *) duk_get_tval(ctx, 0), - (duk_tval *) duk_get_tval(ctx, 1), - (duk_tval *) duk_get_tval(ctx, 2))); - - /* [ obj key desc ] */ - - /* Lightfuncs are currently supported by coercing to a temporary - * Function object; changes will be allowed (the coerced value is - * extensible) but will be lost. - */ - obj = duk_require_hobject_or_lfunc_coerce(ctx, 0); - (void) duk_to_string(ctx, 1); - key = duk_require_hstring(ctx, 1); - (void) duk_require_hobject(ctx, 2); - - DUK_ASSERT(obj != NULL); - DUK_ASSERT(key != NULL); - DUK_ASSERT(duk_get_hobject(ctx, 2) != NULL); - - /* - * Validate and convert argument property descriptor (an Ecmascript - * object) into a set of defprop_flags and possibly property value, - * getter, and/or setter values on the value stack. - * - * Lightfunc set/get values are coerced to full Functions. - */ - - duk_hobject_prepare_property_descriptor(ctx, - 2 /*idx_desc*/, - &defprop_flags, - &idx_value, - &get, - &set); - - /* - * Use Object.defineProperty() helper for the actual operation. - */ - - duk_hobject_define_property_helper(ctx, - defprop_flags, - obj, - key, - idx_value, - get, - set); - - /* Ignore the normalize/validate helper outputs on the value stack, - * they're popped automatically. - */ - - /* - * Return target object. - */ - - duk_push_hobject(ctx, obj); - return 1; -} - -DUK_INTERNAL duk_ret_t duk_bi_object_constructor_define_properties(duk_context *ctx) { - duk_small_uint_t pass; - duk_uint_t defprop_flags; - duk_hobject *obj; - duk_idx_t idx_value; - duk_hobject *get; - duk_hobject *set; - - /* Lightfunc handling by ToObject() coercion. */ - obj = duk_require_hobject_or_lfunc_coerce(ctx, 0); /* target */ - DUK_ASSERT(obj != NULL); - - duk_to_object(ctx, 1); /* properties object */ - - DUK_DDD(DUK_DDDPRINT("target=%!iT, properties=%!iT", - (duk_tval *) duk_get_tval(ctx, 0), - (duk_tval *) duk_get_tval(ctx, 1))); - - /* - * Two pass approach to processing the property descriptors. - * On first pass validate and normalize all descriptors before - * any changes are made to the target object. On second pass - * make the actual modifications to the target object. - * - * Right now we'll just use the same normalize/validate helper - * on both passes, ignoring its outputs on the first pass. - */ - - for (pass = 0; pass < 2; pass++) { - duk_set_top(ctx, 2); /* -> [ hobject props ] */ - duk_enum(ctx, 1, DUK_ENUM_OWN_PROPERTIES_ONLY /*enum_flags*/); - - for (;;) { - duk_hstring *key; - - /* [ hobject props enum(props) ] */ - - duk_set_top(ctx, 3); - - if (!duk_next(ctx, 2, 1 /*get_value*/)) { - break; - } - - DUK_DDD(DUK_DDDPRINT("-> key=%!iT, desc=%!iT", - (duk_tval *) duk_get_tval(ctx, -2), - (duk_tval *) duk_get_tval(ctx, -1))); - - /* [ hobject props enum(props) key desc ] */ - - duk_hobject_prepare_property_descriptor(ctx, - 4 /*idx_desc*/, - &defprop_flags, - &idx_value, - &get, - &set); - - /* [ hobject props enum(props) key desc value? getter? setter? ] */ - - if (pass == 0) { - continue; - } - - key = duk_get_hstring(ctx, 3); - DUK_ASSERT(key != NULL); - - duk_hobject_define_property_helper(ctx, - defprop_flags, - obj, - key, - idx_value, - get, - set); - } - } - - /* - * Return target object - */ - - duk_dup(ctx, 0); - return 1; -} - -DUK_INTERNAL duk_ret_t duk_bi_object_constructor_seal_freeze_shared(duk_context *ctx) { - duk_hthread *thr = (duk_hthread *) ctx; - duk_hobject *h; - duk_bool_t is_freeze; - - h = duk_require_hobject_or_lfunc(ctx, 0); - if (!h) { - /* Lightfunc, always success. */ - return 1; - } - - is_freeze = (duk_bool_t) duk_get_current_magic(ctx); - duk_hobject_object_seal_freeze_helper(thr, h, is_freeze); - - /* Sealed and frozen objects cannot gain any more properties, - * so this is a good time to compact them. - */ - duk_hobject_compact_props(thr, h); - - return 1; -} - -DUK_INTERNAL duk_ret_t duk_bi_object_constructor_prevent_extensions(duk_context *ctx) { - duk_hthread *thr = (duk_hthread *) ctx; - duk_hobject *h; - - h = duk_require_hobject_or_lfunc(ctx, 0); - if (!h) { - /* Lightfunc, always success. */ - return 1; - } - DUK_ASSERT(h != NULL); - - DUK_HOBJECT_CLEAR_EXTENSIBLE(h); - - /* A non-extensible object cannot gain any more properties, - * so this is a good time to compact. - */ - duk_hobject_compact_props(thr, h); - - return 1; -} - -DUK_INTERNAL duk_ret_t duk_bi_object_constructor_is_sealed_frozen_shared(duk_context *ctx) { - duk_hobject *h; - duk_bool_t is_frozen; - duk_bool_t rc; - - h = duk_require_hobject_or_lfunc(ctx, 0); - if (!h) { - duk_push_true(ctx); /* frozen and sealed */ - } else { - is_frozen = duk_get_current_magic(ctx); - rc = duk_hobject_object_is_sealed_frozen_helper((duk_hthread *) ctx, h, is_frozen /*is_frozen*/); - duk_push_boolean(ctx, rc); - } - return 1; -} - -DUK_INTERNAL duk_ret_t duk_bi_object_constructor_is_extensible(duk_context *ctx) { - duk_hobject *h; - - h = duk_require_hobject_or_lfunc(ctx, 0); - if (!h) { - duk_push_false(ctx); - } else { - duk_push_boolean(ctx, DUK_HOBJECT_HAS_EXTENSIBLE(h)); - } - return 1; -} - -/* Shared helper for Object.getOwnPropertyNames() and Object.keys(). - * Magic: 0=getOwnPropertyNames, 1=Object.keys. - */ -DUK_INTERNAL duk_ret_t duk_bi_object_constructor_keys_shared(duk_context *ctx) { - duk_hthread *thr = (duk_hthread *) ctx; - duk_hobject *obj; -#if defined(DUK_USE_ES6_PROXY) - duk_hobject *h_proxy_target; - duk_hobject *h_proxy_handler; - duk_hobject *h_trap_result; - duk_uarridx_t i, len, idx; -#endif - duk_small_uint_t enum_flags; - - DUK_ASSERT_TOP(ctx, 1); - DUK_UNREF(thr); - - obj = duk_require_hobject_or_lfunc_coerce(ctx, 0); - DUK_ASSERT(obj != NULL); - DUK_UNREF(obj); - -#if defined(DUK_USE_ES6_PROXY) - if (DUK_LIKELY(!duk_hobject_proxy_check(thr, - obj, - &h_proxy_target, - &h_proxy_handler))) { - goto skip_proxy; - } - - duk_push_hobject(ctx, h_proxy_handler); - if (!duk_get_prop_stridx(ctx, -1, DUK_STRIDX_OWN_KEYS)) { - /* Careful with reachability here: don't pop 'obj' before pushing - * proxy target. - */ - DUK_DDD(DUK_DDDPRINT("no ownKeys trap, get keys of target instead")); - duk_pop_2(ctx); - duk_push_hobject(ctx, h_proxy_target); - duk_replace(ctx, 0); - DUK_ASSERT_TOP(ctx, 1); - goto skip_proxy; - } - - /* [ obj handler trap ] */ - duk_insert(ctx, -2); - duk_push_hobject(ctx, h_proxy_target); /* -> [ obj trap handler target ] */ - duk_call_method(ctx, 1 /*nargs*/); /* -> [ obj trap_result ] */ - h_trap_result = duk_require_hobject(ctx, -1); - DUK_UNREF(h_trap_result); - - len = (duk_uarridx_t) duk_get_length(ctx, -1); - idx = 0; - duk_push_array(ctx); - for (i = 0; i < len; i++) { - /* [ obj trap_result res_arr ] */ - if (duk_get_prop_index(ctx, -2, i) && duk_is_string(ctx, -1)) { - /* XXX: for Object.keys() we should check enumerability of key */ - /* [ obj trap_result res_arr propname ] */ - duk_put_prop_index(ctx, -2, idx); - idx++; - } else { - duk_pop(ctx); - } - } - - /* XXX: missing trap result validation for non-configurable target keys - * (must be present), for non-extensible target all target keys must be - * present and no extra keys can be present. - * http://www.ecma-international.org/ecma-262/6.0/#sec-proxy-object-internal-methods-and-internal-slots-ownpropertykeys - */ - - /* XXX: for Object.keys() the [[OwnPropertyKeys]] result (trap result) - * should be filtered so that only enumerable keys remain. Enumerability - * should be checked with [[GetOwnProperty]] on the original object - * (i.e., the proxy in this case). If the proxy has a getOwnPropertyDescriptor - * trap, it should be triggered for every property. If the proxy doesn't have - * the trap, enumerability should be checked against the target object instead. - * We don't do any of this now, so Object.keys() and Object.getOwnPropertyNames() - * return the same result now for proxy traps. We still do clean up the trap - * result, so that Object.keys() and Object.getOwnPropertyNames() will return a - * clean array of strings without gaps. - */ - return 1; - - skip_proxy: -#endif /* DUK_USE_ES6_PROXY */ - - DUK_ASSERT_TOP(ctx, 1); - - if (duk_get_current_magic(ctx)) { - /* Object.keys */ - enum_flags = DUK_ENUM_OWN_PROPERTIES_ONLY | - DUK_ENUM_NO_PROXY_BEHAVIOR; - } else { - /* Object.getOwnPropertyNames */ - enum_flags = DUK_ENUM_INCLUDE_NONENUMERABLE | - DUK_ENUM_OWN_PROPERTIES_ONLY | - DUK_ENUM_NO_PROXY_BEHAVIOR; - } - - return duk_hobject_get_enumerated_keys(ctx, enum_flags); -} - -DUK_INTERNAL duk_ret_t duk_bi_object_prototype_to_string(duk_context *ctx) { - duk_push_this(ctx); - duk_to_object_class_string_top(ctx); - return 1; -} - -DUK_INTERNAL duk_ret_t duk_bi_object_prototype_to_locale_string(duk_context *ctx) { - DUK_ASSERT_TOP(ctx, 0); - (void) duk_push_this_coercible_to_object(ctx); - duk_get_prop_stridx(ctx, 0, DUK_STRIDX_TO_STRING); - if (!duk_is_callable(ctx, 1)) { - return DUK_RET_TYPE_ERROR; - } - duk_dup(ctx, 0); /* -> [ O toString O ] */ - duk_call_method(ctx, 0); /* XXX: call method tail call? */ - return 1; -} - -DUK_INTERNAL duk_ret_t duk_bi_object_prototype_value_of(duk_context *ctx) { - (void) duk_push_this_coercible_to_object(ctx); - return 1; -} - -DUK_INTERNAL duk_ret_t duk_bi_object_prototype_is_prototype_of(duk_context *ctx) { - duk_hthread *thr = (duk_hthread *) ctx; - duk_hobject *h_v; - duk_hobject *h_obj; - - DUK_ASSERT_TOP(ctx, 1); - - h_v = duk_get_hobject(ctx, 0); - if (!h_v) { - duk_push_false(ctx); /* XXX: tail call: return duk_push_false(ctx) */ - return 1; - } - - h_obj = duk_push_this_coercible_to_object(ctx); - DUK_ASSERT(h_obj != NULL); - - /* E5.1 Section 15.2.4.6, step 3.a, lookup proto once before compare. - * Prototype loops should cause an error to be thrown. - */ - duk_push_boolean(ctx, duk_hobject_prototype_chain_contains(thr, DUK_HOBJECT_GET_PROTOTYPE(thr->heap, h_v), h_obj, 0 /*ignore_loop*/)); - return 1; -} - -DUK_INTERNAL duk_ret_t duk_bi_object_prototype_has_own_property(duk_context *ctx) { - return duk_hobject_object_ownprop_helper(ctx, 0 /*required_desc_flags*/); -} - -DUK_INTERNAL duk_ret_t duk_bi_object_prototype_property_is_enumerable(duk_context *ctx) { - return duk_hobject_object_ownprop_helper(ctx, DUK_PROPDESC_FLAG_ENUMERABLE /*required_desc_flags*/); -} http://git-wip-us.apache.org/repos/asf/nifi-minifi-cpp/blob/ede68a10/thirdparty/civetweb-1.10/src/third_party/duktape-1.5.2/src-separate/duk_bi_pointer.c ---------------------------------------------------------------------- diff --git a/thirdparty/civetweb-1.10/src/third_party/duktape-1.5.2/src-separate/duk_bi_pointer.c b/thirdparty/civetweb-1.10/src/third_party/duktape-1.5.2/src-separate/duk_bi_pointer.c deleted file mode 100644 index 340fbae..0000000 --- a/thirdparty/civetweb-1.10/src/third_party/duktape-1.5.2/src-separate/duk_bi_pointer.c +++ /dev/null @@ -1,74 +0,0 @@ -/* - * Pointer built-ins - */ - -#include "duk_internal.h" - -/* - * Constructor - */ - -DUK_INTERNAL duk_ret_t duk_bi_pointer_constructor(duk_context *ctx) { - /* XXX: this behavior is quite useless now; it would be nice to be able - * to create pointer values from e.g. numbers or strings. Numbers are - * problematic on 64-bit platforms though. Hex encoded strings? - */ - if (duk_get_top(ctx) == 0) { - duk_push_pointer(ctx, NULL); - } else { - duk_to_pointer(ctx, 0); - } - DUK_ASSERT(duk_is_pointer(ctx, 0)); - duk_set_top(ctx, 1); - - if (duk_is_constructor_call(ctx)) { - duk_push_object_helper(ctx, - DUK_HOBJECT_FLAG_EXTENSIBLE | - DUK_HOBJECT_CLASS_AS_FLAGS(DUK_HOBJECT_CLASS_POINTER), - DUK_BIDX_POINTER_PROTOTYPE); - - /* Pointer object internal value is immutable */ - duk_dup(ctx, 0); - duk_xdef_prop_stridx(ctx, -2, DUK_STRIDX_INT_VALUE, DUK_PROPDESC_FLAGS_NONE); - } - /* Note: unbalanced stack on purpose */ - - return 1; -} - -/* - * toString(), valueOf() - */ - -DUK_INTERNAL duk_ret_t duk_bi_pointer_prototype_tostring_shared(duk_context *ctx) { - duk_tval *tv; - duk_small_int_t to_string = duk_get_current_magic(ctx); - - duk_push_this(ctx); - tv = duk_require_tval(ctx, -1); - DUK_ASSERT(tv != NULL); - - if (DUK_TVAL_IS_POINTER(tv)) { - /* nop */ - } else if (DUK_TVAL_IS_OBJECT(tv)) { - duk_hobject *h = DUK_TVAL_GET_OBJECT(tv); - DUK_ASSERT(h != NULL); - - /* Must be a "pointer object", i.e. class "Pointer" */ - if (DUK_HOBJECT_GET_CLASS_NUMBER(h) != DUK_HOBJECT_CLASS_POINTER) { - goto type_error; - } - - duk_get_prop_stridx(ctx, -1, DUK_STRIDX_INT_VALUE); - } else { - goto type_error; - } - - if (to_string) { - duk_to_string(ctx, -1); - } - return 1; - - type_error: - return DUK_RET_TYPE_ERROR; -} http://git-wip-us.apache.org/repos/asf/nifi-minifi-cpp/blob/ede68a10/thirdparty/civetweb-1.10/src/third_party/duktape-1.5.2/src-separate/duk_bi_protos.h ---------------------------------------------------------------------- diff --git a/thirdparty/civetweb-1.10/src/third_party/duktape-1.5.2/src-separate/duk_bi_protos.h b/thirdparty/civetweb-1.10/src/third_party/duktape-1.5.2/src-separate/duk_bi_protos.h deleted file mode 100644 index f9b42bc..0000000 --- a/thirdparty/civetweb-1.10/src/third_party/duktape-1.5.2/src-separate/duk_bi_protos.h +++ /dev/null @@ -1,69 +0,0 @@ -/* - * Prototypes for built-in functions not automatically covered by the - * header declarations emitted by genbuiltins.py. - */ - -#ifndef DUK_BUILTIN_PROTOS_H_INCLUDED -#define DUK_BUILTIN_PROTOS_H_INCLUDED - -/* Buffer size needed for duk_bi_date_format_timeval(). - * Accurate value is 32 + 1 for NUL termination: - * >>> len('+123456-01-23T12:34:56.123+12:34') - * 32 - * Include additional space to be safe. - */ -#define DUK_BI_DATE_ISO8601_BUFSIZE 48 - -/* Maximum length of CommonJS module identifier to resolve. Length includes - * both current module ID, requested (possibly relative) module ID, and a - * slash in between. - */ -#define DUK_BI_COMMONJS_MODULE_ID_LIMIT 256 - -/* Helpers exposed for internal use */ -DUK_INTERNAL_DECL void duk_bi_date_timeval_to_parts(duk_double_t d, duk_int_t *parts, duk_double_t *dparts, duk_small_uint_t flags); -DUK_INTERNAL_DECL duk_double_t duk_bi_date_get_timeval_from_dparts(duk_double_t *dparts, duk_small_uint_t flags); -DUK_INTERNAL_DECL void duk_bi_date_format_timeval(duk_double_t timeval, duk_uint8_t *out_buf); -DUK_INTERNAL_DECL duk_bool_t duk_bi_date_is_leap_year(duk_int_t year); -DUK_INTERNAL_DECL duk_bool_t duk_bi_date_timeval_in_valid_range(duk_double_t x); -DUK_INTERNAL_DECL duk_bool_t duk_bi_date_year_in_valid_range(duk_double_t year); -DUK_INTERNAL_DECL duk_bool_t duk_bi_date_timeval_in_leeway_range(duk_double_t x); -/* Built-in providers */ -#if defined(DUK_USE_DATE_NOW_GETTIMEOFDAY) -DUK_INTERNAL_DECL duk_double_t duk_bi_date_get_now_gettimeofday(duk_context *ctx); -#endif -#if defined(DUK_USE_DATE_NOW_TIME) -DUK_INTERNAL_DECL duk_double_t duk_bi_date_get_now_time(duk_context *ctx); -#endif -#if defined(DUK_USE_DATE_NOW_WINDOWS) -DUK_INTERNAL_DECL duk_double_t duk_bi_date_get_now_windows(duk_context *ctx); -#endif -#if defined(DUK_USE_DATE_TZO_GMTIME_R) || defined(DUK_USE_DATE_TZO_GMTIME) -DUK_INTERNAL_DECL duk_int_t duk_bi_date_get_local_tzoffset_gmtime(duk_double_t d); -#endif -#if defined(DUK_USE_DATE_TZO_WINDOWS) -DUK_INTERNAL_DECL duk_int_t duk_bi_date_get_local_tzoffset_windows(duk_double_t d); -#endif -#if defined(DUK_USE_DATE_PRS_STRPTIME) -DUK_INTERNAL_DECL duk_bool_t duk_bi_date_parse_string_strptime(duk_context *ctx, const char *str); -#endif -#if defined(DUK_USE_DATE_PRS_GETDATE) -DUK_INTERNAL_DECL duk_bool_t duk_bi_date_parse_string_getdate(duk_context *ctx, const char *str); -#endif -#if defined(DUK_USE_DATE_FMT_STRFTIME) -DUK_INTERNAL_DECL 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); -#endif - -DUK_INTERNAL_DECL -void duk_bi_json_parse_helper(duk_context *ctx, - duk_idx_t idx_value, - duk_idx_t idx_reviver, - duk_small_uint_t flags); -DUK_INTERNAL_DECL -void duk_bi_json_stringify_helper(duk_context *ctx, - duk_idx_t idx_value, - duk_idx_t idx_replacer, - duk_idx_t idx_space, - duk_small_uint_t flags); - -#endif /* DUK_BUILTIN_PROTOS_H_INCLUDED */ http://git-wip-us.apache.org/repos/asf/nifi-minifi-cpp/blob/ede68a10/thirdparty/civetweb-1.10/src/third_party/duktape-1.5.2/src-separate/duk_bi_proxy.c ---------------------------------------------------------------------- diff --git a/thirdparty/civetweb-1.10/src/third_party/duktape-1.5.2/src-separate/duk_bi_proxy.c b/thirdparty/civetweb-1.10/src/third_party/duktape-1.5.2/src-separate/duk_bi_proxy.c deleted file mode 100644 index 9787ec4..0000000 --- a/thirdparty/civetweb-1.10/src/third_party/duktape-1.5.2/src-separate/duk_bi_proxy.c +++ /dev/null @@ -1,66 +0,0 @@ -/* - * Proxy built-in (ES6) - */ - -#include "duk_internal.h" - -#if defined(DUK_USE_ES6_PROXY) -DUK_INTERNAL duk_ret_t duk_bi_proxy_constructor(duk_context *ctx) { - duk_hobject *h_target; - duk_hobject *h_handler; - - if (!duk_is_constructor_call(ctx)) { - return DUK_RET_TYPE_ERROR; - } - - /* Reject a proxy object as the target because it would need - * special handler in property lookups. (ES6 has no such restriction) - */ - h_target = duk_require_hobject_or_lfunc_coerce(ctx, 0); - DUK_ASSERT(h_target != NULL); - if (DUK_HOBJECT_HAS_EXOTIC_PROXYOBJ(h_target)) { - return DUK_RET_TYPE_ERROR; - } - - /* Reject a proxy object as the handler because it would cause - * potentially unbounded recursion. (ES6 has no such restriction) - */ - h_handler = duk_require_hobject_or_lfunc_coerce(ctx, 1); - DUK_ASSERT(h_handler != NULL); - if (DUK_HOBJECT_HAS_EXOTIC_PROXYOBJ(h_handler)) { - return DUK_RET_TYPE_ERROR; - } - - /* XXX: the returned value is exotic in ES6, but we use a - * simple object here with no prototype. Without a prototype, - * [[DefaultValue]] coercion fails which is abit confusing. - * No callable check/handling in the current Proxy subset. - */ - (void) duk_push_object_helper_proto(ctx, - DUK_HOBJECT_FLAG_EXTENSIBLE | - DUK_HOBJECT_FLAG_EXOTIC_PROXYOBJ | - DUK_HOBJECT_CLASS_AS_FLAGS(DUK_HOBJECT_CLASS_OBJECT), - NULL); - DUK_ASSERT_TOP(ctx, 3); - - /* Make _Target and _Handler non-configurable and non-writable. - * They can still be forcibly changed by C code (both user and - * Duktape internal), but not by Ecmascript code. - */ - - /* Proxy target */ - duk_dup(ctx, 0); - duk_xdef_prop_stridx(ctx, -2, DUK_STRIDX_INT_TARGET, DUK_PROPDESC_FLAGS_NONE); - - /* Proxy handler */ - duk_dup(ctx, 1); - duk_xdef_prop_stridx(ctx, -2, DUK_STRIDX_INT_HANDLER, DUK_PROPDESC_FLAGS_NONE); - - return 1; /* replacement handler */ -} -#else /* DUK_USE_ES6_PROXY */ -DUK_INTERNAL duk_ret_t duk_bi_proxy_constructor(duk_context *ctx) { - DUK_UNREF(ctx); - return DUK_RET_UNSUPPORTED_ERROR; -} -#endif /* DUK_USE_ES6_PROXY */ http://git-wip-us.apache.org/repos/asf/nifi-minifi-cpp/blob/ede68a10/thirdparty/civetweb-1.10/src/third_party/duktape-1.5.2/src-separate/duk_bi_regexp.c ---------------------------------------------------------------------- diff --git a/thirdparty/civetweb-1.10/src/third_party/duktape-1.5.2/src-separate/duk_bi_regexp.c b/thirdparty/civetweb-1.10/src/third_party/duktape-1.5.2/src-separate/duk_bi_regexp.c deleted file mode 100644 index 2259c77..0000000 --- a/thirdparty/civetweb-1.10/src/third_party/duktape-1.5.2/src-separate/duk_bi_regexp.c +++ /dev/null @@ -1,209 +0,0 @@ -/* - * RegExp built-ins - */ - -#include "duk_internal.h" - -#ifdef DUK_USE_REGEXP_SUPPORT - -DUK_LOCAL void duk__get_this_regexp(duk_context *ctx) { - duk_hobject *h; - - duk_push_this(ctx); - h = duk_require_hobject_with_class(ctx, -1, DUK_HOBJECT_CLASS_REGEXP); - DUK_ASSERT(h != NULL); - DUK_UNREF(h); - duk_insert(ctx, 0); /* prepend regexp to valstack 0 index */ -} - -/* XXX: much to improve (code size) */ -DUK_INTERNAL duk_ret_t duk_bi_regexp_constructor(duk_context *ctx) { - duk_hthread *thr = (duk_hthread *) ctx; - duk_hobject *h_pattern; - - DUK_ASSERT_TOP(ctx, 2); - h_pattern = duk_get_hobject(ctx, 0); - - if (!duk_is_constructor_call(ctx) && - h_pattern != NULL && - DUK_HOBJECT_GET_CLASS_NUMBER(h_pattern) == DUK_HOBJECT_CLASS_REGEXP && - duk_is_undefined(ctx, 1)) { - /* Called as a function, pattern has [[Class]] "RegExp" and - * flags is undefined -> return object as is. - */ - duk_dup(ctx, 0); - return 1; - } - - /* Else functionality is identical for function call and constructor - * call. - */ - - if (h_pattern != NULL && - DUK_HOBJECT_GET_CLASS_NUMBER(h_pattern) == DUK_HOBJECT_CLASS_REGEXP) { - if (duk_is_undefined(ctx, 1)) { - duk_bool_t flag_g, flag_i, flag_m; - duk_get_prop_stridx(ctx, 0, DUK_STRIDX_SOURCE); - flag_g = duk_get_prop_stridx_boolean(ctx, 0, DUK_STRIDX_GLOBAL, NULL); - flag_i = duk_get_prop_stridx_boolean(ctx, 0, DUK_STRIDX_IGNORE_CASE, NULL); - flag_m = duk_get_prop_stridx_boolean(ctx, 0, DUK_STRIDX_MULTILINE, NULL); - - duk_push_sprintf(ctx, "%s%s%s", - (const char *) (flag_g ? "g" : ""), - (const char *) (flag_i ? "i" : ""), - (const char *) (flag_m ? "m" : "")); - - /* [ ... pattern flags ] */ - } else { - return DUK_RET_TYPE_ERROR; - } - } else { - if (duk_is_undefined(ctx, 0)) { - duk_push_string(ctx, ""); - } else { - duk_dup(ctx, 0); - duk_to_string(ctx, -1); - } - if (duk_is_undefined(ctx, 1)) { - duk_push_string(ctx, ""); - } else { - duk_dup(ctx, 1); - duk_to_string(ctx, -1); - } - - /* [ ... pattern flags ] */ - } - - DUK_DDD(DUK_DDDPRINT("RegExp constructor/function call, pattern=%!T, flags=%!T", - (duk_tval *) duk_get_tval(ctx, -2), (duk_tval *) duk_get_tval(ctx, -1))); - - /* [ ... pattern flags ] */ - - duk_regexp_compile(thr); - - /* [ ... bytecode escaped_source ] */ - - duk_regexp_create_instance(thr); - - /* [ ... RegExp ] */ - - return 1; -} - -DUK_INTERNAL duk_ret_t duk_bi_regexp_prototype_exec(duk_context *ctx) { - duk__get_this_regexp(ctx); - - /* [ regexp input ] */ - - duk_regexp_match((duk_hthread *) ctx); - - /* [ result ] */ - - return 1; -} - -DUK_INTERNAL duk_ret_t duk_bi_regexp_prototype_test(duk_context *ctx) { - duk__get_this_regexp(ctx); - - /* [ regexp input ] */ - - /* result object is created and discarded; wasteful but saves code space */ - duk_regexp_match((duk_hthread *) ctx); - - /* [ result ] */ - - duk_push_boolean(ctx, (duk_is_null(ctx, -1) ? 0 : 1)); - - return 1; -} - -DUK_INTERNAL duk_ret_t duk_bi_regexp_prototype_to_string(duk_context *ctx) { - duk_hstring *h_bc; - duk_small_int_t re_flags; - -#if 0 - /* A little tricky string approach to provide the flags string. - * This depends on the specific flag values in duk_regexp.h, - * which needs to be asserted for. In practice this doesn't - * produce more compact code than the easier approach in use. - */ - - const char *flag_strings = "gim\0gi\0gm\0g\0"; - duk_uint8_t flag_offsets[8] = { - (duk_uint8_t) 3, /* flags: "" */ - (duk_uint8_t) 10, /* flags: "g" */ - (duk_uint8_t) 5, /* flags: "i" */ - (duk_uint8_t) 4, /* flags: "gi" */ - (duk_uint8_t) 2, /* flags: "m" */ - (duk_uint8_t) 7, /* flags: "gm" */ - (duk_uint8_t) 1, /* flags: "im" */ - (duk_uint8_t) 0, /* flags: "gim" */ - }; - DUK_ASSERT(DUK_RE_FLAG_GLOBAL == 1); - DUK_ASSERT(DUK_RE_FLAG_IGNORE_CASE == 2); - DUK_ASSERT(DUK_RE_FLAG_MULTILINE == 4); -#endif - - duk__get_this_regexp(ctx); - - /* [ regexp ] */ - - duk_get_prop_stridx(ctx, 0, DUK_STRIDX_SOURCE); - duk_get_prop_stridx(ctx, 0, DUK_STRIDX_INT_BYTECODE); - h_bc = duk_get_hstring(ctx, -1); - DUK_ASSERT(h_bc != NULL); - DUK_ASSERT(DUK_HSTRING_GET_BYTELEN(h_bc) >= 1); - DUK_ASSERT(DUK_HSTRING_GET_CHARLEN(h_bc) >= 1); - DUK_ASSERT(DUK_HSTRING_GET_DATA(h_bc)[0] < 0x80); - re_flags = (duk_small_int_t) DUK_HSTRING_GET_DATA(h_bc)[0]; - - /* [ regexp source bytecode ] */ - -#if 1 - /* This is a cleaner approach and also produces smaller code than - * the other alternative. Use duk_require_string() for format - * safety (although the source property should always exist). - */ - duk_push_sprintf(ctx, "/%s/%s%s%s", - (const char *) duk_require_string(ctx, -2), /* require to be safe */ - (re_flags & DUK_RE_FLAG_GLOBAL) ? "g" : "", - (re_flags & DUK_RE_FLAG_IGNORE_CASE) ? "i" : "", - (re_flags & DUK_RE_FLAG_MULTILINE) ? "m" : ""); -#else - /* This should not be necessary because no-one should tamper with the - * regexp bytecode, but is prudent to avoid potential segfaults if that - * were to happen for some reason. - */ - re_flags &= 0x07; - DUK_ASSERT(re_flags >= 0 && re_flags <= 7); /* three flags */ - duk_push_sprintf(ctx, "/%s/%s", - (const char *) duk_require_string(ctx, -2), - (const char *) (flag_strings + flag_offsets[re_flags])); -#endif - - return 1; -} - -#else /* DUK_USE_REGEXP_SUPPORT */ - -DUK_INTERNAL duk_ret_t duk_bi_regexp_constructor(duk_context *ctx) { - DUK_UNREF(ctx); - return DUK_RET_UNSUPPORTED_ERROR; -} - -DUK_INTERNAL duk_ret_t duk_bi_regexp_prototype_exec(duk_context *ctx) { - DUK_UNREF(ctx); - return DUK_RET_UNSUPPORTED_ERROR; -} - -DUK_INTERNAL duk_ret_t duk_bi_regexp_prototype_test(duk_context *ctx) { - DUK_UNREF(ctx); - return DUK_RET_UNSUPPORTED_ERROR; -} - -DUK_INTERNAL duk_ret_t duk_bi_regexp_prototype_to_string(duk_context *ctx) { - DUK_UNREF(ctx); - return DUK_RET_UNSUPPORTED_ERROR; -} - -#endif /* DUK_USE_REGEXP_SUPPORT */