public TypeDefineNode(DeltinScriptParser.Type_defineContext context, BuildAstVisitor visitor) : base(new Location(visitor.file, DocRange.GetRange(context)))
        {
            if (context.STRUCT() != null)
            {
                TypeKind = TypeKind.Struct;
            }
            else if (context.CLASS() != null)
            {
                TypeKind = TypeKind.Class;
            }
            else
            {
                throw new Exception();
            }

            Name = context.name.Text;

            DefinedVars = new InclassDefineNode[context.inclass_define().Length];
            for (int i = 0; i < DefinedVars.Length; i++)
            {
                DefinedVars[i] = (InclassDefineNode)visitor.VisitInclass_define(context.inclass_define(i));
            }

            Constructors = new ConstructorNode[context.constructor().Length];
            for (int i = 0; i < Constructors.Length; i++)
            {
                Constructors[i] = (ConstructorNode)visitor.VisitConstructor(context.constructor(i));
            }

            Methods = new UserMethodBase[context.user_method().Length + context.macro().Length];
            for (int i = 0; i < context.user_method().Length; i++)
            {
                Methods[i] = (UserMethodBase)visitor.VisitUser_method(context.user_method(i));
            }

            for (int i = 0; i < context.macro().Length; i++)
            {
                Methods[context.user_method().Length + i] = (UserMethodBase)visitor.VisitMacro(context.macro(i));
            }
        }