public void Visit(ASTClassDefinition _class) { var name = _class.Name; var baseName = _class.Base; Class newClass; if (baseName.Length == 0) { newClass = ObjectFactory.Class(name); } else { var baseClass = _environment.FindClass(baseName); if (baseClass == null) { throw new CompilerException($"Base class '{name}' has not been defined."); } newClass = ObjectFactory.Class(name, baseClass); } _environment.AddClass(newClass); var memberDefinitions = _class.MemberDefinitions; for (int i = 0; i < memberDefinitions.Count; i++) { memberDefinitions[i].Accept(this, newClass); } }
/// <summary> /// Visit a class node and add the descriptor to the current scope /// </summary> /// <param name="n"></param> public override void VisitClassDefinition(ASTClassDefinition n) { CheckForGlobalScope(n.Name, n.Location); TypeClass cls = new TypeClass(n.Name); _currentClass = cls; n.Descriptor = _scopeMgr.AddClass(cls.ClassName, cls, null); n.Type = cls; }
/// <summary> /// Define class-level scope --- per class /// </summary> /// <param name="n"></param> public override void VisitClassDefinition(ASTClassDefinition n) { _currentClass = new TypeClass(n.Name); var classScope = _scopeMgr.PushScope(string.Format("class {0}", _currentClass.ClassName)); _currentClass.Descriptor = (ClassDescriptor)_scopeMgr.Find(n.Name, p => p is ClassDescriptor); var declarationType = CheckSubTree(n.Declarations); n.Type = _currentClass; _currentClass.Descriptor.Scope = _currentClass.Scope = classScope; AddCtorIfNone(classScope, n.Name); _scopeMgr.PopScope(); }
public override void VisitClassDefinition(ASTClassDefinition n) { _mgr.AddClass(n); }
public override void VisitClassDefinition(ASTClassDefinition n) { _currentTypeBuilder = _typeManager.GetBuilderInfo(n.Name); n.Declarations.Visit(this); }
/// <summary> /// Restore the scope of the class we're visiting, and then visit all of the child nodes. /// Pop the class scope when we're done. /// </summary> /// <param name="n"></param> public override void VisitClassDefinition(ASTClassDefinition n) { VisitClassBody(n.Type as TypeClass, n.Declarations); }
/// <summary> /// We need to track the class name that we're visiting, so we can lookup the entry in /// TypeManager, so we can access the TypeBuilder and other fun stuff. /// </summary> /// <param name="n"></param> public override void VisitClassDefinition(ASTClassDefinition n) { _currentType = n.Name; n.Declarations.Visit(this); }
public TypeBuilderInfo(ASTClassDefinition n, ModuleBuilder module) { Builder = module.DefineType(n.Name, TypeAttributes.Public); Init(); }
public void AddClass(ASTClassDefinition n) { TypeBuilderMap.Add(n.Name, new TypeBuilderInfo(n, Module)); }