# HG changeset patch # User Paul Boddie # Date 1152447359 -7200 # Node ID d6842e55677d61f388474378f40d47bfc6b7cf55 # Parent 85ccbdf1053324cfce3adb07b9eec0777a04d01a Added From and Import. diff -r 85ccbdf10533 -r d6842e55677d simplified.py --- a/simplified.py Sun Jul 09 13:45:27 2006 +0200 +++ b/simplified.py Sun Jul 09 14:15:59 2006 +0200 @@ -97,6 +97,7 @@ class Assign(Node): "A grouping node for assignment-related operations." class Keyword(Node): "A grouping node for keyword arguments." class Global(Node): "A global name designator." +class Import(Node): "A module import operation." class LoadTemp(Node): "Load a previously-stored temporary value." class LoadName(Node): "Load a named object." class LoadAttr(Node): "Load an object attribute." diff -r 85ccbdf10533 -r d6842e55677d simplify.py --- a/simplify.py Sun Jul 09 13:45:27 2006 +0200 +++ b/simplify.py Sun Jul 09 14:15:59 2006 +0200 @@ -31,15 +31,16 @@ A simplifying visitor for AST nodes. Covered: AssAttr, AssList, AssName, AssTuple, Assign, AugAssign, Break, - CallFunc, Class, Const, Continue, Dict, Discard, For, Function, - Getattr, Global, If, Keyword, Lambda, List, Module, Name, Pass, - Return, Stmt, TryExcept, TryFinally, Tuple, While. + CallFunc, Class, Const, Continue, Dict, Discard, For, From, + Function, Getattr, Global, If, Import, Keyword, Lambda, List, + Module, Name, Pass, Return, Stmt, TryExcept, TryFinally, Tuple, + While. Missing: Add, And, Assert, Backquote, Bitand, Bitor, Bitxor, Compare, - Decorators, Div, Ellipsis, Exec, FloorDiv, From, Import, Invert, - LeftShift, ListComp, ListCompFor, ListCompIf, Mod, Mul, Not, Or, - Power, Print, Printnl, Raise, RightShift, Slice, Sliceobj, Sub, - Subscript, UnaryAdd, UnarySub, Yield. + Decorators, Div, Ellipsis, Exec, FloorDiv, Invert, LeftShift, + ListComp, ListCompFor, ListCompIf, Mod, Mul, Not, Or, Power, Print, + Printnl, Raise, RightShift, Slice, Sliceobj, Sub, Subscript, + UnaryAdd, UnarySub, Yield. """ def __init__(self): @@ -99,6 +100,25 @@ result = Global(global_, names=global_.names) return result + def visitImport(self, import_): + result = Assign(import_) + code = [] + for path, alias in import_.names: + importer = Import(name=path) + top = alias or path.split(".")[0] + code.append(StoreName(expr=importer, name=top)) + result.code = code + return result + + def visitFrom(self, from_): + result = Assign(from_) + code = [] + code.append(StoreTemp(expr=Import(name=from_.modname))) + for name, alias in from_.names: + code.append(StoreName(expr=LoadAttr(expr=LoadTemp(), name=name), name=(alias or name))) + result.code = code + return result + def visitName(self, name): result = LoadName(name, name=name.name) return result diff -r 85ccbdf10533 -r d6842e55677d tests/from.py --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/tests/from.py Sun Jul 09 14:15:59 2006 +0200 @@ -0,0 +1,1 @@ +from a.b import c, d as e, f as g diff -r 85ccbdf10533 -r d6842e55677d tests/import.py --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/tests/import.py Sun Jul 09 14:15:59 2006 +0200 @@ -0,0 +1,1 @@ +import a, b.c, d as e, f.g as h