cvsuser 04/08/02 22:14:23
Modified: ast node.c
languages/python/t/basic 02_expr.t
Log:
ast 5 - better var handling and code expansion
Revision Changes Path
1.7 +22 -22 parrot/ast/node.c
Index: node.c
===================================================================
RCS file: /cvs/public/parrot/ast/node.c,v
retrieving revision 1.6
retrieving revision 1.7
diff -u -w -r1.6 -r1.7
--- node.c 2 Aug 2004 13:33:02 -0000 1.6
+++ node.c 3 Aug 2004 05:14:19 -0000 1.7
@@ -1,6 +1,6 @@
/*
Copyright: 2001-2004 The Perl Foundation. All Rights Reserved.
-$Id: node.c,v 1.6 2004/08/02 13:33:02 leo Exp $
+$Id: node.c,v 1.7 2004/08/03 05:14:19 leo Exp $
=head1 NAME
@@ -182,24 +182,25 @@
}
static nodeType*
-exp_default(Interp* interpreter, nodeType *p)
+exp_next(Interp* interpreter, nodeType *p)
{
- nodeType *child;
- nodeType *next = p->next;
- child = NODE0(p);
- if (child)
- child->expand(interpreter, child);
- if (next)
+ nodeType *next;
+ for (next = p->next; next; next = next->next) {
+ if (next->expand)
next->expand(interpreter, next);
+ }
return p;
}
static nodeType*
-exp_next(Interp* interpreter, nodeType *p)
+exp_default(Interp* interpreter, nodeType *p)
{
- nodeType *next = p->next;
- if (next)
+ nodeType *next;
+ next = NODE0(p);
+ for (; next; next = next->next) {
+ if (next->expand)
next->expand(interpreter, next);
+ }
return p;
}
@@ -218,7 +219,7 @@
regs[0] = NODE0(var)->u.r;
regs[1] = rhs->u.r;
insINS(interpreter, unit, ins, "assign", regs, 2);
- return exp_next(interpreter, p);
+ return rhs;
}
static nodeType*
@@ -256,7 +257,7 @@
nodeType *var = NODE0(p);
insert_new(interpreter, var, "Undef");
- return exp_next(interpreter, p);
+ return NULL;
}
static nodeType*
@@ -278,8 +279,7 @@
i->r[1] = mk_pcc_sub(str_dup(i->r[0]->name), 0);
add_namespace(interpreter, i->r[1]);
i->r[1]->pcc_sub->pragma = P_MAIN|P_PROTOTYPED ;
- doc = NODE0(p); /* TODO */
- return exp_default(interpreter, doc);
+ return exp_default(interpreter, p);
}
static nodeType*
@@ -303,7 +303,7 @@
fatal(1, "exp_Py_Print", "unknown node to print: '%s'", d->d);
ins = insINS(interpreter, unit, ins, "print_item", regs, 1);
}
- return exp_next(interpreter, p);
+ return NULL;
}
static nodeType*
@@ -313,19 +313,19 @@
Instruction *ins = unit->last_ins;
SymReg *regs[IMCC_MAX_REGS];
insINS(interpreter, unit, ins, "print_newline", regs, 0);
- return exp_next(interpreter, p);
+ return NULL;
}
static nodeType*
exp_Src_File(Interp* interpreter, nodeType *p)
{
- return exp_default(interpreter, p);
+ return exp_next(interpreter, p);
}
static nodeType*
exp_Src_Lines(Interp* interpreter, nodeType *p)
{
- return exp_default(interpreter, p);
+ return exp_next(interpreter, p);
}
@@ -358,7 +358,7 @@
{ "Src_File", create_1, exp_Src_File, NULL, NULL },
{ "Src_Line", create_1, exp_Src_Lines, NULL, NULL },
{ "Stmts", create_1, exp_default, NULL, NULL },
- { "_", create_0, exp_next, NULL, NULL }
+ { "_", create_0, NULL, NULL, NULL }
#define CONST_NODE 4
};
1.8 +7 -2 parrot/languages/python/t/basic/02_expr.t
Index: 02_expr.t
===================================================================
RCS file: /cvs/public/parrot/languages/python/t/basic/02_expr.t,v
retrieving revision 1.7
retrieving revision 1.8
diff -u -w -r1.7 -r1.8
--- 02_expr.t 2 Aug 2004 13:33:09 -0000 1.7
+++ 02_expr.t 3 Aug 2004 05:14:23 -0000 1.8
@@ -1,9 +1,9 @@
-# $Id: 02_expr.t,v 1.7 2004/08/02 13:33:09 leo Exp $
+# $Id: 02_expr.t,v 1.8 2004/08/03 05:14:23 leo Exp $
use strict;
use lib '../../lib';
-use Parrot::Test tests => 10;
+use Parrot::Test tests => 11;
sub test {
language_output_is('python', $_[0], '', $_[1]);
@@ -46,6 +46,11 @@
print a
CODE
+test( <<'CODE', 'assign a,b' );
+a = b = 2
+print a, b
+CODE
+
SKIP: {
skip("Not yet", 3);