Split debug printing of bytecode etc into "pp" tool.

This commit is contained in:
Tor Andersson
2023-01-05 15:32:41 +01:00
parent d283465777
commit dd149b98bd
7 changed files with 941 additions and 994 deletions
+6 -5
View File
@@ -63,16 +63,17 @@ shell: $(OUT)/mujs $(OUT)/mujs-pp
static: $(OUT)/libmujs.a
shared: $(OUT)/libmujs.$(SO_EXT)
astnames.h: jsparse.h
grep -E '(AST|EXP|STM)_' jsparse.h | sed 's/^[^A-Z]*\(AST_\)*/"/;s/,.*/",/' | tr A-Z a-z > $@
astnames.h: jsi.h
grep -E '\<(AST|EXP|STM)_' jsi.h | sed 's/^[^A-Z]*\(AST_\)*/"/;s/,.*/",/' | tr A-Z a-z > $@
opnames.h: jsi.h
grep -E '\<OP_' jsi.h | sed 's/^[^A-Z]*OP_/"/;s/,.*/",/' | tr A-Z a-z > $@
opnames.h: jscompile.h
grep -E 'OP_' jscompile.h | sed 's/^[^A-Z]*OP_/"/;s/,.*/",/' | tr A-Z a-z > $@
one.c: $(SRCS)
ls $(SRCS) | awk '{print "#include \""$$1"\""}' > $@
jsdump.c: astnames.h opnames.h
pp.c: astnames.h opnames.h
$(OUT)/%.o: %.c $(HDRS)
@ mkdir -p $(@D)
+1 -1
View File
@@ -775,7 +775,7 @@ static void cexp(JF, js_Ast *exp)
break;
default:
jsC_error(J, exp, "unknown expression: (%s)", jsP_aststring(exp->type));
jsC_error(J, exp, "unknown expression type");
}
}
-939
View File
File diff suppressed because it is too large Load Diff
-10
View File
@@ -483,10 +483,6 @@ void jsV_resizearray(js_State *J, js_Object *obj, int newlen);
void jsV_unflattenarray(js_State *J, js_Object *obj);
void jsV_growarray(js_State *J, js_Object *obj);
/* jsdump.c */
void js_dumpobject(js_State *J, js_Object *obj);
void js_dumpvalue(js_State *J, js_Value v);
/* Lexer */
enum
@@ -706,10 +702,6 @@ 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(enum js_AstType type);
void jsP_dumpsyntax(js_State *J, js_Ast *prog, int minify);
void jsP_dumplist(js_State *J, js_Ast *prog);
/* Compiler */
enum js_OpCode
@@ -846,8 +838,6 @@ struct js_Function
js_Function *jsC_compilefunction(js_State *J, js_Ast *prog);
js_Function *jsC_compilescript(js_State *J, js_Ast *prog, int default_strict);
const char *jsC_opcodestring(enum js_OpCode opcode);
void jsC_dumpfunction(js_State *J, js_Function *fun);
/* Builtins */
+53 -25
View File
@@ -1455,28 +1455,49 @@ void js_throw(js_State *J)
/* Main interpreter loop */
static void jsR_dumpstack(js_State *J)
static void js_dumpvalue(js_State *J, js_Value v)
{
int i;
printf("stack {\n");
for (i = 0; i < TOP; ++i) {
putchar(i == BOT ? '>' : ' ');
printf("%4d: ", i);
js_dumpvalue(J, STACK[i]);
putchar('\n');
switch (v.type) {
case JS_TUNDEFINED: printf("undefined"); break;
case JS_TNULL: printf("null"); break;
case JS_TBOOLEAN: printf(v.u.boolean ? "true" : "false"); break;
case JS_TNUMBER: printf("%.9g", v.u.number); break;
case JS_TSHRSTR: printf("'%s'", v.u.shrstr); break;
case JS_TLITSTR: printf("'%s'", v.u.litstr); break;
case JS_TMEMSTR: printf("'%s'", v.u.memstr->p); break;
case JS_TOBJECT:
if (v.u.object == J->G) {
printf("[Global]");
break;
}
switch (v.u.object->type) {
case JS_COBJECT: printf("[Object %p]", (void*)v.u.object); break;
case JS_CARRAY: printf("[Array %p]", (void*)v.u.object); break;
case JS_CFUNCTION:
printf("[Function %p, %s, %s:%d]",
(void*)v.u.object,
v.u.object->u.f.function->name,
v.u.object->u.f.function->filename,
v.u.object->u.f.function->line);
break;
case JS_CSCRIPT: printf("[Script %s]", v.u.object->u.f.function->filename); break;
case JS_CCFUNCTION: printf("[CFunction %s]", v.u.object->u.c.name); break;
case JS_CBOOLEAN: printf("[Boolean %d]", v.u.object->u.boolean); break;
case JS_CNUMBER: printf("[Number %g]", v.u.object->u.number); break;
case JS_CSTRING: printf("[String'%s']", v.u.object->u.s.string); break;
case JS_CERROR: printf("[Error]"); break;
case JS_CARGUMENTS: printf("[Arguments %p]", (void*)v.u.object); break;
case JS_CITERATOR: printf("[Iterator %p]", (void*)v.u.object); break;
case JS_CUSERDATA:
printf("[Userdata %s %p]", v.u.object->u.user.tag, v.u.object->u.user.data);
break;
default: printf("[Object %p]", (void*)v.u.object); break;
}
break;
}
printf("}\n");
}
static void jsR_dumpenvironment(js_State *J, js_Environment *E, int d)
{
printf("scope %d ", d);
js_dumpobject(J, E->variables);
if (E->outer)
jsR_dumpenvironment(J, E->outer, d+1);
}
void js_stacktrace(js_State *J)
static void js_stacktrace(js_State *J)
{
int n;
printf("stack trace:\n");
@@ -1494,15 +1515,22 @@ void js_stacktrace(js_State *J)
}
}
static void js_dumpstack(js_State *J)
{
int i;
printf("stack {\n");
for (i = 0; i < TOP; ++i) {
putchar(i == BOT ? '>' : ' ');
printf("%4d: ", i);
js_dumpvalue(J, STACK[i]);
putchar('\n');
}
printf("}\n");
}
void js_trap(js_State *J, int pc)
{
if (pc > 0) {
js_Function *F = STACK[BOT-1].u.object->u.f.function;
printf("trap at %d in function ", pc);
jsC_dumpfunction(J, F);
}
jsR_dumpstack(J);
jsR_dumpenvironment(J, J->E, 0);
js_dumpstack(J);
js_stacktrace(J);
}
-1
View File
@@ -4,7 +4,6 @@
#include "jscompile.c"
#include "jsdate.c"
#include "jsdtoa.c"
#include "jsdump.c"
#include "jserror.c"
#include "jsfunction.c"
#include "jsgc.c"
+881 -13
View File
File diff suppressed because it is too large Load Diff