Refactor a bit of create_context

This commit is contained in:
Dave Halter
2019-04-12 12:34:07 +02:00
parent 3ba3d72d6b
commit 3bef9a67b8

View File

@@ -425,20 +425,25 @@ class Evaluator(object):
if n.type == 'comp_for': if n.type == 'comp_for':
return n return n
def from_scope_node(scope_node, child_is_funcdef=None, is_nested=True, node_is_object=False): def from_scope_node(scope_node, is_nested=True, node_is_object=False):
if scope_node == base_node: if scope_node == base_node:
return base_context return base_context
is_funcdef = scope_node.type in ('funcdef', 'lambdef') is_funcdef = scope_node.type in ('funcdef', 'lambdef')
parent_scope = parser_utils.get_parent_scope(scope_node) parent_scope = parser_utils.get_parent_scope(scope_node)
parent_context = from_scope_node(parent_scope, child_is_funcdef=is_funcdef) parent_context = from_scope_node(parent_scope)
if is_funcdef: if is_funcdef:
parent_was_class = isinstance(parent_context, ClassContext)
if parent_was_class:
parent_context = AnonymousInstance(
self, parent_context.parent_context, parent_context)
func = FunctionContext.from_context( func = FunctionContext.from_context(
parent_context, parent_context,
scope_node scope_node
) )
if isinstance(parent_context, AnonymousInstance): if parent_was_class:
func = BoundMethod( func = BoundMethod(
instance=parent_context, instance=parent_context,
function=func function=func
@@ -447,12 +452,7 @@ class Evaluator(object):
return func.get_function_execution() return func.get_function_execution()
return func return func
elif scope_node.type == 'classdef': elif scope_node.type == 'classdef':
class_context = ClassContext(self, parent_context, scope_node) return ClassContext(self, parent_context, scope_node)
if child_is_funcdef:
# anonymous instance
return AnonymousInstance(self, parent_context, class_context)
else:
return class_context
elif scope_node.type == 'comp_for': elif scope_node.type == 'comp_for':
if node.start_pos >= scope_node.children[-1].start_pos: if node.start_pos >= scope_node.children[-1].start_pos:
return parent_context return parent_context