From ec0ebe9128722740d043372629ca13fc1961f2d1 Mon Sep 17 00:00:00 2001 From: Jean Privat Date: Thu, 15 May 2014 10:36:12 -0400 Subject: [PATCH] astbuilder: `make_new` and `make_call` require a CallSite a callsite has a lot more information that was previously lost. Signed-off-by: Jean Privat --- src/astbuilder.nit | 24 +++++++++++------------- src/transform.nit | 23 +++++++++-------------- 2 files changed, 20 insertions(+), 27 deletions(-) diff --git a/src/astbuilder.nit b/src/astbuilder.nit index afcffdf..3b5aceb 100644 --- a/src/astbuilder.nit +++ b/src/astbuilder.nit @@ -36,17 +36,15 @@ class ASTBuilder end # Make a new instatiation - fun make_new(mtype: MClassType, constructor: MMethod, args: nullable Array[AExpr]): ANewExpr + fun make_new(callsite: CallSite, args: nullable Array[AExpr]): ANewExpr do - return new ANewExpr.make(mtype, constructor, args) + return new ANewExpr.make(callsite, args) end # Make a new message send - fun make_call(recv: AExpr, mmethod: MMethod, args: nullable Array[AExpr]): ACallExpr + fun make_call(recv: AExpr, callsite: CallSite, args: nullable Array[AExpr]): ACallExpr do - var mtype = mmethod.intro.msignature.return_mtype - if mtype != null then mtype = mtype.resolve_for(recv.mtype.as(not null), anchor, mmodule, true) - return new ACallExpr.make(recv, mmethod, args, mtype) + return new ACallExpr.make(recv, callsite, args) end # Make a new, empty, sequence of statements @@ -230,7 +228,7 @@ redef class ADecIntExpr end redef class ANewExpr - private init make(mtype: MClassType, mmethod: MMethod, args: nullable Array[AExpr]) + private init make(callsite: CallSite, args: nullable Array[AExpr]) do _n_kwnew = new TKwnew _n_type = new AType.make @@ -238,24 +236,24 @@ redef class ANewExpr if args != null then n_args.n_exprs.add_all(args) end - callsite = new CallSite(self, mtype, mmethod.intro.mclassdef.mmodule, mtype, true, mmethod, mmethod.intro, mmethod.intro.msignature.as(not null), false) - self.mtype = mtype + self.callsite = callsite + self.mtype = callsite.recv + self.is_typed = true end end redef class ACallExpr - private init make(recv: AExpr, mmethod: MMethod, args: nullable Array[AExpr], t: nullable MType) + private init make(recv: AExpr, callsite: CallSite, args: nullable Array[AExpr]) do self._n_expr = recv - recv.parent = self _n_args = new AListExprs _n_id = new TId if args != null then self.n_args.n_exprs.add_all(args) end var mtype = recv.mtype.as(not null) - callsite = new CallSite(self, mtype, mmethod.intro.mclassdef.mmodule, mmethod.intro.mclassdef.bound_mtype, true, mmethod, mmethod.intro, mmethod.intro.msignature.as(not null), false) - self.mtype = t + self.callsite = callsite + self.mtype = callsite.msignature.return_mtype self.is_typed = true end end diff --git a/src/transform.nit b/src/transform.nit index b2db18e..6bd37b0 100644 --- a/src/transform.nit +++ b/src/transform.nit @@ -171,16 +171,13 @@ redef class AArrayExpr # t redef fun accept_transform_visitor(v) do - var mtype = self.mtype.as(MClassType) var nblock = v.builder.make_block - var meth = v.get_method(self, "with_capacity", mtype.mclass) - var nnew = v.builder.make_new(mtype, meth, [v.builder.make_int(n_exprs.n_exprs.length)]) + var nnew = v.builder.make_new(with_capacity_callsite.as(not null), [v.builder.make_int(n_exprs.n_exprs.length)]) nblock.add nnew - var madd = v.get_method(self, "push", mtype.mclass) for nexpr in self.n_exprs.n_exprs do - var nadd = v.builder.make_call(nnew.make_var_read, madd, [nexpr]) + var nadd = v.builder.make_call(nnew.make_var_read, push_callsite.as(not null), [nexpr]) nblock.add nadd end var nres = nnew.make_var_read @@ -194,8 +191,7 @@ redef class ACrangeExpr # `[x..y]` is replaced with `new Range[X](x,y)` redef fun accept_transform_visitor(v) do - var mtype = self.mtype.as(MClassType) - replace_with(v.builder.make_new(mtype, init_callsite.mproperty, [n_expr, n_expr2])) + replace_with(v.builder.make_new(init_callsite.as(not null), [n_expr, n_expr2])) end end @@ -203,8 +199,7 @@ redef class AOrangeExpr # `[x..y[` is replaced with `new Range[X].without_last(x,y)` redef fun accept_transform_visitor(v) do - var mtype = self.mtype.as(MClassType) - replace_with(v.builder.make_new(mtype, init_callsite.mproperty, [n_expr, n_expr2])) + replace_with(v.builder.make_new(init_callsite.as(not null), [n_expr, n_expr2])) end end @@ -237,12 +232,12 @@ redef class ASendReassignFormExpr write_args.add(a.make_var_read) end - var nread = v.builder.make_call(n_expr.make_var_read, callsite.mproperty, read_args) + var nread = v.builder.make_call(n_expr.make_var_read, callsite.as(not null), read_args) - var nnewvalue = v.builder.make_call(nread, reassign_callsite.mproperty, [n_value]) + var nnewvalue = v.builder.make_call(nread, reassign_callsite.as(not null), [n_value]) write_args.add(nnewvalue) - var nwrite = v.builder.make_call(n_expr.make_var_read, write_callsite.mproperty, write_args) + var nwrite = v.builder.make_call(n_expr.make_var_read, write_callsite.as(not null), write_args) nblock.add(nwrite) replace_with(nblock) @@ -257,7 +252,7 @@ redef class AVarReassignExpr var nread = v.builder.make_var_read(variable, read_type.as(not null)) - var nnewvalue = v.builder.make_call(nread, reassign_callsite.mproperty, [n_value]) + var nnewvalue = v.builder.make_call(nread, reassign_callsite.as(not null), [n_value]) var nwrite = v.builder.make_var_assign(variable, nnewvalue) replace_with(nwrite) @@ -273,7 +268,7 @@ redef class AAttrReassignExpr var attribute = self.mproperty.as(not null) var nread = v.builder.make_attr_read(n_expr.make_var_read, attribute) - var nnewvalue = v.builder.make_call(nread, reassign_callsite.mproperty, [n_value]) + var nnewvalue = v.builder.make_call(nread, reassign_callsite.as(not null), [n_value]) var nwrite = v.builder.make_attr_assign(n_expr.make_var_read, attribute, nnewvalue) nblock.add(nwrite) -- 1.7.9.5