src/Modules.h
author David Anderson <dvander@alliedmods.net>
Tue Jan 01 15:34:07 2013 -0800 (2013-01-01)
changeset 251 ca99a81745fe
parent 195 c1ba166f3fc4
child 256 3c184218462d
permissions -rw-r--r--
Refactor compilation process around the new concept of packages.
dvander@0
     1
/*
dvander@0
     2
 * Copyright (C) 2012 David Anderson
dvander@0
     3
 *
dvander@251
     4
 * This file is part of SourcePawn.
dvander@0
     5
 *
dvander@251
     6
 * SourcePawn is free software: you can redistribute it and/or modify it under
dvander@0
     7
 * the terms of the GNU General Public License as published by the Free
dvander@0
     8
 * Software Foundation, either version 3 of the License, or (at your option)
dvander@0
     9
 * any later version.
dvander@0
    10
 * 
dvander@251
    11
 * SourcePawn is distributed in the hope that it will be useful, but WITHOUT ANY
dvander@0
    12
 * WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
dvander@0
    13
 * FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details.
dvander@0
    14
 *
dvander@0
    15
 * You should have received a copy of the GNU General Public License along with
dvander@251
    16
 * SourcePawn. If not, see http://www.gnu.org/licenses/.
dvander@0
    17
 */
dvander@0
    18
#ifndef _include_jc_module_h_
dvander@0
    19
#define _include_jc_module_h_
dvander@0
    20
dvander@14
    21
#include "Heap.h"
dvander@0
    22
#include "Code.h"
dvander@26
    23
#include "Functions.h"
dvander@251
    24
#include "Packages.h"
dvander@0
    25
dvander@59
    26
namespace ke {
dvander@0
    27
dvander@85
    28
class Environment;
dvander@195
    29
class Struct;
dvander@251
    30
class Package;
dvander@251
    31
struct TranslationUnit;
dvander@85
    32
dvander@251
    33
class Module : public Importable
dvander@0
    34
{
dvander@85
    35
    Barriered<Code> code_;
dvander@195
    36
    Barriered<Struct> globals_;
dvander@68
    37
    void *nativeIdentity_;
dvander@251
    38
    TranslationUnit *unit_;
dvander@0
    39
dvander@0
    40
  public:
dvander@251
    41
    static Module *New(Zone *zone, Handle<Package> package, Handle<String> path, Handle<String> name);
dvander@195
    42
    
dvander@85
    43
    Code *code() {
dvander@85
    44
        return code_;
dvander@85
    45
    }
dvander@195
    46
    Struct *globals() {
dvander@195
    47
        return globals_;
dvander@64
    48
    }
dvander@195
    49
dvander@251
    50
    bool compiled() {
dvander@251
    51
        return !!code_;
dvander@70
    52
    }
dvander@251
    53
dvander@251
    54
    // Modules are pre-created, and may have their intermediate compilation
dvander@251
    55
    // data attached while they are being compiled.
dvander@251
    56
    bool compiling() {
dvander@251
    57
        return !!unit_;
dvander@251
    58
    }
dvander@251
    59
    TranslationUnit *translationUnit() {
dvander@251
    60
        return unit_;
dvander@251
    61
    }
dvander@251
    62
    void setTranslationUnit(TranslationUnit *unit) {
dvander@251
    63
        unit_ = unit;
dvander@251
    64
    }
dvander@251
    65
dvander@85
    66
    void setCode(Handle<Code> code) {
dvander@85
    67
        code_ = code;
dvander@85
    68
    }
dvander@195
    69
    void setGlobals(Handle<Struct> globals) {
dvander@195
    70
        globals_ = globals;
dvander@195
    71
    }
dvander@68
    72
dvander@44
    73
    // Begin GC Descriptor.
dvander@85
    74
    static inline size_t offsetOfCode() {
danderson@91
    75
        return OFFSETOF(Module, code_);
dvander@85
    76
    }
dvander@195
    77
    static inline size_t offsetOfGlobals() {
dvander@195
    78
        return OFFSETOF(Module, globals_);
dvander@195
    79
    }
dvander@44
    80
    // End GC Descriptor.
dvander@44
    81
dvander@14
    82
    static inline Module *cast(Object *obj) {
dvander@14
    83
        assert(!obj || obj->is(MapKind_Module));
dvander@14
    84
        return reinterpret_cast<Module *>(obj);
dvander@0
    85
    }
dvander@0
    86
};
dvander@0
    87
dvander@0
    88
}
dvander@0
    89
dvander@0
    90
#endif // _include_jc_module_h_