mirror of
https://github.com/ccxvii/mujs.git
synced 2026-09-21 14:43:34 +08:00
Pretty print and indent STM_BLOCK nodes.
This commit is contained in:
@@ -142,17 +142,33 @@ static const char *strast(int type)
|
||||
}
|
||||
}
|
||||
|
||||
void printlist(js_Ast *n)
|
||||
static void indent(int level)
|
||||
{
|
||||
while (level--)
|
||||
putchar('\t');
|
||||
}
|
||||
|
||||
void printlist(js_Ast *n, int level, const char *sep)
|
||||
{
|
||||
while (n) {
|
||||
printast(n->a);
|
||||
printast(n->a, level);
|
||||
n = n->b;
|
||||
if (n)
|
||||
putchar(' ');
|
||||
fputs(sep, stdout);
|
||||
}
|
||||
}
|
||||
|
||||
void printast(js_Ast *n)
|
||||
void printblock(js_Ast *n, int level)
|
||||
{
|
||||
while (n) {
|
||||
indent(level);
|
||||
printast(n->a, level);
|
||||
putchar('\n');
|
||||
n = n->b;
|
||||
}
|
||||
}
|
||||
|
||||
void printast(js_Ast *n, int level)
|
||||
{
|
||||
switch (n->type) {
|
||||
case AST_IDENTIFIER: printf("%s", n->s); return;
|
||||
@@ -161,15 +177,22 @@ void printast(js_Ast *n)
|
||||
case AST_REGEXP: printf("/%s/", n->s); return;
|
||||
case AST_LIST:
|
||||
putchar('[');
|
||||
printlist(n);
|
||||
printlist(n, level, " ");
|
||||
putchar(']');
|
||||
break;
|
||||
case STM_BLOCK:
|
||||
putchar('{');
|
||||
putchar('\n');
|
||||
printblock(n->a, level + 1);
|
||||
indent(level);
|
||||
putchar('}');
|
||||
break;
|
||||
default:
|
||||
printf("(%s", strast(n->type));
|
||||
if (n->a) { putchar(' '); printast(n->a); }
|
||||
if (n->b) { putchar(' '); printast(n->b); }
|
||||
if (n->c) { putchar(' '); printast(n->c); }
|
||||
if (n->d) { putchar(' '); printast(n->d); }
|
||||
if (n->a) { putchar(' '); printast(n->a, level); }
|
||||
if (n->b) { putchar(' '); printast(n->b, level); }
|
||||
if (n->c) { putchar(' '); printast(n->c, level); }
|
||||
if (n->d) { putchar(' '); printast(n->d, level); }
|
||||
putchar(')');
|
||||
break;
|
||||
}
|
||||
|
||||
@@ -121,6 +121,6 @@ js_Ast *jsP_newsnode(js_State *J, int type, const char *s);
|
||||
js_Ast *jsP_newnnode(js_State *J, int type, double n);
|
||||
void jsP_freeast(js_State *J);
|
||||
|
||||
void printast(js_Ast *n);
|
||||
void printast(js_Ast *n, int level);
|
||||
|
||||
#endif
|
||||
|
||||
+1
-1
@@ -828,7 +828,7 @@ int jsP_parse(js_State *J)
|
||||
}
|
||||
|
||||
next(J);
|
||||
printast(sourcelist(J));
|
||||
printast(sourcelist(J), 0);
|
||||
putchar('\n');
|
||||
|
||||
// TODO: compile to bytecode
|
||||
|
||||
Reference in New Issue
Block a user