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.

centralize error creation and merge props for JS errors

+17 -17
+4 -2
include/ant.h
··· 47 47 #define JS_DESC_E (1 << 1) 48 48 #define JS_DESC_C (1 << 2) 49 49 50 - #define js_mkerr(js, ...) js_mkerr_typed(js, JS_ERR_TYPE, __VA_ARGS__) 50 + #define js_mkerr(js, ...) js_create_error(js, JS_ERR_TYPE, js_mkundef(), __VA_ARGS__) 51 + #define js_mkerr_typed(js, err_type, ...) js_create_error(js, err_type, js_mkundef(), __VA_ARGS__) 52 + #define js_mkerr_props(js, err_type, props, ...) js_create_error(js, err_type, props, __VA_ARGS__) 53 + jsval_t js_create_error(struct js *js, js_err_type_t err_type, jsval_t props, const char *fmt, ...); 51 54 52 55 struct js *js_create(void *buf, size_t len); 53 56 struct js *js_create_dynamic(size_t initial_size, size_t max_size); ··· 96 99 void js_arr_push(struct js *, jsval_t arr, jsval_t val); 97 100 jsval_t js_mkstr(struct js *, const void *, size_t); 98 101 jsval_t js_mksym(struct js *, const char *desc); 99 - jsval_t js_mkerr_typed(struct js *js, js_err_type_t err_type, const char *fmt, ...); 100 102 jsval_t js_mkfun(jsval_t (*fn)(struct js *, jsval_t *, int)); 101 103 jsval_t js_heavy_mkfun(struct js *js, jsval_t (*fn)(struct js *, jsval_t *, int), jsval_t data); 102 104 jsval_t js_mkprop_fast(struct js *js, jsval_t obj, const char *key, size_t len, jsval_t v);
+3 -4
src/ant.c
··· 2475 2475 return (js_err_type_t)(int)js_getnum(err_type); 2476 2476 } 2477 2477 2478 - jsval_t js_mkerr_typed(struct js *js, js_err_type_t err_type, const char *xx, ...) { 2478 + jsval_t js_create_error(struct js *js, js_err_type_t err_type, jsval_t props, const char *xx, ...) { 2479 2479 va_list ap; 2480 2480 int line = 0, col = 0; 2481 2481 char error_line[256] = {0}; ··· 2507 2507 js_set(js, err_obj, "message", js_mkstr(js, error_msg, msg_len)); 2508 2508 set_slot(js, err_obj, SLOT_ERR_TYPE, js_mknum((double)err_type)); 2509 2509 2510 + if (vtype(props) == T_OBJ) js_merge_obj(js, err_obj, props); 2510 2511 jsval_t proto = js_get_ctor_proto(js, err_name, err_name_len); 2511 2512 if (vtype(proto) == T_OBJ) js_set_proto(js, err_obj, proto); 2512 2513 ··· 22730 22731 22731 22732 jsoff_t koff = loadoff(js, next + (jsoff_t) sizeof(next)); 22732 22733 jsval_t val = loadval(js, next + (jsoff_t) (sizeof(next) + sizeof(koff))); 22733 - jsoff_t klen = offtolen(loadoff(js, koff)); 22734 22734 22735 - char *key = (char *) &js->mem[koff + sizeof(koff)]; 22736 - setprop(js, dst, js_mkstr(js, key, klen), val); 22735 + setprop(js, dst, mkval(T_STR, koff), val); 22737 22736 next = next_prop(header); 22738 22737 } 22739 22738 }
+10 -11
src/modules/fs.c
··· 17 17 #include "modules/fs.h" 18 18 #include "modules/symbol.h" 19 19 20 + #define fs_err_code(js, code, op, path) ({ \ 21 + jsval_t _props = js_mkobj(js); \ 22 + js_set(js, _props, "code", js_mkstr(js, code, strlen(code))); \ 23 + js_mkerr_props(js, JS_ERR_TYPE, _props, "%s: %s, %s '%s'", code, strerror(errno), op, path); \ 24 + }) 25 + 20 26 typedef enum { 21 27 FS_OP_READ, 22 28 FS_OP_WRITE, ··· 1014 1020 1015 1021 if (result != 0) { 1016 1022 const char *code = errno_to_code(errno); 1017 - jsval_t err = js_mkerr(js, "%s: %s, stat '%s'", code, strerror(errno), path_cstr); 1018 - js_set(js, js->thrown_value, "code", js_mkstr(js, code, strlen(code))); 1019 - free(path_cstr); 1020 - 1021 - return err; 1023 + jsval_t err = fs_err_code(js, code, "stat", path_cstr); 1024 + free(path_cstr); return err; 1022 1025 } 1023 1026 1024 1027 free(path_cstr); ··· 1126 1129 1127 1130 char *path_cstr = strndup(path, path_len); 1128 1131 if (!path_cstr) return js_mkerr(js, "Out of memory"); 1129 - 1130 1132 int result = access(path_cstr, mode); 1131 1133 1132 1134 if (result != 0) { 1133 1135 const char *code = errno_to_code(errno); 1134 - jsval_t err = js_mkerr(js, "%s: %s, access '%s'", code, strerror(errno), path_cstr); 1135 - js_set(js, js->thrown_value, "code", js_mkstr(js, code, strlen(code))); 1136 - free(path_cstr); 1137 - 1138 - return err; 1136 + jsval_t err = fs_err_code(js, code, "access", path_cstr); 1137 + free(path_cstr); return err; 1139 1138 } 1140 1139 1141 1140 free(path_cstr);