summaryrefslogtreecommitdiffhomepage
path: root/compiler.c
diff options
context:
space:
mode:
authorJo-Philipp Wich <jo@mein.io>2022-11-23 13:46:44 +0100
committerGitHub <noreply@github.com>2022-11-23 13:46:44 +0100
commit11adbbe2ce11b1ee906d48ac6c174fa1147a5b32 (patch)
treefc008a5729efcb2fe0b5b2f168541120afede651 /compiler.c
parent8faa3059951a38bc9e6065470892d01a92fa785b (diff)
parent6c5ee537782970797700c99a79293b9590580817 (diff)
Merge pull request #125 from jow-/arrow-functions-blocks-no-return
compiler: ensure that arrow functions with block bodies return no value
Diffstat (limited to 'compiler.c')
-rw-r--r--compiler.c14
1 files changed, 5 insertions, 9 deletions
diff --git a/compiler.c b/compiler.c
index 35b07a1..6c336ae 100644
--- a/compiler.c
+++ b/compiler.c
@@ -1330,19 +1330,15 @@ uc_compiler_compile_arrowfn(uc_compiler_t *compiler, uc_value_t *args, bool rest
if (uc_compiler_parse_match(&fncompiler, TK_LBRACE)) {
while (!uc_compiler_parse_check(&fncompiler, TK_RBRACE) &&
!uc_compiler_parse_check(&fncompiler, TK_EOF))
- last_statement_type = uc_compiler_compile_declaration(&fncompiler);
+ uc_compiler_compile_declaration(&fncompiler);
uc_compiler_parse_consume(&fncompiler, TK_RBRACE);
- /* overwrite last pop result with return */
- if (last_statement_type == TK_SCOL)
- uc_chunk_pop(&fn->chunk);
-
- /* else load implicit null */
- else
+ /* emit final return */
+ if (last_statement_type != TK_RETURN) {
uc_compiler_emit_insn(&fncompiler, 0, I_LNULL);
-
- uc_compiler_emit_insn(&fncompiler, 0, I_RETURN);
+ uc_compiler_emit_insn(&fncompiler, 0, I_RETURN);
+ }
}
else {
uc_compiler_parse_precedence(&fncompiler, P_ASSIGN);