diff options
author | Emile Anclin <emile.anclin@logilab.fr> | 2009-11-25 19:17:36 +0100 |
---|---|---|
committer | Emile Anclin <emile.anclin@logilab.fr> | 2009-11-25 19:17:36 +0100 |
commit | 64ea2049c068a1e99bc036a650af94f22c76c796 (patch) | |
tree | a380f376212d46c9e7fbb4c26de58cf00a3f9dbd | |
parent | 61df5384faee1c38e4881a81a00183be6861ed6f (diff) | |
download | astroid-git-64ea2049c068a1e99bc036a650af94f22c76c796.tar.gz |
remove most factory functions and create instances
--HG--
branch : rebuild
-rw-r--r-- | _nodes.py | 2 | ||||
-rw-r--r-- | _nodes_ast.py | 66 | ||||
-rw-r--r-- | _nodes_compiler.py | 53 | ||||
-rw-r--r-- | node_classes.py | 9 | ||||
-rw-r--r-- | nodes.py | 1 | ||||
-rw-r--r-- | raw_building.py | 40 |
6 files changed, 40 insertions, 131 deletions
@@ -23,11 +23,9 @@ from itertools import imap try: from logilab.astng._nodes_ast import * - from logilab.astng._nodes_ast import _const_factory AST_MODE = '_ast' except ImportError: from logilab.astng._nodes_compiler import * - from logilab.astng._nodes_compiler import _const_factory AST_MODE = 'compiler' from logilab.astng.utils import REDIRECT diff --git a/_nodes_ast.py b/_nodes_ast.py index 216048f4..cda2b625 100644 --- a/_nodes_ast.py +++ b/_nodes_ast.py @@ -296,69 +296,3 @@ class TreeRebuilder(ASTVisitor): del node.optional_vars, node.context_expr -# raw building ################################################################ - -def module_factory(doc): - node = Module() - node.body = [] - node.doc = doc - return node - - -def import_from_factory(modname, membername): - node = From() - node.level = 0 - node.modname = modname - node.names = [(membername, None)] - return node - - -def _const_factory(value): - if isinstance(value, (int, long, complex, float, basestring)): - node = Const() - else: - raise Exception(type(value)) - node.value = value - return node - - -def function_factory(name, args, defaults, flag=0, doc=None): - """create and initialize a astng Function node""" - # XXX local import necessary due to cyclic deps - from logilab.astng.nodes import const_factory - node = Function() - node.decorators = None - node.body = [] - node.name = name - # XXX ensure we get a compatible representation - node.args = argsnode = Arguments() - argsnode.args = [] - for arg in args: - argsnode.args.append(Name()) - argsnode.args[-1].name = arg - argsnode.args[-1].parent = argsnode - argsnode.defaults = [] - for default in defaults: - argsnode.defaults.append(const_factory(default)) - argsnode.defaults[-1].parent = argsnode - argsnode.kwarg = None - argsnode.vararg = None - argsnode.parent = node - node.doc = doc - return node - - -def class_factory(name, basenames=(), doc=None): - """create and initialize a astng Class node""" - node = Class() - node.body = [] - node.name = name - # XXX to check - node.bases = [] - for base in basenames: - basenode = Name() - basenode.name = base - node.bases.append(basenode) - basenode.parent = node - node.doc = doc - return node diff --git a/_nodes_compiler.py b/_nodes_compiler.py index 313acf15..f138261b 100644 --- a/_nodes_compiler.py +++ b/_nodes_compiler.py @@ -615,55 +615,4 @@ class TreeRebuilder(ASTVisitor): node.parent = stmt -# raw building ################################################################ - -def module_factory(doc): - node = Module(doc, None) - del node.node - node.body = [] - return node - - -if sys.version_info < (2, 5): - def import_from_factory(modname, membername): - return From(modname, ( (membername, None), ) ) -else: - def import_from_factory(modname, membername): - return From(modname, ( (membername, None), ), 0) - - -def _const_factory(value): - return Const(value) - - -# introduction of decorators has changed the Function initializer arguments -if sys.version_info >= (2, 4): - def function_factory(name, args, defaults, flag=0, doc=None): - """create and initialize a astng Function node""" - # first argument is now a list of decorators - func = Function(Decorators([]), name, args, defaults, flag, doc, None) - del func.code - func.body = [] - args_compiler_to_ast(func) - return func - -else: - def function_factory(name, args, defaults, flag=0, doc=None): - """create and initialize a astng Function node""" - func = Function(name, args, defaults, flag, doc, None) - del func.code - func.body = [] - args_compiler_to_ast(func) - return func - - -def class_factory(name, basenames=(), doc=None): - """create and initialize a astng Class node""" - node = Class(name, [], doc, None) - del node.code - node.body = [] - bases = [Name(base) for base in basenames] - for base in bases: - base.parent = node - node.bases = bases - return node + diff --git a/node_classes.py b/node_classes.py index d7deb76b..f61a6ad3 100644 --- a/node_classes.py +++ b/node_classes.py @@ -1,7 +1,7 @@ # from logilab.astng import (ASTNGBuildingException, InferenceError, NotFoundError, NoDefault) -from logilab.astng._nodes import NodeNG, StmtMixIn, BlockRangeMixIn, BaseClass, _const_factory +from logilab.astng._nodes import NodeNG, StmtMixIn, BlockRangeMixIn, BaseClass from logilab.astng.infutils import Instance """ @@ -528,10 +528,9 @@ def const_factory(value): else: node.elts = () except KeyError: - try: - node = Const(value) - except KeyError: - node = _const_factory(value) + assert isinstance(value, (int, long, complex, float, basestring)) + node = Const() + node.value = value return node @@ -44,7 +44,6 @@ from itertools import imap from logilab.astng._exceptions import UnresolvableName, NotFoundError, \ InferenceError, ASTNGError from logilab.astng.utils import REDIRECT -from logilab.astng._nodes import class_factory, module_factory from logilab.astng.node_classes import (Arguments, AssAttr, Assert, Assign, AugAssign, Backquote, BinOp, BoolOp, Break, CallFunc, Compare, diff --git a/raw_building.py b/raw_building.py index 621be5f6..2129db44 100644 --- a/raw_building.py +++ b/raw_building.py @@ -55,13 +55,17 @@ def attach_import_node(node, modname, membername): """create a From node and register it in the locals of the given node with the specified name """ - _attach_local_node(node, nodes.import_from_factory(modname, membername), - membername) + from_node = nodes.From() + from_node.level = 0 + from_node.modname = modname + from_node.names = [(membername, None)] + _attach_local_node(node, from_node, membername) def build_module(name, doc=None): """create and initialize a astng Module node""" - node = nodes.module_factory(doc) + node = nodes.Module() + node.doc = doc node.name = name node.pure_python = False node.package = False @@ -71,7 +75,16 @@ def build_module(name, doc=None): def build_class(name, basenames=(), doc=None): """create and initialize a astng Class node""" - node = nodes.class_factory(name, basenames, doc) + node = nodes.Class() + node.body = [] + node.name = name + node.bases = [] + for base in basenames: + basenode = nodes.Name() + basenode.name = base + node.bases.append(basenode) + basenode.parent = node + node.doc = doc node.locals = {} node.instance_attrs = {} return node @@ -80,7 +93,24 @@ def build_function(name, args=None, defaults=None, flag=0, doc=None): """create and initialize a astng Function node""" args, defaults = args or [], defaults or [] # first argument is now a list of decorators - func = nodes.function_factory(name, args, defaults, flag, doc) + func = nodes.Function() + node.decorators = None + func.body = [] + func.name = name + func.args = argsnode = nodes.Arguments() + argsnode.args = [] + for arg in args: + argsnode.args.append(Name()) + argsnode.args[-1].name = arg + argsnode.args[-1].parent = argsnode + argsnode.defaults = [] + for default in defaults: + argsnode.defaults.append(nodes.const_factory(default)) + argsnode.defaults[-1].parent = argsnode + argsnode.kwarg = None + argsnode.vararg = None + argsnode.parent = node + func.doc = doc func.locals = {} if args: register_arguments(func) |