view ast/Module.d @ 150:6c5a3c0bb4fb

Make switch work again Also added locations to statements (only filled out for switch) Added a verification pass Removed some comments
author Anders Halager <halager@gmail.com>
date Mon, 21 Jul 2008 20:35:03 +0200
parents 6e6355fb5f0f
children 08f68d684047
line wrap: on
line source

module ast.Module;

import sema.Scope,
       sema.VC,
       sema.Symbol;

import ast.Decl;

class Module
{
    this(char[] moduleName)
    {
        this.moduleName = moduleName;
    }

    void addDecl(Decl decl)
    {
        switch(decl.declType)
        {
            case DeclType.FuncDecl:
                functions ~= cast(FuncDecl)decl;
                break;
            case DeclType.VarDecl:
                vars ~= cast(VarDecl)decl;
                break;
            case DeclType.StructDecl:
                structs ~= cast(StructDecl)decl;
                break;
            case DeclType.ClassDecl:
                classes ~= cast(ClassDecl)decl;
                break;
            case DeclType.InterfaceDecl:
                interfaces ~= cast(InterfaceDecl)decl;
                break;
            default:
                assert(0, "DeclType not implemented");
        }
        decls ~= decl;
    }

    void verify(VC vc)
    {
        foreach (decl; decls)
            decl.verify(vc);
    }

    VarDecl[]       vars;
    FuncDecl[]      functions;
    StructDecl[]    structs;
    ClassDecl[]     classes;
    InterfaceDecl[] interfaces;
    Decl[] decls;

    char[] moduleName;
    Scope env;
    Symbol symbol;
    bool outputModule = true;
}