MIRROR: javascript for ๐Ÿœ's, a tiny runtime with big ambitions
1
fork

Configure Feed

Select the types of activity you want to include in your feed.

fix arrow function parsing

+32 -27
+1 -1
meson.build
··· 74 74 build_date = run_command('date', '+%Y-%m-%d', check: true).stdout().strip() 75 75 76 76 version_conf = configuration_data() 77 - version_conf.set('ANT_VERSION', '0.0.8.19') 77 + version_conf.set('ANT_VERSION', '0.0.8.20') 78 78 version_conf.set('ANT_GIT_HASH', git_hash) 79 79 version_conf.set('ANT_BUILD_DATE', build_date) 80 80
+31 -26
src/ant.c
··· 4615 4615 body_result = js_assignment(js); 4616 4616 if (is_err(body_result)) { js->flags = flags; return body_result; } 4617 4617 } else { 4618 + body_start = js->toff; 4618 4619 js->flags |= F_NOEXEC; 4619 4620 js->consumed = 1; 4620 4621 body_result = js_block(js, false); 4621 4622 if (is_err(body_result)) { js->flags = flags; return body_result; } 4622 - if (next(js) == TOK_RBRACE) js->consumed = 1; 4623 + if (js->tok == TOK_RBRACE && js->consumed) { 4624 + } else if (next(js) == TOK_RBRACE) js->consumed = 1; 4623 4625 } 4624 4626 js->flags = flags; 4625 4627 jsoff_t body_end = js->pos; ··· 4629 4631 jsoff_t fn_pos = 0; 4630 4632 memcpy(fn_str + fn_pos, param_buf, id_len + 2); 4631 4633 fn_pos += id_len + 2; 4632 - fn_str[fn_pos++] = '{'; 4633 4634 if (is_expr) { 4635 + fn_str[fn_pos++] = '{'; 4634 4636 memcpy(fn_str + fn_pos, "return ", 7); 4635 4637 fn_pos += 7; 4636 4638 size_t body_len = body_end - body_start; 4637 4639 memcpy(fn_str + fn_pos, &js->code[body_start], body_len); 4638 4640 fn_pos += body_len; 4641 + fn_str[fn_pos++] = '}'; 4639 4642 } else { 4640 - size_t body_len = body_end - body_start - 2; 4641 - memcpy(fn_str + fn_pos, &js->code[body_start + 1], body_len); 4643 + size_t body_len = body_end - body_start; 4644 + memcpy(fn_str + fn_pos, &js->code[body_start], body_len); 4642 4645 fn_pos += body_len; 4643 4646 } 4644 - fn_str[fn_pos++] = '}'; 4645 4647 jsval_t str = js_mkstr(js, fn_str, fn_pos); 4646 4648 free(fn_str); 4647 4649 if (is_err(str)) return str; ··· 4718 4720 js->flags = flags; 4719 4721 return body_result; 4720 4722 } 4721 - if (next(js) == TOK_RBRACE) { 4722 - body_end_actual = js->toff; 4723 + if (js->tok == TOK_RBRACE && js->consumed) { 4724 + body_end_actual = js->pos; 4725 + } else if (next(js) == TOK_RBRACE) { 4726 + body_end_actual = js->pos; 4723 4727 js->consumed = 1; 4724 4728 } else { 4725 4729 body_end_actual = js->pos; ··· 4737 4741 size_t param_len = params_end - params_start; 4738 4742 memcpy(fn_str + fn_pos, &js->code[params_start], param_len); 4739 4743 fn_pos += param_len; 4740 - 4741 - fn_str[fn_pos++] = '{'; 4742 - 4744 + 4743 4745 if (is_expr) { 4746 + fn_str[fn_pos++] = '{'; 4744 4747 memcpy(fn_str + fn_pos, "return ", 7); 4745 4748 fn_pos += 7; 4746 4749 size_t body_len = body_end_actual - body_start; 4747 4750 memcpy(fn_str + fn_pos, &js->code[body_start], body_len); 4748 4751 fn_pos += body_len; 4752 + fn_str[fn_pos++] = '}'; 4749 4753 } else { 4750 - size_t body_len = body_end_actual - body_start - 1; 4751 - memcpy(fn_str + fn_pos, &js->code[body_start + 1], body_len); 4754 + size_t body_len = body_end_actual - body_start; 4755 + memcpy(fn_str + fn_pos, &js->code[body_start], body_len); 4752 4756 fn_pos += body_len; 4753 4757 } 4754 - 4755 - fn_str[fn_pos++] = '}'; 4756 - 4758 + 4757 4759 jsval_t str = js_mkstr(js, fn_str, fn_pos); 4758 4760 free(fn_str); 4759 4761 if (is_err(str)) return str; 4760 - 4762 + 4761 4763 jsval_t func_obj = mkobj(js, 0); 4762 4764 if (is_err(func_obj)) return func_obj; 4763 4765 ··· 5254 5256 return body_result; 5255 5257 } 5256 5258 } else { 5259 + body_start = js->toff; 5257 5260 js->flags |= F_NOEXEC; 5258 5261 js->consumed = 1; 5259 5262 body_result = js_block(js, false); ··· 5261 5264 js->flags = flags; 5262 5265 return body_result; 5263 5266 } 5264 - if (next(js) == TOK_RBRACE) js->consumed = 1; 5267 + if (js->tok == TOK_RBRACE && js->consumed) { 5268 + } else if (next(js) == TOK_RBRACE) { 5269 + js->consumed = 1; 5270 + } 5265 5271 } 5266 - 5272 + 5267 5273 js->flags = flags; 5268 5274 jsoff_t body_end = js->pos; 5269 - 5275 + 5270 5276 size_t fn_size = param_len + (body_end - body_start) + 64; 5271 5277 char *fn_str = (char *) malloc(fn_size); 5272 5278 if (!fn_str) return js_mkerr(js, "oom"); 5273 - 5279 + 5274 5280 jsoff_t fn_pos = 0; 5275 5281 memcpy(fn_str + fn_pos, param_buf, param_len + 2); 5276 5282 fn_pos += param_len + 2; 5277 - fn_str[fn_pos++] = '{'; 5278 - 5283 + 5279 5284 if (is_expr) { 5285 + fn_str[fn_pos++] = '{'; 5280 5286 memcpy(fn_str + fn_pos, "return ", 7); 5281 5287 fn_pos += 7; 5282 5288 size_t body_len = body_end - body_start; 5283 5289 memcpy(fn_str + fn_pos, &js->code[body_start], body_len); 5284 5290 fn_pos += body_len; 5291 + fn_str[fn_pos++] = '}'; 5285 5292 } else { 5286 - size_t body_len = body_end - body_start - 2; 5287 - memcpy(fn_str + fn_pos, &js->code[body_start + 1], body_len); 5293 + size_t body_len = body_end - body_start; 5294 + memcpy(fn_str + fn_pos, &js->code[body_start], body_len); 5288 5295 fn_pos += body_len; 5289 5296 } 5290 - 5291 - fn_str[fn_pos++] = '}'; 5292 5297 5293 5298 jsval_t str = js_mkstr(js, fn_str, fn_pos); 5294 5299 free(fn_str);