import toolcontext
import phase
+private import more_collections
+
###
redef class ToolContext
nmodules.add(mmodule2nmodule[mm])
end
toolcontext.run_phases(nmodules)
+
+ if toolcontext.opt_only_metamodel.value then
+ self.toolcontext.info("*** ONLY METAMODEL", 1)
+ exit(0)
+ end
end
# Instantiate a modelbuilder for a model and a toolcontext
self.toolcontext.info("*** END PARSE: {time1-time0} ***", 2)
self.toolcontext.check_errors
+
+ if toolcontext.opt_only_parse.value then
+ self.toolcontext.info("*** ONLY PARSE...", 1)
+ exit(0)
+ end
+
return mmodules
end
redef class ModelBuilder
fun do_rapid_type_analysis(mainmodule: MModule): RapidTypeAnalysis
do
+ var time0 = get_time
+ self.toolcontext.info("*** RAPID TYPE ANALYSIS ***", 1)
+
var model = self.model
var analysis = new RapidTypeAnalysis(self, mainmodule)
var nmodule = self.nmodules.first
analysis.add_monomorphic_send(maintype, mainprop)
end
analysis.run_analysis
+
+ var time1 = get_time
+ self.toolcontext.info("*** END RAPID TYPE ANALYSIS: {time1-time0} ***", 2)
+
return analysis
end
end
var implicit_cast_to = node.implicit_cast_to
if implicit_cast_to != null then self.add_cast_type(implicit_cast_to)
end
- node.visit_all(self)
+ # RTA does not enter in AAnnotations
+ if not node isa AAnnotations then
+ node.visit_all(self)
+ end
end
# Force to get the primitive class named `name' or abort
return
end
- #FIXME: we do not want an ugly static call!
- var mpropdef = v.mpropdef
- var mpropdefs = mpropdef.mproperty.lookup_super_definitions(mpropdef.mclassdef.mmodule, mpropdef.mclassdef.bound_mtype)
- if mpropdefs.length != 1 then
- debug("MPRODFEFS for super {mpropdef} for {v.receiver}: {mpropdefs.join(", ")}")
- end
- var msuperpropdef = mpropdefs.first
- assert msuperpropdef isa MMethodDef
- v.analysis.add_static_call(v.receiver, msuperpropdef)
+ var mpropdef = v.mpropdef.lookup_next_definition(v.analysis.mainmodule, v.receiver)
+ assert mpropdef isa MMethodDef
+ v.analysis.add_static_call(v.receiver, mpropdef)
end
end