return njs_generator_stack_pop(vm, generator, NULL);
}
- if (njs_is_function(&var->value)) {
- lambda = njs_function(&var->value)->u.lambda;
- } else {
- lambda = var->value.data.u.lambda;
- }
+ lambda = njs_variable_lambda(var);
lex_entry = njs_lexer_entry(node->u.reference.unique_id);
if (njs_slow_path(lex_entry == NULL)) {
return NJS_ERROR;
}
- node->u.value.data.u.lambda = var->value.data.u.lambda;
+ node->u.value.data.u.lambda = njs_variable_lambda(var);
node->left = (njs_parser_node_t *) unique_id;
return node;
}
+njs_inline njs_function_lambda_t *
+njs_variable_lambda(njs_variable_t * var)
+{
+ if (njs_is_function(&var->value)) {
+ /* may be set by generator in njs_generate_function_declaration(). */
+ return njs_function(&var->value)->u.lambda;
+ }
+
+ return var->value.data.u.lambda;
+}
+
njs_inline void
njs_variable_node_free(njs_vm_t *vm, njs_variable_node_t *node)
"Number.prototype.test" ENTER),
njs_str("test") },
+ { njs_str("function f(a) {return a}" ENTER
+ "function f(a) {return a}; f(2)" ENTER),
+ njs_str("2") },
+
+ { njs_str("function f() {return 1}" ENTER
+ "function f(a) {return 1}; f(2)" ENTER),
+ njs_str("1") },
+
{ njs_str("try {(new Function('function foo(){return 1}; ()=>{}breakhere'))} catch (e) {}" ENTER
"foo()" ENTER),
njs_str("ReferenceError: \"foo\" is not defined\n"