some cleanup
This commit is contained in:
@@ -307,9 +307,6 @@ typedef enum JSErrorEnum {
|
||||
/* Compatibility: JS_TAG_STRING is an alias for text type checks */
|
||||
#define JS_TAG_STRING JS_TAG_STRING_IMM
|
||||
|
||||
/* JS_TAG_FUNCTION doesn't exist in new encoding - use JS_IsFunction check instead */
|
||||
#define JS_TAG_FUNCTION 0xFE /* dummy value, never matches any tag */
|
||||
|
||||
/* JS_ThrowMemoryError is an alias for JS_ThrowOutOfMemory */
|
||||
#define JS_ThrowMemoryError(ctx) JS_ThrowOutOfMemory(ctx)
|
||||
|
||||
@@ -318,8 +315,6 @@ static inline objhdr_t objhdr_set_cap56 (objhdr_t h, uint64_t cap) {
|
||||
return (h & 0xFF) | ((cap & OBJHDR_CAP_MASK) << OBJHDR_CAP_SHIFT);
|
||||
}
|
||||
|
||||
typedef enum OPCodeEnum OPCodeEnum;
|
||||
|
||||
/* ============================================================
|
||||
Buddy Allocator for Actor Memory Blocks
|
||||
============================================================ */
|
||||
@@ -775,27 +770,6 @@ typedef struct JSFrame {
|
||||
JSValue slots[]; /* [this][args][captured][locals][temps] */
|
||||
} JSFrame;
|
||||
|
||||
/* Execution state returned by vm_execute_frame */
|
||||
typedef enum {
|
||||
VM_EXEC_NORMAL, /* Continue executing current frame */
|
||||
VM_EXEC_RETURN, /* Frame returned, pop and resume caller */
|
||||
VM_EXEC_CALL, /* Need to push new frame for call */
|
||||
VM_EXEC_EXCEPTION, /* Exception thrown, unwind frames */
|
||||
} VMExecState;
|
||||
|
||||
/* Call info for frame push */
|
||||
typedef struct {
|
||||
JSValue func_obj;
|
||||
JSValue this_obj;
|
||||
int argc;
|
||||
JSValue *argv;
|
||||
const uint8_t *ret_pc;
|
||||
int ret_sp_offset;
|
||||
int call_argc;
|
||||
int call_has_this;
|
||||
int is_tail_call;
|
||||
} VMCallInfo;
|
||||
|
||||
static inline objhdr_t objhdr_set_s (objhdr_t h, bool s) {
|
||||
return s ? (h | OBJHDR_S_MASK) : (h & ~OBJHDR_S_MASK);
|
||||
}
|
||||
@@ -1067,9 +1041,6 @@ struct JSContext {
|
||||
// todo: want this, but should be a simple increment/decrement counter while frames are pushed
|
||||
size_t stack_depth;
|
||||
size_t stack_limit;
|
||||
|
||||
/* Parser state (for GC to scan cpool during parsing) */
|
||||
struct JSFunctionDef *current_parse_fd;
|
||||
};
|
||||
|
||||
/* ============================================================
|
||||
@@ -1244,46 +1215,6 @@ typedef struct JSFunction {
|
||||
} u;
|
||||
} JSFunction;
|
||||
|
||||
/* for the encoding of the pc2line table */
|
||||
#define PC2LINE_BASE (-1)
|
||||
#define PC2LINE_RANGE 5
|
||||
#define PC2LINE_OP_FIRST 1
|
||||
#define PC2LINE_DIFF_PC_MAX ((255 - PC2LINE_OP_FIRST) / PC2LINE_RANGE)
|
||||
|
||||
/* New simplified compiled unit structure for Phase 1+ simplification.
|
||||
Replaces JSFunctionBytecode with a simpler model:
|
||||
- No closure machinery (uses outer_frame chain at runtime)
|
||||
- Free variables resolved at link time against env + globals
|
||||
- Nested functions stored as separate units in cpool */
|
||||
typedef struct JSCompiledUnit {
|
||||
objhdr_t header; /* must come first */
|
||||
|
||||
/* Bytecode (self pointer) */
|
||||
uint8_t *byte_code_buf;
|
||||
int byte_code_len;
|
||||
|
||||
/* Constants - strings, numbers, nested unit refs (self pointer) */
|
||||
JSValue *cpool;
|
||||
int cpool_count;
|
||||
|
||||
/* Stack requirements */
|
||||
uint16_t local_count; /* total local slots (args + vars) */
|
||||
uint16_t stack_size; /* operand stack depth */
|
||||
|
||||
/* Flags */
|
||||
uint8_t has_debug : 1;
|
||||
uint8_t read_only_bytecode : 1;
|
||||
|
||||
/* Debug info (optional - only present if has_debug) */
|
||||
struct {
|
||||
JSValue filename;
|
||||
int source_len;
|
||||
int pc2line_len;
|
||||
uint8_t *pc2line_buf;
|
||||
char *source;
|
||||
} debug;
|
||||
} JSCompiledUnit;
|
||||
|
||||
/* ============================================================
|
||||
Context-Neutral Module Format (Phase 2+)
|
||||
Struct definitions are in quickjs.h
|
||||
@@ -1301,7 +1232,6 @@ typedef struct JSCompiledUnit {
|
||||
#endif
|
||||
|
||||
JSValue js_call_c_function (JSContext *ctx, JSValue func_obj, JSValue this_obj, int argc, JSValue *argv);
|
||||
JSValue js_call_bound_function (JSContext *ctx, JSValue func_obj, JSValue this_obj, int argc, JSValue *argv);
|
||||
JSValue JS_CallInternal (JSContext *ctx, JSValue func_obj, JSValue this_obj, int argc, JSValue *argv, int flags);
|
||||
JSValue JS_CallRegisterVM(JSContext *ctx, JSCodeRegister *code, JSValue this_obj, int argc, JSValue *argv, JSValue env, JSValue outer_frame);
|
||||
int JS_DeleteProperty (JSContext *ctx, JSValue obj, JSValue prop);
|
||||
@@ -1319,9 +1249,6 @@ JSValue js_new_function (JSContext *ctx, JSFunctionKind kind);
|
||||
/* Forward declaration - helper to set cap in objhdr */
|
||||
static inline objhdr_t objhdr_set_cap56 (objhdr_t h, uint64_t cap);
|
||||
|
||||
/* JS_ThrowMemoryError is an alias for JS_ThrowOutOfMemory */
|
||||
#define JS_ThrowMemoryError(ctx) JS_ThrowOutOfMemory(ctx)
|
||||
|
||||
/* GC-SAFE: JS_SetPropertyInternal: same as JS_SetProperty but doesn't check stone.
|
||||
Internal use only. May trigger GC if record needs to resize. */
|
||||
|
||||
@@ -1508,8 +1435,6 @@ typedef struct PPretext {
|
||||
int cap;
|
||||
} PPretext;
|
||||
|
||||
#define JS_CALL_FLAG_COPY_ARGV (1 << 1)
|
||||
|
||||
extern JSClassID js_class_id_alloc;
|
||||
|
||||
/* === Forward declarations for functions split across modules === */
|
||||
@@ -1519,12 +1444,6 @@ int ctx_gc (JSContext *ctx, int allow_grow, size_t alloc_size);
|
||||
JSValue JS_CallInternal (JSContext *ctx, JSValue func_obj, JSValue this_obj, int argc, JSValue *argv, int flags);
|
||||
|
||||
/* runtime.c exports */
|
||||
JSValue JS_ThrowStackOverflow (JSContext *ctx);
|
||||
int JS_DefineObjectName (JSContext *ctx, JSValue obj, JSValue name);
|
||||
int JS_DefineObjectNameComputed (JSContext *ctx, JSValue obj, JSValue str);
|
||||
int js_method_set_properties (JSContext *ctx, JSValue func_obj, JSValue name, int flags, JSValue home_obj);
|
||||
JSValue JS_GetPropertyValue (JSContext *ctx, JSValue this_obj, JSValue prop);
|
||||
__exception int JS_CopyDataProperties (JSContext *ctx, JSValue target, JSValue source, JSValue excluded, BOOL setprop);
|
||||
int js_string_compare_value (JSContext *ctx, JSValue op1, JSValue op2, BOOL eq_only);
|
||||
int js_string_compare_value_nocase (JSContext *ctx, JSValue op1, JSValue op2);
|
||||
JSValue js_regexp_constructor (JSContext *ctx, JSValue this_val, int argc, JSValue *argv);
|
||||
@@ -1533,11 +1452,6 @@ int JS_HasPropertyKey (JSContext *ctx, JSValue obj, JSValue key);
|
||||
void *js_realloc_rt (void *ptr, size_t size);
|
||||
char *js_strdup_rt (const char *str);
|
||||
JSValue JS_ConcatString (JSContext *ctx, JSValue op1, JSValue op2);
|
||||
__exception int js_post_inc_slow (JSContext *ctx, JSValue *sp, OPCodeEnum op);
|
||||
no_inline int js_not_slow (JSContext *ctx, JSValue *sp);
|
||||
no_inline int js_relational_slow (JSContext *ctx, JSValue *sp, OPCodeEnum op);
|
||||
__exception int js_operator_in (JSContext *ctx, JSValue *sp);
|
||||
__exception int js_operator_delete (JSContext *ctx, JSValue *sp);
|
||||
JSText *pretext_init (JSContext *ctx, int capacity);
|
||||
JSText *pretext_putc (JSContext *ctx, JSText *s, uint32_t c);
|
||||
JSText *pretext_concat_value (JSContext *ctx, JSText *s, JSValue v);
|
||||
@@ -1563,19 +1477,6 @@ uint64_t get_text_hash (JSText *text);
|
||||
void pack_utf32_to_words (const uint32_t *utf32, uint32_t len, uint64_t *packed);
|
||||
int text_equal (JSText *a, const uint64_t *packed_b, uint32_t len_b);
|
||||
|
||||
static inline JSValue *get_upvalue_ptr (JSValue frame_val, int depth, int slot) {
|
||||
if (JS_IsNull(frame_val)) return NULL;
|
||||
JSFrame *frame = JS_VALUE_GET_FRAME(frame_val);
|
||||
while (depth > 0) {
|
||||
JSFunction *fn = JS_VALUE_GET_FUNCTION(frame->function);
|
||||
frame_val = fn->u.reg.outer_frame;
|
||||
if (JS_IsNull(frame_val)) return NULL;
|
||||
frame = JS_VALUE_GET_FRAME(frame_val);
|
||||
depth--;
|
||||
}
|
||||
return &frame->slots[slot];
|
||||
}
|
||||
|
||||
void print_backtrace (JSContext *ctx, const char *filename, int line_num, int col_num);
|
||||
JSValue JS_ThrowError2 (JSContext *ctx, JSErrorEnum error_num, const char *fmt, va_list ap, BOOL add_backtrace);
|
||||
JSValue gc_copy_value (JSContext *ctx, JSValue v, uint8_t *from_base, uint8_t *from_end, uint8_t *to_base, uint8_t **to_free, uint8_t *to_end);
|
||||
@@ -1587,10 +1488,6 @@ PPretext *ppretext_append_jsvalue (PPretext *p, JSValue str);
|
||||
PPretext *ppretext_append_int (PPretext *p, int n);
|
||||
JSValue js_atof (JSContext *ctx, const char *str, const char **pp, int radix, int flags);
|
||||
|
||||
/* Defines from runtime section needed by cell_js.c */
|
||||
#define DEFINE_GLOBAL_LEX_VAR (1 << 7)
|
||||
#define DEFINE_GLOBAL_FUNC_VAR (1 << 6)
|
||||
|
||||
#define ATOD_INT_ONLY (1 << 0)
|
||||
/* accept Oo and Ob prefixes in addition to 0x prefix if radix = 0 */
|
||||
#define ATOD_ACCEPT_BIN_OCT (1 << 2)
|
||||
@@ -1607,14 +1504,6 @@ JSValue js_atof (JSContext *ctx, const char *str, const char **pp, int radix, in
|
||||
/* accept -0x1 */
|
||||
#define ATOD_ACCEPT_PREFIX_AFTER_SIGN (1 << 10)
|
||||
|
||||
#define GLOBAL_VAR_OFFSET 0x40000000
|
||||
#define ARGUMENT_VAR_OFFSET 0x20000000
|
||||
|
||||
/* Inline functions from runtime section needed by cell_js.c */
|
||||
static inline void js_dbuf_init (JSContext *ctx, DynBuf *s) {
|
||||
dbuf_init2 (s, ctx->rt, NULL);
|
||||
}
|
||||
|
||||
static inline int to_digit (int c) {
|
||||
if (c >= '0' && c <= '9') return c - '0';
|
||||
else if (c >= 'A' && c <= 'Z') return c - 'A' + 10;
|
||||
@@ -1622,54 +1511,6 @@ static inline int to_digit (int c) {
|
||||
else return 36;
|
||||
}
|
||||
|
||||
static inline void dbuf_put_leb128 (DynBuf *s, uint32_t v) {
|
||||
uint32_t a;
|
||||
for (;;) {
|
||||
a = v & 0x7f;
|
||||
v >>= 7;
|
||||
if (v != 0) {
|
||||
dbuf_putc (s, a | 0x80);
|
||||
} else {
|
||||
dbuf_putc (s, a);
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
static inline void dbuf_put_sleb128 (DynBuf *s, int32_t v1) {
|
||||
uint32_t v = v1;
|
||||
dbuf_put_leb128 (s, (2 * v) ^ -(v >> 31));
|
||||
}
|
||||
|
||||
static inline int get_leb128 (uint32_t *pval, const uint8_t *buf, const uint8_t *buf_end) {
|
||||
const uint8_t *ptr = buf;
|
||||
uint32_t v, a, i;
|
||||
v = 0;
|
||||
for (i = 0; i < 5; i++) {
|
||||
if (unlikely (ptr >= buf_end)) break;
|
||||
a = *ptr++;
|
||||
v |= (a & 0x7f) << (i * 7);
|
||||
if (!(a & 0x80)) {
|
||||
*pval = v;
|
||||
return ptr - buf;
|
||||
}
|
||||
}
|
||||
*pval = 0;
|
||||
return -1;
|
||||
}
|
||||
|
||||
static inline int get_sleb128 (int32_t *pval, const uint8_t *buf, const uint8_t *buf_end) {
|
||||
int ret;
|
||||
uint32_t val;
|
||||
ret = get_leb128 (&val, buf, buf_end);
|
||||
if (ret < 0) {
|
||||
*pval = 0;
|
||||
return -1;
|
||||
}
|
||||
*pval = (val >> 1) ^ -(val & 1);
|
||||
return ret;
|
||||
}
|
||||
|
||||
no_inline int js_realloc_array (JSContext *ctx, void **parray, int elem_size, int *psize, int req_size);
|
||||
static inline int js_resize_array (JSContext *ctx, void **parray, int elem_size, int *psize, int req_size) {
|
||||
if (unlikely (req_size > *psize))
|
||||
@@ -1684,7 +1525,6 @@ JSValue js_key_from_string (JSContext *ctx, JSValue val);
|
||||
/* mach.c exports */
|
||||
JSValue JS_CallRegisterVM(JSContext *ctx, JSCodeRegister *code, JSValue this_obj, int argc, JSValue *argv, JSValue env, JSValue outer_frame);
|
||||
JSFrameRegister *alloc_frame_register(JSContext *ctx, int slot_count);
|
||||
cJSON *mach_find_scope_record(cJSON *scopes, int function_nr);
|
||||
int reg_vm_check_interrupt(JSContext *ctx);
|
||||
|
||||
|
||||
|
||||
Reference in New Issue
Block a user