view ast/Module.d @ 194:08f68d684047

Rename some files. Hopefully we can get a more iterative sema pass, that's a lot easier to "get startet with". Also added support for alias.
author Anders Johnsen <skabet@gmail.com>
date Tue, 29 Jul 2008 13:54:44 +0200
parents 6c5a3c0bb4fb
children
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)
    {
        if(!decl)
            return;
        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;
            case DeclType.AliasDecl:
                aliases ~= cast(AliasDecl)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;
    AliasDecl[]     aliases;
    Decl[] decls;

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