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.

simplify call frame handling

+5 -56
+3 -45
src/ant.c
··· 6796 6796 if (nfe_name_off != 0) nfe_name_val = resolveprop(js, mkval(T_PROP, nfe_name_off)); 6797 6797 } 6798 6798 6799 - static char full_func_name[256]; 6800 6799 const char *func_name = NULL; 6801 - const char *this_name = NULL; 6802 6800 6803 6801 if (vtype(nfe_name_val) == T_STR) { 6804 6802 jsoff_t name_len, name_offset = vstr(js, nfe_name_val, &name_len); 6805 6803 func_name = (const char *)&js->mem[name_offset]; 6806 6804 } 6807 6805 6808 - if (vtype(target_this) != T_OBJ) goto skip_constructor_name; 6809 - 6810 - jsoff_t ctor_off = lkp_interned(js, target_this, INTERN_CONSTRUCTOR, 11); 6811 - if (ctor_off == 0) goto default_object_name; 6812 - 6813 - jsval_t ctor_val = resolveprop(js, mkval(T_PROP, ctor_off)); 6814 - if (vtype(ctor_val) != T_FUNC) goto default_object_name; 6815 - 6816 - jsval_t ctor_obj = mkval(T_OBJ, vdata(ctor_val)); 6817 - jsoff_t ctor_name_off = lkp(js, ctor_obj, "name", 4); 6818 - if (ctor_name_off == 0) goto default_object_name; 6819 - 6820 - jsval_t ctor_name_val = resolveprop(js, mkval(T_PROP, ctor_name_off)); 6821 - if (vtype(ctor_name_val) != T_STR) goto default_object_name; 6822 - 6823 - jsoff_t ctor_name_len, ctor_name_offset = vstr(js, ctor_name_val, &ctor_name_len); 6824 - this_name = (const char *)&js->mem[ctor_name_offset]; 6825 - if (this_name && strlen(this_name) > 0) goto skip_constructor_name; 6826 - 6827 - default_object_name: 6828 - this_name = "Object"; 6829 - 6830 - skip_constructor_name: 6831 - 6832 - const char *final_name; 6833 - if (this_name && func_name) { 6834 - snprintf(full_func_name, sizeof(full_func_name), "%s.%s", this_name, func_name); 6835 - final_name = full_func_name; 6836 - } else if (func_name) { 6837 - final_name = func_name; 6838 - } else if (this_name) { 6839 - snprintf(full_func_name, sizeof(full_func_name), "%s.<anonymous>", this_name); 6840 - final_name = full_func_name; 6841 - } else { 6842 - final_name = "<anonymous>"; 6843 - } 6844 - 6845 - push_call_frame( 6846 - js->filename, 6847 - final_name, 6848 - code, (uint32_t) pos 6849 - ); 6806 + const char *final_name = func_name ? func_name : "<anonymous>"; 6807 + push_call_frame(js->filename, final_name, code, (uint32_t) pos); 6850 6808 6851 6809 jsval_t saved_func = js->current_func; 6852 6810 js->current_func = func; ··· 23395 23353 entry->has_setter = true; 23396 23354 entry->getter = getter; 23397 23355 entry->setter = setter; 23398 - } 23356 + }
+2 -11
src/stack.c
··· 9 9 10 10 void pop_call_frame(void) { 11 11 if (global_call_stack.depth == 0) return; 12 - call_frame_t *frame = &global_call_stack.frames[--global_call_stack.depth]; 13 - free((void *)frame->function_name); 12 + global_call_stack.depth--; 14 13 } 15 14 16 15 bool push_call_frame(const char *filename, const char *function_name, const char *code, uint32_t pos) { ··· 26 25 global_call_stack.capacity = (int)new_capacity; 27 26 } 28 27 29 - char *func_name_copy = NULL; 30 - if (function_name) { 31 - size_t len = strlen(function_name) + 1; 32 - func_name_copy = (char *)ant_realloc(NULL, len); 33 - if (!func_name_copy) abort(); 34 - memcpy(func_name_copy, function_name, len); 35 - } 36 - 37 28 call_frame_t *frame = 38 29 &global_call_stack.frames[global_call_stack.depth++]; 39 30 40 31 *frame = (call_frame_t) { 41 32 .filename = filename, 42 - .function_name = func_name_copy, 33 + .function_name = function_name, 43 34 .code = code, 44 35 .pos = pos, .line = -1, .col = -1, 45 36 };