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.")
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