Merge branch 'bench'
authorJean Privat <jean@pryen.org>
Sat, 27 Jul 2013 01:13:57 +0000 (21:13 -0400)
committerJean Privat <jean@pryen.org>
Sat, 27 Jul 2013 01:13:57 +0000 (21:13 -0400)
1  2 
src/modelbuilder.nit
src/rapid_type_analysis.nit

diff --combined src/modelbuilder.nit
@@@ -29,8 -29,6 +29,8 @@@ import opt
  import toolcontext
  import phase
  
 +private import more_collections
 +
  ###
  
  redef class ToolContext
@@@ -72,6 -70,11 +72,11 @@@ class ModelBuilde
                        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
  
@@@ -47,6 -47,9 +47,9 @@@ import auto_super_ini
  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
@@@ -401,10 -408,7 +408,10 @@@ private class RapidTypeVisito
                        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
@@@ -592,9 -596,15 +599,9 @@@ redef class ASuperExp
                        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