modelbuilder: annotate more AST nodes with model information
authorJean Privat <jean@pryen.org>
Mon, 19 Aug 2013 19:44:06 +0000 (15:44 -0400)
committerJean Privat <jean@pryen.org>
Thu, 22 Aug 2013 17:38:30 +0000 (13:38 -0400)
add AStdImport::mmodule, AFormaldef::mtype,
AFormaldef::bound, and AParam::mparameter

Signed-off-by: Jean Privat <jean@pryen.org>

src/modelbuilder.nit
src/modelize_class.nit
src/modelize_property.nit

index 1537c11..bc41e2a 100644 (file)
@@ -409,6 +409,7 @@ class ModelBuilder
                        var mod_name = aimport.n_name.n_id.text
                        var sup = self.get_mmodule_by_name(aimport.n_name, mmodule, mod_name)
                        if sup == null then continue # Skip error
+                       aimport.mmodule = sup
                        imported_modules.add(sup)
                        var mvisibility = aimport.n_visibility.mvisibility
                        if mvisibility == protected_visibility then
@@ -462,6 +463,11 @@ class ModelBuilder
        end
 end
 
+redef class AStdImport
+       # The imported module once determined
+       var mmodule: nullable MModule = null
+end
+
 redef class AModule
        # The associated MModule once build by a `ModelBuilder`
        var mmodule: nullable MModule
index 14952d1..483036b 100644 (file)
@@ -117,6 +117,7 @@ redef class ModelBuilder
                                        return
                                end
                                names.add(ptname)
+                               nfd.mtype = mclass.mclass_type.arguments[i].as(MParameterType)
                        end
 
                        # Revolve bound for formal parameter names
@@ -131,13 +132,18 @@ redef class ModelBuilder
                                                error(nfd, "Error: Formal parameter type `{names[i]}' bounded with a formal parameter type")
                                        else
                                                bounds.add(bound)
+                                               nfd.bound = bound
                                        end
                                else if mclass.mclassdefs.is_empty then
                                        # No bound, then implicitely bound by nullable Object
-                                       bounds.add(objectclass.mclass_type.as_nullable)
+                                       var bound = objectclass.mclass_type.as_nullable
+                                       bounds.add(bound)
+                                       nfd.bound = bound
                                else
                                        # Inherit the bound
-                                       bounds.add(mclass.intro.bound_mtype.arguments[i])
+                                       var bound = mclass.intro.bound_mtype.arguments[i]
+                                       bounds.add(bound)
+                                       nfd.bound = bound
                                end
                        end
                end
@@ -488,6 +494,14 @@ redef class AExternClasskind
        redef fun mkind do return extern_kind
 end
 
+redef class AFormaldef
+       # The associated parameter type
+       var mtype: nullable MParameterType = null
+
+       # The associated bound
+       var bound: nullable MType = null
+end
+
 redef class AType
        # The mtype associated to the node
        var mtype: nullable MType = null
index af15716..230160b 100644 (file)
@@ -324,6 +324,7 @@ redef class ASignature
                var mparameters = new Array[MParameter]
                for i in [0..param_names.length[ do
                        var mparameter = new MParameter(param_names[i], param_types[i], i == vararg_rank)
+                       self.n_params[i].mparameter = mparameter
                        mparameters.add(mparameter)
                end
 
@@ -332,6 +333,11 @@ redef class ASignature
        end
 end
 
+redef class AParam
+       # The associated mparameter if any
+       var mparameter: nullable MParameter = null
+end
+
 redef class AMethPropdef
        redef type MPROPDEF: MMethodDef
 
@@ -471,6 +477,7 @@ redef class AMethPropdef
                var mparameters = new Array[MParameter]
                for i in [0..param_names.length[ do
                        var mparameter = new MParameter(param_names[i], param_types[i], i == vararg_rank)
+                       if nsig != null then nsig.n_params[i].mparameter = mparameter
                        mparameters.add(mparameter)
                end