aboutsummaryrefslogtreecommitdiff
path: root/sys/cmd/rc/code.c
diff options
context:
space:
mode:
Diffstat (limited to 'sys/cmd/rc/code.c')
-rw-r--r--sys/cmd/rc/code.c16
1 files changed, 11 insertions, 5 deletions
diff --git a/sys/cmd/rc/code.c b/sys/cmd/rc/code.c
index 6deed89..8dec021 100644
--- a/sys/cmd/rc/code.c
+++ b/sys/cmd/rc/code.c
@@ -13,9 +13,9 @@ struct Interpreter
Code *compiled = nil;
static struct Interpreter interpreter;
-#define emiti(x) ((void)(interpreter.i != interpreter.cap || grow()), interpreter.code[interpreter.i].i = (x), interpreter.i++)
-#define emitf(x) ((void)(interpreter.i != interpreter.cap || grow()), interpreter.code[interpreter.i].f = (x), interpreter.i++)
-#define emits(x) ((void)(interpreter.i != interpreter.cap || grow()), interpreter.code[interpreter.i].s = (x), interpreter.i++)
+#define emiti(x) ((void)(interpreter.i != interpreter.cap || grow()), interpreter.code[interpreter.i].i = (x), interpreter.i++)
+#define emitf(x) ((void)(interpreter.i != interpreter.cap || grow()), interpreter.code[interpreter.i].f = (x), interpreter.i++)
+#define emits(x) ((void)(interpreter.i != interpreter.cap || grow()), interpreter.code[interpreter.i].s = (x), interpreter.i++)
static
int
@@ -59,18 +59,21 @@ walk(Tree *node)
emitf(Xdollar);
break;
+#if 0
case '&':
emitf(Xasync);
p = emiti(0);
emitf(Xexit);
stashaddr(p);
break;
+#endif
case ';':
walk(node->child[0]);
walk(node->child[1]);
break;
+#if 0
case '^':
emitf(Xmark);
walk(node->child[1]);
@@ -78,6 +81,7 @@ walk(Tree *node)
walk(node->child[0]);
emitf(Xconcatenate);
break;
+#endif
case Targs:
walk(node->child[1]);
@@ -149,9 +153,11 @@ int
compile(Tree *node)
{
flush(errio);
- print(errio, "%t\n", node);
+ //print(errio, "%t\n", node);
+
+ interpreter.i = 0;
+ interpreter.code = emalloc(100*sizeof(*interpreter.code));
- interpreter.i = 0;
emiti(1); // reference count
walk(node);