example: intro an emscripten wrapper around fibonacci
[nit.git] / src / modelize_property.nit
index 83b689f..e24541e 100644 (file)
@@ -309,9 +309,18 @@ redef class APropdef
        private fun check_redef_keyword(modelbuilder: ModelBuilder, nclassdef: AClassdef, kwredef: nullable Token, need_redef: Bool, mprop: MProperty): Bool
        do
                if nclassdef.mprop2npropdef.has_key(mprop) then
-                       modelbuilder.error(self, "Error: A property {mprop} is already defined in class {nclassdef.mclassdef.mclass}.")
+                       modelbuilder.error(self, "Error: A property {mprop} is already defined in class {nclassdef.mclassdef.mclass} at line {nclassdef.mprop2npropdef[mprop].location.line_start}.")
                        return false
                end
+               if mprop isa MMethod and mprop.is_toplevel != (nclassdef isa ATopClassdef) then
+                       if mprop.is_toplevel then
+                               modelbuilder.error(self, "Error: {mprop} is a top level method.")
+                       else
+                               modelbuilder.error(self, "Error: {mprop} is not a top level method.")
+                       end
+                       return false
+
+               end
                if kwredef == null then
                        if need_redef then
                                modelbuilder.error(self, "Redef error: {nclassdef.mclassdef.mclass}::{mprop.name} is an inherited property. To redefine it, add the redef keyword.")
@@ -449,6 +458,7 @@ redef class AMethPropdef
                        mprop = new MMethod(mclassdef, name, mvisibility)
                        mprop.is_init = is_init
                        mprop.is_new = n_kwnew != null
+                       if nclassdef isa ATopClassdef then mprop.is_toplevel = true
                        if not self.check_redef_keyword(modelbuilder, nclassdef, n_kwredef, false, mprop) then return
                else
                        if not self.check_redef_keyword(modelbuilder, nclassdef, n_kwredef, not self isa AMainMethPropdef, mprop) then return