merge
authorDag Sverre Seljebotn <dagss@student.matnat.uio.no>
Mon, 6 Oct 2008 19:12:23 +0000 (21:12 +0200)
committerDag Sverre Seljebotn <dagss@student.matnat.uio.no>
Mon, 6 Oct 2008 19:12:23 +0000 (21:12 +0200)
1  2 
Cython/Compiler/ExprNodes.py
Cython/Compiler/PyrexTypes.py

index e4c6114986e6c35c25761c90c93526f1dde16719,46323cd697602d8f37b411fee7f172b91cf33c7e..bbcd0e7988322dbc933fc9d0c3e908b411ebd4c8
@@@ -568,68 -563,11 +568,71 @@@ class ExprNode(Node)
          #  a constant, local var, C global var, struct member
          #  reference, or temporary.
          return self.result_in_temp()
+         
+     def as_cython_attribute(self):
+         return None
  
  
 +class NewTempExprNode(ExprNode):
 +    backwards_compatible_result = None
 +    
 +    def result(self):
 +        if self.is_temp:
 +            return self.temp_code
 +        else:
 +            return self.calculate_result_code()
 +
 +    def allocate_target_temps(self, env, rhs):
 +        self.allocate_subexpr_temps(env)
 +        rhs.release_temp(rhs)
 +        self.release_subexpr_temps(env)
 +
 +    def allocate_temps(self, env, result = None):
 +        self.allocate_subexpr_temps(env)
 +        self.backwards_compatible_result = result
 +        if self.is_temp:
 +            self.release_subexpr_temps(env)
 +
 +    def allocate_temp(self, env, result = None):
 +        assert result is None
 +
 +    def release_temp(self, env):
 +        pass
 +
 +    def pre_generate_result_code(self, code):
 +        if self.is_temp:
 +            type = self.type
 +            if not type.is_void:
 +                if type.is_pyobject:
 +                    type = PyrexTypes.py_object_type
 +                if self.backwards_compatible_result:
 +                    self.temp_code = self.backwards_compatible_result
 +                else:
 +                    self.temp_code = code.funcstate.allocate_temp(type)
 +            else:
 +                self.temp_code = None
 +
 +    def generate_disposal_code(self, code):
 +        if self.is_temp:
 +            if self.type.is_pyobject:
 +                code.put_decref_clear(self.result(), self.ctype())
 +            if not self.backwards_compatible_result:
 +                code.funcstate.release_temp(self.temp_code)
 +        else:
 +            self.generate_subexpr_disposal_code(code)
 +
 +    def generate_post_assignment_code(self, code):
 +        if self.is_temp:
 +            if self.type.is_pyobject:
 +                code.putln("%s = 0;" % self.temp_code)
 +            if not self.backwards_compatible_result:
 +                code.funcstate.release_temp(self.temp_code)
 +        else:
 +            self.generate_subexpr_disposal_code(code)
 +
 +    
 +        
 +
  class AtomicExprNode(ExprNode):
      #  Abstract base class for expression nodes which have
      #  no sub-expressions.
Simple merge