diff --git a/jscompile.c b/jscompile.c index 27908c4..b8a430a 100644 --- a/jscompile.c +++ b/jscompile.c @@ -295,7 +295,6 @@ static void cassign(JF, js_Ast *lhs, js_Ast *rhs) break; default: jsC_error(J, lhs, "invalid l-value in assignment"); - break; } } @@ -331,7 +330,6 @@ static void cassignforin(JF, js_Ast *stm) break; default: jsC_error(J, lhs, "invalid l-value in for-in loop assignment"); - break; } } @@ -357,7 +355,6 @@ static void cassignop1(JF, js_Ast *lhs, int dup) break; default: jsC_error(J, lhs, "invalid l-value in assignment"); - break; } } @@ -374,7 +371,6 @@ static void cassignop2(JF, js_Ast *lhs) break; default: jsC_error(J, lhs, "invalid l-value in assignment"); - break; } } @@ -403,7 +399,6 @@ static void cdelete(JF, js_Ast *exp) break; default: jsC_error(J, exp, "invalid l-value in delete expression"); - break; } } @@ -612,7 +607,7 @@ static void cexp(JF, js_Ast *exp) /* Patch break and continue statements */ -static void addjump(JF, js_AstType type, js_Ast *target, int inst) +static void addjump(JF, enum js_AstType type, js_Ast *target, int inst) { js_JumpList *jump = malloc(sizeof *jump); jump->type = type; @@ -632,14 +627,14 @@ static void labeljumps(JF, js_JumpList *jump, int baddr, int caddr) } } -static int isloop(js_AstType T) +static int isloop(enum js_AstType T) { return T == STM_DO || T == STM_WHILE || T == STM_FOR || T == STM_FOR_VAR || T == STM_FOR_IN || T == STM_FOR_IN_VAR; } -static int isfun(js_AstType T) +static int isfun(enum js_AstType T) { return T == AST_FUNDEC || T == EXP_FUN || T == EXP_PROP_GET || T == EXP_PROP_SET; } @@ -699,7 +694,7 @@ static js_Ast *returntarget(JF, js_Ast *node) /* Emit code to rebalance stack and scopes during an abrupt exit */ -static void cexit(JF, js_AstType T, js_Ast *node, js_Ast *target) +static void cexit(JF, enum js_AstType T, js_Ast *node, js_Ast *target) { js_Ast *prev; do { diff --git a/jscompile.h b/jscompile.h index 335d8a9..449e4ba 100644 --- a/jscompile.h +++ b/jscompile.h @@ -1,8 +1,6 @@ #ifndef js_compile_h #define js_compile_h -typedef enum js_OpCode js_OpCode; - enum js_OpCode { OP_POP, /* A -- */ @@ -151,7 +149,7 @@ struct js_Function js_Function *jsC_compilefunction(js_State *J, js_Ast *prog); js_Function *jsC_compile(js_State *J, js_Ast *prog); -const char *jsC_opcodestring(int opcode); +const char *jsC_opcodestring(enum js_OpCode opcode); void jsC_dumpfunction(js_State *J, js_Function *fun); #endif diff --git a/jsdump.c b/jsdump.c index 7027f9d..09d7e7f 100644 --- a/jsdump.c +++ b/jsdump.c @@ -17,21 +17,21 @@ static const char *opname[] = { #include "opnames.h" }; -const char *jsP_aststring(js_AstType type) +const char *jsP_aststring(enum js_AstType type) { if (type > nelem(astname)) return ""; return astname[type]; } -const char *jsC_opcodestring(int opcode) +const char *jsC_opcodestring(enum js_OpCode opcode) { - if (opcode < 0 || opcode > nelem(opname)) + if (opcode > nelem(opname)) return ""; return opname[opcode]; } -static int prec(js_AstType type) +static int prec(enum js_AstType type) { switch (type) { case EXP_IDENTIFIER: diff --git a/jsi.h b/jsi.h index 102bb48..056c288 100644 --- a/jsi.h +++ b/jsi.h @@ -45,6 +45,7 @@ int js_utfptrtoidx(const char *s, const char *p); const char *js_utfidxtoptr(const char *s, int i); void js_dup(js_State *J); +void js_dup2(js_State *J); void js_rot2(js_State *J); void js_rot3(js_State *J); void js_rot2pop1(js_State *J); diff --git a/jsmath.c b/jsmath.c index 0badc15..7796881 100644 --- a/jsmath.c +++ b/jsmath.c @@ -126,14 +126,14 @@ void jsB_initmath(js_State *J) { js_pushobject(J, jsV_newobject(J, JS_CMATH, J->Object_prototype)); { - jsB_propn(J, "E", M_E); - jsB_propn(J, "LN10", M_LN10); - jsB_propn(J, "LN2", M_LN2); - jsB_propn(J, "LOG2E", M_LOG2E); - jsB_propn(J, "LOG10E", M_LOG10E); - jsB_propn(J, "PI", M_PI); - jsB_propn(J, "SQRT1_2", M_SQRT1_2); - jsB_propn(J, "SQRT2", M_SQRT2); + jsB_propn(J, "E", 2.7182818284590452354); + jsB_propn(J, "LN10", 2.302585092994046); + jsB_propn(J, "LN2", 0.6931471805599453); + jsB_propn(J, "LOG2E", 1.4426950408889634); + jsB_propn(J, "LOG10E", 0.4342944819032518); + jsB_propn(J, "PI", 3.1415926535897932); + jsB_propn(J, "SQRT1_2", 0.7071067811865476); + jsB_propn(J, "SQRT2", 1.4142135623730951); jsB_propf(J, "abs", Math_abs, 1); jsB_propf(J, "acos", Math_acos, 1); diff --git a/jsparse.h b/jsparse.h index 836d7a2..db860de 100644 --- a/jsparse.h +++ b/jsparse.h @@ -1,8 +1,6 @@ #ifndef js_parse_h #define js_parse_h -typedef enum js_AstType js_AstType; - enum js_AstType { AST_LIST, @@ -120,7 +118,7 @@ typedef struct js_JumpList js_JumpList; struct js_JumpList { - js_AstType type; + enum js_AstType type; int inst; js_JumpList *next; }; @@ -141,7 +139,7 @@ js_Ast *jsP_parsefunction(js_State *J, const char *filename, const char *params, js_Ast *jsP_parse(js_State *J, const char *filename, const char *source); void jsP_freeparse(js_State *J); -const char *jsP_aststring(js_AstType type); +const char *jsP_aststring(enum js_AstType type); void jsP_dumpsyntax(js_State *J, js_Ast *prog); void jsP_dumplist(js_State *J, js_Ast *prog); diff --git a/jsproperty.c b/jsproperty.c index c96bd9f..1cd256c 100644 --- a/jsproperty.c +++ b/jsproperty.c @@ -144,7 +144,7 @@ static js_Property *delete(js_State *J, js_Property *node, const char *name) } -js_Object *jsV_newobject(js_State *J, js_Class type, js_Object *prototype) +js_Object *jsV_newobject(js_State *J, enum js_Class type, js_Object *prototype) { js_Object *obj = calloc(sizeof(js_Object), 1); obj->gcmark = 0; diff --git a/jsregexp.c b/jsregexp.c index 403ebbf..c1a1270 100644 --- a/jsregexp.c +++ b/jsregexp.c @@ -42,7 +42,7 @@ int js_RegExp_prototype_exec(js_State *J, js_Regexp *re, const char *text) opts = 0; if (re->flags & JS_REGEXP_G) { - if (re->last < 0 || re->last > strlen(text)) { + if (re->last > strlen(text)) { re->last = 0; js_pushnull(J); return 1; diff --git a/jsrun.c b/jsrun.c index bcc788b..ad3bd89 100644 --- a/jsrun.c +++ b/jsrun.c @@ -594,7 +594,7 @@ const char *js_ref(js_State *J) s = v->u.boolean ? "_True" : "_False"; break; case JS_TOBJECT: - sprintf(buf, "%p", v->u.object); + sprintf(buf, "%p", (void*)v->u.object); s = js_intern(J, buf); break; default: @@ -998,7 +998,7 @@ static void jsR_run(js_State *J, js_Function *F) const char **ST = F->strtab; short *pcstart = F->code; short *pc = F->code; - js_OpCode opcode; + enum js_OpCode opcode; int offset; const char *str; @@ -1301,14 +1301,14 @@ static void jsR_run(js_State *J, js_Function *F) ix = js_toint32(J, -2); uy = js_touint32(J, -1); js_pop(J, 2); - js_pushnumber(J, ix >> (uy & 0x1F)); break; + js_pushnumber(J, ix >> (uy & 0x1F)); break; case OP_USHR: ux = js_touint32(J, -2); uy = js_touint32(J, -1); js_pop(J, 2); - js_pushnumber(J, ux >> (uy & 0x1F)); break; + js_pushnumber(J, ux >> (uy & 0x1F)); break; /* Relational operators */ diff --git a/jsvalue.h b/jsvalue.h index afdf375..85d6078 100644 --- a/jsvalue.h +++ b/jsvalue.h @@ -1,9 +1,6 @@ #ifndef js_object_h #define js_object_h -typedef enum js_Type js_Type; -typedef enum js_Class js_Class; - typedef struct js_Property js_Property; typedef struct js_Iterator js_Iterator; @@ -36,7 +33,7 @@ enum js_Class { struct js_Value { - js_Type type; + enum js_Type type; union { int boolean; double number; @@ -55,7 +52,7 @@ struct js_Regexp struct js_Object { - js_Class type; + enum js_Class type; int extensible; js_Property *properties; js_Property *head, *tail; /* for enumeration */ @@ -133,7 +130,7 @@ const char *jsV_numbertostring(js_State *J, double number); double jsV_stringtonumber(js_State *J, const char *string); /* jsproperty.c */ -js_Object *jsV_newobject(js_State *J, js_Class type, js_Object *prototype); +js_Object *jsV_newobject(js_State *J, enum js_Class type, js_Object *prototype); js_Property *jsV_getownproperty(js_State *J, js_Object *obj, const char *name); js_Property *jsV_getpropertyx(js_State *J, js_Object *obj, const char *name, int *own); js_Property *jsV_getproperty(js_State *J, js_Object *obj, const char *name);