compile: differentiate attribute read and write
authorJean Privat <jean@pryen.org>
Wed, 24 Jun 2009 07:22:48 +0000 (03:22 -0400)
committerJean Privat <jean@pryen.org>
Wed, 24 Jun 2009 20:28:31 +0000 (16:28 -0400)
Signed-off-by: Jean Privat <jean@pryen.org>

src/compiling/compiling_methods.nit

index ebbe750..1c6cee0 100644 (file)
@@ -454,12 +454,17 @@ redef class MMMethod
 end
 
 redef class MMAttribute
-       # Compile an acces on selffor a given reciever.
-       # Result is a valid C left-value for assigment
-       meth compile_access(v: CompilerVisitor, recv: String): String
+       # Compile a read acces on selffor a given reciever.
+       meth compile_read_access(v: CompilerVisitor, recv: String): String
        do
                return "{global.attr_access}({recv}) /*{local_class}::{name}*/"
        end
+
+       # Compile a write acces on selffor a given reciever.
+       meth compile_write_access(v: CompilerVisitor, recv: String, value: String)
+       do
+               v.add_instr("{global.attr_access}({recv}) /*{local_class}::{name}*/ = {value};")
+       end
 end
 
 redef class MMLocalProperty
@@ -566,14 +571,14 @@ end
 redef class MMReadImplementationMethod
        redef meth do_compile_inside(v, params)
        do
-               return node.prop.compile_access(v, params[0])
+               return node.prop.compile_read_access(v, params[0])
        end
 end
 
 redef class MMWriteImplementationMethod
        redef meth do_compile_inside(v, params)
        do
-               v.add_assignment(node.prop.compile_access(v, params[0]), params[1])
+               node.prop.compile_write_access(v, params[0], params[1])
                return null
        end
 end
@@ -606,7 +611,7 @@ redef class MMImplicitInit
                end
                for i in [f..params.length[ do
                        var attribute = unassigned_attributes[i-f]
-                       v.add_assignment(attribute.compile_access(v, recv), params[i])
+                       attribute.compile_write_access(v, recv, params[i])
                end
                return null
        end
@@ -1468,7 +1473,7 @@ redef class AAttrExpr
        redef meth compile_expr(v)
        do
                var e = v.compile_expr(n_expr)
-               return prop.compile_access(v, e)
+               return prop.compile_read_access(v, e)
        end
 end
 
@@ -1477,17 +1482,17 @@ redef class AAttrAssignExpr
        do
                var e = v.compile_expr(n_expr)
                var e2 = v.compile_expr(n_value)
-               v.add_assignment(prop.compile_access(v, e), e2)
+               prop.compile_write_access(v, e, e2)
        end
 end
 redef class AAttrReassignExpr
        redef meth compile_stmt(v)
        do
                var e1 = v.compile_expr(n_expr)
-               var e2 = prop.compile_access(v, e1)
+               var e2 = prop.compile_read_access(v, e1)
                var e3 = v.compile_expr(n_value)
                var e4 = assign_method.compile_expr_call(v, [e2, e3])
-               v.add_assignment(e2, e4)
+               prop.compile_write_access(v, e1, e4)
        end
 end