#define _NJS_VM_H_INCLUDED_
-#define NJS_MAX_STACK_SIZE (16 * 1024 * 1024)
+#define NJS_MAX_STACK_SIZE (256 * 1024)
/*
/* njs_vm_t must be aligned to njs_value_t due to scratch value. */
njs_value_t retval;
- njs_uint_t count;
-
njs_arr_t *paths;
u_char *start;
njs_vmcode_try_return_t *try_return;
njs_vmcode_function_frame_t *function_frame;
- if (njs_slow_path(vm->count > 128)) {
- njs_range_error(vm, "Maximum call stack size exceeded");
- return NJS_ERROR;
- }
-
- vm->count++;
-
next:
for ( ;; ) {
value2 = njs_vmcode_operand(vm, value2);
vm->retval = *value2;
- ret = NJS_OK;
- goto done;
+ return NJS_OK;
case NJS_VMCODE_JUMP:
ret = (njs_jump_off_t) value2;
njs_function_frame_free(vm, &frame->native);
- ret = NJS_OK;
- goto done;
+ return NJS_OK;
case NJS_VMCODE_FUNCTION_FRAME:
function_frame = (njs_vmcode_function_frame_t *) pc;
switch (ret) {
case NJS_OK:
- goto done;
+ return NJS_OK;
case NJS_ERROR:
goto error;
}
error:
- ret = NJS_ERROR;
-
for ( ;; ) {
frame = (njs_frame_t *) vm->top_frame;
}
}
-done:
-
- vm->count--;
-
- return ret;
+ return NJS_ERROR;
}
"Array.prototype.fill.call(o, 2).a"),
njs_str("4") },
+#if (!NJS_HAVE_MEMORY_SANITIZER) /* MSAN limits stack size */
{ njs_str("var o = Object({length: 3});"
"Object.defineProperty(o, '0', {set: function(v){this[0] = 2 * v}});"
"Array.prototype.fill.call(o, 2)"),
njs_str("RangeError: Maximum call stack size exceeded") },
+#endif
{ njs_str("var a = [];"
"a.filter(function(v, i, a) { return v > 1 })"),
{ njs_str("{ function f() {} { var f }}"),
njs_str("SyntaxError: \"f\" has already been declared in 1") },
+#if (!NJS_HAVE_MEMORY_SANITIZER) /* MSAN limits stack size */
{ njs_str("function f() { return f() } f()"),
njs_str("RangeError: Maximum call stack size exceeded") },
+#endif
{ njs_str("function () { } f()"),
njs_str("SyntaxError: Unexpected token \"(\" in 1") },