# Windows cross compilation from Linux
#CONFIG_WIN32=y
# use link time optimization (smaller and faster executables but slower build)
-CONFIG_LTO=y
+#CONFIG_LTO=y
# consider warnings as errors (for development)
#CONFIG_WERROR=y
# force 32 bit build for some utilities
stack frames below the evalScript.
@item async
Boolean (default = false). If true, @code{await} is accepted in the
- script and a promise is returned.
+ script and a promise is returned. The promise is resolved with an
+ object whose @code{value} property holds the value returned by the
+ script.
@end table
@item loadScript(filename)
if (!s->is_module) {
/* return the value of the hidden variable eval_ret_idx */
- emit_op(s, OP_get_loc);
- emit_u16(s, fd->eval_ret_idx);
+ if (fd->func_kind == JS_FUNC_ASYNC) {
+ /* wrap the return value in an object so that promises can
+ be safely returned */
+ emit_op(s, OP_object);
+ emit_op(s, OP_dup);
+ emit_op(s, OP_get_loc);
+ emit_u16(s, fd->eval_ret_idx);
+
+ emit_op(s, OP_put_field);
+ emit_atom(s, JS_ATOM_value);
+ } else {
+ emit_op(s, OP_get_loc);
+ emit_u16(s, fd->eval_ret_idx);
+ }
emit_return(s, TRUE);
} else {
emit_return(s, FALSE);
/* result is a promise */
result.then(print_eval_result, print_eval_error);
} else {
- print_eval_result(result);
+ print_eval_result({ value: result });
}
} catch (error) {
print_eval_error(error);
}
function print_eval_result(result) {
+ result = result.value;
eval_time = os.now() - eval_start_time;
std.puts(colors[styles.result]);
print(result);