src/compiler/CompileContext.h
author David Anderson <dvander@alliedmods.net>
Sat Nov 17 23:12:50 2012 -0800 (2012-11-17)
changeset 210 2f9997088e9b
parent 196 9904633b1dfc
child 250 0998a43cc155
permissions -rw-r--r--
Added missing file.
dvander@25
     1
/*
dvander@25
     2
 * Copyright (C) 2012 David Anderson
dvander@25
     3
 *
dvander@25
     4
 * This file is part of JITCraft.
dvander@25
     5
 *
dvander@25
     6
 * JITCraft is free software: you can redistribute it and/or modify it under
dvander@25
     7
 * the terms of the GNU General Public License as published by the Free
dvander@25
     8
 * Software Foundation, either version 3 of the License, or (at your option)
dvander@25
     9
 * any later version.
dvander@25
    10
 * 
dvander@25
    11
 * Foobar is distributed in the hope that it will be useful, but WITHOUT ANY
dvander@25
    12
 * WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
dvander@25
    13
 * FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details.
dvander@25
    14
 *
dvander@25
    15
 * You should have received a copy of the GNU General Public License along with
dvander@25
    16
 * JITCraft. If not, see http://www.gnu.org/licenses/.
dvander@25
    17
 */
dvander@25
    18
#ifndef _include_jitcraft_compile_context_h_
dvander@25
    19
#define _include_jitcraft_compile_context_h_
dvander@25
    20
dvander@25
    21
#include <stdarg.h>
dvander@195
    22
#include <string>
dvander@195
    23
#include "../Messages.h"
dvander@195
    24
#include "../PoolAllocator.h"
dvander@195
    25
#include "../Handles.h"
dvander@195
    26
#include "../Modules.h"
dvander@25
    27
dvander@59
    28
namespace ke {
dvander@25
    29
dvander@25
    30
class Zone;
dvander@195
    31
class ParseTree;
dvander@195
    32
class String;
dvander@195
    33
class ImportScope;
dvander@195
    34
class GlobalScope;
dvander@25
    35
struct SourcePosition;
dvander@195
    36
struct TranslationUnit;
dvander@195
    37
class ImportStatement;
dvander@195
    38
dvander@195
    39
struct TranslationUnit : public PoolObject
dvander@195
    40
{
dvander@195
    41
    TranslationUnit()
dvander@195
    42
      : tree_(NULL),
dvander@195
    43
        failed_(false),
dvander@195
    44
        importScope_(NULL),
dvander@195
    45
        globalScope_(NULL)
dvander@195
    46
    {
dvander@195
    47
    }
dvander@195
    48
dvander@195
    49
    ParseTree *tree_;
dvander@196
    50
    const char *path_;
dvander@195
    51
    bool failed_;
dvander@195
    52
    PoolList<TranslationUnit *> dependents_;
dvander@195
    53
    ImportScope *importScope_;
dvander@195
    54
    GlobalScope *globalScope_;
dvander@195
    55
    ScopedRoot<Module> module_;
dvander@195
    56
dvander@195
    57
    ParseTree *tree() const {
dvander@195
    58
        return tree_;
dvander@195
    59
    }
dvander@195
    60
    PoolList<TranslationUnit *> &dependents() {
dvander@195
    61
        return dependents_;
dvander@195
    62
    }
dvander@195
    63
    bool failed() const {
dvander@195
    64
        return failed_;
dvander@195
    65
    }
dvander@195
    66
    void setImportScope(ImportScope *scope) {
dvander@195
    67
        assert(!importScope_);
dvander@195
    68
        importScope_ = scope;
dvander@195
    69
    }
dvander@195
    70
    void setGlobalScope(GlobalScope *scope) {
dvander@195
    71
        assert(!globalScope_);
dvander@195
    72
        globalScope_ = scope;
dvander@195
    73
    }
dvander@195
    74
    ImportScope *importScope() const {
dvander@195
    75
        return importScope_;
dvander@195
    76
    }
dvander@195
    77
    GlobalScope *globalScope() const {
dvander@195
    78
        return globalScope_;
dvander@195
    79
    }
dvander@195
    80
};
dvander@25
    81
dvander@25
    82
class CompileContext
dvander@25
    83
{
dvander@25
    84
    Zone *zone_;
dvander@25
    85
    unsigned failures_;
dvander@69
    86
    const char *file_;
dvander@195
    87
    Vector<TranslationUnit *> units_;
dvander@195
    88
    Vector<TranslationUnit *> unparsed_;
dvander@195
    89
dvander@195
    90
  private:
dvander@195
    91
    char *loadSource(const char *file, size_t *length);
dvander@195
    92
    bool parse(TranslationUnit *unit);
dvander@195
    93
    bool evaluateImports(TranslationUnit *unit);
dvander@195
    94
    bool propagateFailure();
dvander@25
    95
dvander@25
    96
  public:
dvander@69
    97
    CompileContext(Zone *zone, const char *file);
dvander@69
    98
    ~CompileContext();
dvander@25
    99
dvander@195
   100
    bool addTranslationUnit(TranslationUnit *unit);
dvander@195
   101
    bool compile();
dvander@195
   102
dvander@25
   103
    void reportErrorVa(const SourcePosition &pos, Message msg, va_list ap);
dvander@25
   104
    void reportError(const SourcePosition &pos, Message msg, ...);
dvander@25
   105
dvander@25
   106
    unsigned failures() const {
dvander@25
   107
        return failures_;
dvander@25
   108
    }
dvander@25
   109
};
dvander@25
   110
dvander@25
   111
}
dvander@25
   112
dvander@25
   113
#endif // _include_jitcraft_compile_context_h_