Commit 93935811 authored by Xavier Thompson's avatar Xavier Thompson

Improve 'Bugfix: Fix cpp iteration over attribute of temporary object' using 'is_simple()' method

parent e52f7f3e
...@@ -293,23 +293,6 @@ def translate_double_cpp_exception(code, pos, lhs_type, lhs_code, rhs_code, lhs_ ...@@ -293,23 +293,6 @@ def translate_double_cpp_exception(code, pos, lhs_type, lhs_code, rhs_code, lhs_
code.putln(code.error_goto(pos)) code.putln(code.error_goto(pos))
code.putln('}') code.putln('}')
# Used to determine if a node has a persistent result, meaning it is not temporary
# and doesn't depend on any temporary sub expressions.
# Examples:
# name # <- persistent
# name.attr # <- persistent
# some_func() # <- temporary
# some_func().attr # <- temporary
# Essentially this boils down to NameNodes and AttributeNodes that are recursively
# only composed of NameNodes.
def is_persistent(node):
if node.is_name:
return True
elif node.is_attribute:
return is_persistent(node.obj)
else:
return False
class ExprNode(Node): class ExprNode(Node):
# subexprs [string] Class var holding names of subexpr node attrs # subexprs [string] Class var holding names of subexpr node attrs
...@@ -2937,7 +2920,7 @@ class CppIteratorNode(ExprNode): ...@@ -2937,7 +2920,7 @@ class CppIteratorNode(ExprNode):
if sequence_type.is_cyp_class: if sequence_type.is_cyp_class:
self.cpp_attribute_op = "->" self.cpp_attribute_op = "->"
# essentially 3 options: # essentially 3 options:
if is_persistent(self.sequence): if self.sequence.is_simple():
# 1) is a name and can be accessed directly; # 1) is a name and can be accessed directly;
# assigning to it may break the container, but that's the responsibility # assigning to it may break the container, but that's the responsibility
# of the user # of the user
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment