diff --git a/sources/zweic/Analyzer.scala b/sources/zweic/Analyzer.scala index 07e79a0..e13a41d 100755 --- a/sources/zweic/Analyzer.scala +++ b/sources/zweic/Analyzer.scala @@ -34,9 +34,23 @@ // Analyze a class private def analyzeClass(tree: ClassDef): Unit = tree match { case ClassDef(name, None, members) => - Console.println("hallo") + classScope.get(name.name) match { + case Some(c) => + Report.error(tree.pos, "Class already defined: " + name.name) + case None => + val cs = ClassSymbol(tree.pos, name.name, None); + classScope(name.name) = cs; + members.foreach(x => analyzeMember(cs,x)) + } case ClassDef(name, extend, members) => - Console.println("println") + classScope.get(name.name) match { + case Some(c) => + Report.error(tree.pos, "Class already defined: " + name.name); + case None => + val cs = ClassSymbol(tree.pos, name.name, classScope.get(extend.get.name)); + classScope(name.name) = cs; + members.foreach(x => analyzeMember(cs,x)) + } } @@ -48,9 +62,14 @@ ownerClass.enterField(FieldSymbol(tree.pos, name.name, analyzeType(typ))) case MethodDef(name, args, rtype, expr) => ownerClass.lookupMethod(name.name) match { - case Some(z) => + case Some(m) => var paramtypes = for ( val Formal(x,y) <- args ) yield analyzeType(y); ownerClass.enterMethod(MethodSymbol(tree.pos, name.name, paramtypes, analyzeType(rtype))) + case None => + Report.error(tree.pos, "Method "+ownerClass.name+"."+name.name+" is not defined."); + var paramtypes = for ( val Formal(x,y) <- args ) yield analyzeType(y); + ownerClass.enterNewMethod(MethodSymbol(tree.pos, name.name, paramtypes, analyzeType(rtype))) + } }