[Python-checkins] python/nondist/sandbox/ast astmodule.c,1.8,1.9
jhylton@users.sourceforge.net
jhylton@users.sourceforge.net
Fri, 05 Jul 2002 12:57:02 -0700
Update of /cvsroot/python/python/nondist/sandbox/ast
In directory usw-pr-cvs1:/tmp/cvs-serv29652
Modified Files:
astmodule.c
Log Message:
experiment: add attribute to stmt type.
also:
call set_context recursively for list & tuple assignments.
Lambda requires an arguments() arg.
ad ast_for_sliceop() XXX.
Index: astmodule.c
===================================================================
RCS file: /cvsroot/python/python/nondist/sandbox/ast/astmodule.c,v
retrieving revision 1.8
retrieving revision 1.9
diff -C2 -d -r1.8 -r1.9
*** astmodule.c 30 May 2002 20:09:13 -0000 1.8
--- astmodule.c 5 Jul 2002 19:57:00 -0000 1.9
***************
*** 12,15 ****
--- 12,19 ----
#include "graminit.h"
+ #ifndef LINENO
+ #define LINENO(n) ((n)->n_lineno)
+ #endif
+
#define NEW_IDENTIFIER(n) PyString_InternFromString(STR(n))
***************
*** 57,60 ****
--- 61,65 ----
set_context(expr_ty e, expr_context_ty ctx)
{
+ asdl_seq *s = NULL;
switch (e->kind) {
case Attribute_kind:
***************
*** 69,80 ****
--- 74,95 ----
case List_kind:
e->v.List.ctx = ctx;
+ s = e->v.List.elts;
break;
case Tuple_kind:
e->v.Tuple.ctx = ctx;
+ s = e->v.Tuple.elts;
break;
default:
+ /* This should trigger syntax error */
fprintf(stderr, "can't set context for %d\n", e->kind);
return -1;
}
+ if (s) {
+ int i;
+ for (i = 0; i < asdl_seq_LEN(s); i++) {
+ if (set_context(asdl_seq_get(s, i), ctx) < 0)
+ return -1;
+ }
+ }
return 0;
}
***************
*** 174,177 ****
--- 189,202 ----
}
+ static expr_ty
+ ast_for_sliceop(node *n)
+ {
+ REQ(n, sliceop);
+ if (NCH(n) == 1)
+ return NULL;
+ else
+ return ast_for_expr(CHILD(n, 1));
+ }
+
static arguments_ty
ast_for_arguments(node *n)
***************
*** 254,258 ****
REQ(n, funcdef);
return FunctionDef(name, ast_for_arguments(CHILD(n, 2)),
! ast_for_suite(CHILD(n, 4)));
}
--- 279,283 ----
REQ(n, funcdef);
return FunctionDef(name, ast_for_arguments(CHILD(n, 2)),
! ast_for_suite(CHILD(n, 4)), LINENO(n));
}
***************
*** 262,266 ****
/* lambdef: 'lambda' [varargslist] ':' test */
if (NCH(n) == 3)
! return Lambda(NULL, ast_for_expr(CHILD(n, 2)));
else
return Lambda(ast_for_arguments(CHILD(n, 1)),
--- 287,292 ----
/* lambdef: 'lambda' [varargslist] ':' test */
if (NCH(n) == 3)
! return Lambda(arguments(NULL, NULL, NULL, NULL),
! ast_for_expr(CHILD(n, 2)));
else
return Lambda(ast_for_arguments(CHILD(n, 1)),
***************
*** 392,395 ****
--- 418,422 ----
return Num(PyString_FromString(STR(ch)));
break;
+ }
/* XXX other cases... */
case LPAR: /* tuple */
***************
*** 659,667 ****
fprintf(stderr, "ast_for_expr_stmt(%d, %d)\n", TYPE(n), NCH(n));
if (NCH(n) == 1) {
! return Expr(ast_for_testlist(CHILD(n, 0)));
} else if (TYPE(CHILD(n, 1)) == augassign) {
return AugAssign(ast_for_testlist(CHILD(n, 0)),
ast_for_augassign(CHILD(n, 1)),
! ast_for_testlist(CHILD(n, 2)));
} else {
int i;
--- 686,695 ----
fprintf(stderr, "ast_for_expr_stmt(%d, %d)\n", TYPE(n), NCH(n));
if (NCH(n) == 1) {
! return Expr(ast_for_testlist(CHILD(n, 0)), LINENO(n));
} else if (TYPE(CHILD(n, 1)) == augassign) {
return AugAssign(ast_for_testlist(CHILD(n, 0)),
ast_for_augassign(CHILD(n, 1)),
! ast_for_testlist(CHILD(n, 2)),
! LINENO(n));
} else {
int i;
***************
*** 677,681 ****
asdl_seq_append(targets, e);
}
! return Assign(targets, ast_for_testlist(CHILD(n, NCH(n) - 1)));
}
return NULL;
--- 705,710 ----
asdl_seq_append(targets, e);
}
! return Assign(targets, ast_for_testlist(CHILD(n, NCH(n) - 1)),
! LINENO(n));
}
return NULL;
***************
*** 703,707 ****
}
nl = (TYPE(CHILD(n, NCH(n) - 1)) == COMMA) ? false : true;
! return Print(dest, seq, nl);
}
--- 732,736 ----
}
nl = (TYPE(CHILD(n, NCH(n) - 1)) == COMMA) ? false : true;
! return Print(dest, seq, nl, LINENO(n));
}
***************
*** 731,735 ****
/* del_stmt: 'del' exprlist */
REQ(n, del_stmt);
! return Delete(ast_for_exprlist(CHILD(n, 1), Del));
}
--- 760,764 ----
/* del_stmt: 'del' exprlist */
REQ(n, del_stmt);
! return Delete(ast_for_exprlist(CHILD(n, 1), Del), LINENO(n));
}
***************
*** 752,778 ****
switch (TYPE(ch)) {
case break_stmt:
! return Break();
case continue_stmt:
! return Continue();
case yield_stmt:
! return Yield(ast_for_testlist(CHILD(ch, 1)));
case return_stmt:
if (NCH(ch) == 1)
! return Return(NULL);
else
! return Return(ast_for_testlist(CHILD(ch, 1)));
case raise_stmt:
if (NCH(ch) == 1)
! return Raise(NULL, NULL, NULL);
else if (NCH(ch) == 2)
! return Raise(ast_for_expr(CHILD(n, 1)), NULL, NULL);
else if (NCH(ch) == 4)
return Raise(ast_for_expr(CHILD(n, 1)),
ast_for_expr(CHILD(n, 3)),
! NULL);
else if (NCH(ch) == 6)
return Raise(ast_for_expr(CHILD(n, 1)),
ast_for_expr(CHILD(n, 3)),
! ast_for_expr(CHILD(n, 5)));
default:
fprintf(stderr, "unexpected flow_stmt: %d\n", TYPE(ch));
--- 781,807 ----
switch (TYPE(ch)) {
case break_stmt:
! return Break(LINENO(n));
case continue_stmt:
! return Continue(LINENO(n));
case yield_stmt:
! return Yield(ast_for_testlist(CHILD(ch, 1)), LINENO(n));
case return_stmt:
if (NCH(ch) == 1)
! return Return(NULL, LINENO(n));
else
! return Return(ast_for_testlist(CHILD(ch, 1)), LINENO(n));
case raise_stmt:
if (NCH(ch) == 1)
! return Raise(NULL, NULL, NULL, LINENO(n));
else if (NCH(ch) == 2)
! return Raise(ast_for_expr(CHILD(n, 1)), NULL, NULL, LINENO(n));
else if (NCH(ch) == 4)
return Raise(ast_for_expr(CHILD(n, 1)),
ast_for_expr(CHILD(n, 3)),
! NULL, LINENO(n));
else if (NCH(ch) == 6)
return Raise(ast_for_expr(CHILD(n, 1)),
ast_for_expr(CHILD(n, 3)),
! ast_for_expr(CHILD(n, 5)), LINENO(n));
default:
fprintf(stderr, "unexpected flow_stmt: %d\n", TYPE(ch));
***************
*** 862,866 ****
for (i = 1; i < NCH(n); i += 2)
asdl_seq_append(aliases, alias_for_import_name(CHILD(n, i)));
! return Import(aliases);
} else if (STR(CHILD(n, 0))[0] == 'f') { /* from */
alias_ty mod = alias_for_import_name(CHILD(n, 1));
--- 891,895 ----
for (i = 1; i < NCH(n); i += 2)
asdl_seq_append(aliases, alias_for_import_name(CHILD(n, i)));
! return Import(aliases, LINENO(n));
} else if (STR(CHILD(n, 0))[0] == 'f') { /* from */
alias_ty mod = alias_for_import_name(CHILD(n, 1));
***************
*** 868,872 ****
for (i = 3; i <= NCH(n); i += 2)
asdl_seq_append(aliases, alias_for_import_name(CHILD(n, i)));
! return ImportFrom(mod->name, aliases);
}
return NULL;
--- 897,901 ----
for (i = 3; i <= NCH(n); i += 2)
asdl_seq_append(aliases, alias_for_import_name(CHILD(n, i)));
! return ImportFrom(mod->name, aliases, LINENO(n));
}
return NULL;
***************
*** 890,894 ****
return NULL;
}
! return Global(s);
}
--- 919,923 ----
return NULL;
}
! return Global(s, LINENO(n));
}
***************
*** 899,910 ****
REQ(n, exec_stmt);
if (NCH(n) == 2)
! return Exec(ast_for_expr(CHILD(n, 1)), NULL, NULL);
else if (NCH(n) == 4)
return Exec(ast_for_expr(CHILD(n, 1)),
! ast_for_expr(CHILD(n, 3)), NULL);
else if (NCH(n) == 6)
return Exec(ast_for_expr(CHILD(n, 1)),
ast_for_expr(CHILD(n, 3)),
! ast_for_expr(CHILD(n, 5)));
return NULL;
}
--- 928,939 ----
REQ(n, exec_stmt);
if (NCH(n) == 2)
! return Exec(ast_for_expr(CHILD(n, 1)), NULL, NULL, LINENO(n));
else if (NCH(n) == 4)
return Exec(ast_for_expr(CHILD(n, 1)),
! ast_for_expr(CHILD(n, 3)), NULL, LINENO(n));
else if (NCH(n) == 6)
return Exec(ast_for_expr(CHILD(n, 1)),
ast_for_expr(CHILD(n, 3)),
! ast_for_expr(CHILD(n, 5)), LINENO(n));
return NULL;
}
***************
*** 916,923 ****
REQ(n, assert_stmt);
if (NCH(n) == 2)
! return Assert(ast_for_expr(CHILD(n, 1)), NULL);
else if (NCH(n) == 4)
return Assert(ast_for_expr(CHILD(n, 1)),
! ast_for_expr(CHILD(n, 3)));
return NULL;
}
--- 945,952 ----
REQ(n, assert_stmt);
if (NCH(n) == 2)
! return Assert(ast_for_expr(CHILD(n, 1)), NULL, LINENO(n));
else if (NCH(n) == 4)
return Assert(ast_for_expr(CHILD(n, 1)),
! ast_for_expr(CHILD(n, 3)), LINENO(n));
return NULL;
}
***************
*** 965,969 ****
if (NCH(n) == 4)
return If(ast_for_expr(CHILD(n, 1)),
! ast_for_suite(CHILD(n, 3)), NULL);
s = STR(CHILD(n, 4));
/* s[2], the third character in the string, will be
--- 994,998 ----
if (NCH(n) == 4)
return If(ast_for_expr(CHILD(n, 1)),
! ast_for_suite(CHILD(n, 3)), NULL, LINENO(n));
s = STR(CHILD(n, 4));
/* s[2], the third character in the string, will be
***************
*** 974,978 ****
return If(ast_for_expr(CHILD(n, 1)),
ast_for_suite(CHILD(n, 3)),
! ast_for_suite(CHILD(n, 6)));
else {
int i, n_elif, has_else = 0;
--- 1003,1007 ----
return If(ast_for_expr(CHILD(n, 1)),
ast_for_suite(CHILD(n, 3)),
! ast_for_suite(CHILD(n, 6)), LINENO(n));
else {
int i, n_elif, has_else = 0;
***************
*** 991,995 ****
If(ast_for_expr(CHILD(n, NCH(n) - 6)),
ast_for_suite(CHILD(n, NCH(n) - 4)),
! ast_for_suite(CHILD(n, NCH(n) - 1))));
/* the just-created orelse handled the last elif */
n_elif--;
--- 1020,1025 ----
If(ast_for_expr(CHILD(n, NCH(n) - 6)),
ast_for_suite(CHILD(n, NCH(n) - 4)),
! ast_for_suite(CHILD(n, NCH(n) - 1)),
! LINENO(n)));
/* the just-created orelse handled the last elif */
n_elif--;
***************
*** 1003,1011 ****
If(ast_for_expr(CHILD(n, off)),
ast_for_suite(CHILD(n, off + 2)),
! orelse));
}
return If(ast_for_expr(CHILD(n, 1)),
ast_for_suite(CHILD(n, 3)),
! orelse);
}
--- 1033,1041 ----
If(ast_for_expr(CHILD(n, off)),
ast_for_suite(CHILD(n, off + 2)),
! orelse, LINENO(n)));
}
return If(ast_for_expr(CHILD(n, 1)),
ast_for_suite(CHILD(n, 3)),
! orelse, LINENO(n));
}
***************
*** 1021,1029 ****
if (NCH(n) == 4)
return While(ast_for_expr(CHILD(n, 1)),
! ast_for_suite(CHILD(n, 3)), NULL);
else
return While(ast_for_expr(CHILD(n, 1)),
ast_for_suite(CHILD(n, 3)),
! ast_for_suite(CHILD(n, 6)));
return NULL;
--- 1051,1059 ----
if (NCH(n) == 4)
return While(ast_for_expr(CHILD(n, 1)),
! ast_for_suite(CHILD(n, 3)), NULL, LINENO(n));
else
return While(ast_for_expr(CHILD(n, 1)),
ast_for_suite(CHILD(n, 3)),
! ast_for_suite(CHILD(n, 6)), LINENO(n));
return NULL;
***************
*** 1052,1056 ****
ast_for_testlist(CHILD(n, 3)),
ast_for_suite(CHILD(n, 5)),
! seq);
return NULL;
}
--- 1082,1086 ----
ast_for_testlist(CHILD(n, 3)),
ast_for_suite(CHILD(n, 5)),
! seq, LINENO(n));
return NULL;
}
***************
*** 1083,1087 ****
/* try_stmt: 'try' ':' suite 'finally' ':' suite) */
return TryFinally(ast_for_suite(CHILD(n, 2)),
! ast_for_suite(CHILD(n, 5)));
} else {
/* try_stmt: ('try' ':' suite (except_clause ':' suite)+
--- 1113,1117 ----
/* try_stmt: 'try' ':' suite 'finally' ':' suite) */
return TryFinally(ast_for_suite(CHILD(n, 2)),
! ast_for_suite(CHILD(n, 5)), LINENO(n));
} else {
/* try_stmt: ('try' ':' suite (except_clause ':' suite)+
***************
*** 1101,1105 ****
CHILD(n, 5 + i * 3)));
return TryExcept(ast_for_suite(CHILD(n, 2)), handlers,
! has_else ? ast_for_suite(CHILD(n, NCH(n) - 1)): NULL);
}
return NULL;
--- 1131,1136 ----
CHILD(n, 5 + i * 3)));
return TryExcept(ast_for_suite(CHILD(n, 2)), handlers,
! has_else ? ast_for_suite(CHILD(n, NCH(n) - 1)): NULL,
! LINENO(n));
}
return NULL;
***************
*** 1115,1119 ****
if (NCH(n) == 4)
return ClassDef(NEW_IDENTIFIER(CHILD(n, 1)), NULL,
! ast_for_suite(CHILD(n, 3)));
/* else handle the base class list */
_bases = ast_for_testlist(CHILD(n, 3));
--- 1146,1150 ----
if (NCH(n) == 4)
return ClassDef(NEW_IDENTIFIER(CHILD(n, 1)), NULL,
! ast_for_suite(CHILD(n, 3)), LINENO(n));
/* else handle the base class list */
_bases = ast_for_testlist(CHILD(n, 3));
***************
*** 1125,1129 ****
}
return ClassDef(NEW_IDENTIFIER(CHILD(n, 1)), bases,
! ast_for_suite(CHILD(n, 6)));
return NULL;
}
--- 1156,1160 ----
}
return ClassDef(NEW_IDENTIFIER(CHILD(n, 1)), bases,
! ast_for_suite(CHILD(n, 6)), LINENO(n));
return NULL;
}
***************
*** 1160,1164 ****
return ast_for_del_stmt(n);
case pass_stmt:
! return Pass();
case flow_stmt:
return ast_for_flow_stmt(n);
--- 1191,1195 ----
return ast_for_del_stmt(n);
case pass_stmt:
! return Pass(LINENO(n));
case flow_stmt:
return ast_for_flow_stmt(n);