X-Git-Url: http://nitlanguage.org?ds=sidebyside diff --git a/src/compiling/compiling_methods.nit b/src/compiling/compiling_methods.nit index ebbe750..1c6cee0 100644 --- a/src/compiling/compiling_methods.nit +++ b/src/compiling/compiling_methods.nit @@ -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