public void Visit(ClassDef node) { currentType = Context.GetType(node.Type); if (node.typeInherited != null) { IType t; if ((t = Context.GetType(node.typeInherited)) != null) { currentType.TypeInherited = t; t.ChildTypes.Add(currentType); } else { errorLog.LogError(string.Format(TYPEINHERITEDDOESNEXIST, node.Line, currentType.Name, node.typeInherited)); } } else { var obj = currentType.TypeInherited = Context.GetType("Object"); obj.ChildTypes.Add(currentType); } foreach (var item in node.Attributes) { Visit(item); } foreach (var item in node.Methods) { Visit(item); } currentType.DefineAttribute("self", currentType); }
public void Visit(AST1.Attribute node) { var attrType = Context.GetType(node.Type); if (attrType == default(Type)) { errorLog.LogError(string.Format(TypeNotExist, node.Line, node.Type)); return; } if (currentType.GetAttributeInherited(node.Name) != null) { errorLog.LogError(string.Format(AttrRedefined, node.Line, node.Name, currentType.Name)); return; } currentType.DefineAttribute(node.Name, attrType); }