src/Modules.h
author David Anderson <dvander@alliedmods.net>
Wed Dec 26 17:20:55 2012 -0800 (2012-12-26)
changeset 244 3c57bbf22aa2
parent 195 c1ba166f3fc4
child 251 ca99a81745fe
permissions -rw-r--r--
Fix clang bustage.
dvander@0
     1
/*
dvander@0
     2
 * Copyright (C) 2012 David Anderson
dvander@0
     3
 *
dvander@0
     4
 * This file is part of JITCraft.
dvander@0
     5
 *
dvander@0
     6
 * JITCraft 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@0
    11
 * Foobar 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@0
    16
 * JITCraft. 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@0
    24
dvander@59
    25
namespace ke {
dvander@0
    26
dvander@85
    27
class Environment;
dvander@195
    28
class Struct;
dvander@85
    29
dvander@14
    30
class Module : public Object
dvander@0
    31
{
dvander@70
    32
    Barriered<String> file_;
dvander@85
    33
    Barriered<Code> code_;
dvander@195
    34
    Barriered<Struct> globals_;
dvander@68
    35
    void *nativeIdentity_;
dvander@0
    36
dvander@0
    37
  public:
dvander@195
    38
    static Module *New(Zone *zone);
dvander@195
    39
    
dvander@70
    40
    String *file() {
dvander@70
    41
        return file_;
dvander@70
    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@70
    50
    void setPath(Handle<String> path) {
dvander@70
    51
        file_ = path;
dvander@70
    52
    }
dvander@85
    53
    void setCode(Handle<Code> code) {
dvander@85
    54
        code_ = code;
dvander@85
    55
    }
dvander@195
    56
    void setGlobals(Handle<Struct> globals) {
dvander@195
    57
        globals_ = globals;
dvander@195
    58
    }
dvander@68
    59
dvander@68
    60
    void *nativeIdentity() {
dvander@68
    61
        return nativeIdentity_;
dvander@68
    62
    }
dvander@68
    63
    void setNativeIdentity(void *identity) {
dvander@68
    64
        nativeIdentity_ = identity;
dvander@68
    65
    }
dvander@64
    66
dvander@44
    67
    // Begin GC Descriptor.
dvander@70
    68
    static inline size_t offsetOfFile() {
danderson@91
    69
        return OFFSETOF(Module, file_);
dvander@70
    70
    }
dvander@85
    71
    static inline size_t offsetOfCode() {
danderson@91
    72
        return OFFSETOF(Module, code_);
dvander@85
    73
    }
dvander@195
    74
    static inline size_t offsetOfGlobals() {
dvander@195
    75
        return OFFSETOF(Module, globals_);
dvander@195
    76
    }
dvander@44
    77
    // End GC Descriptor.
dvander@44
    78
dvander@14
    79
    static inline Module *cast(Object *obj) {
dvander@14
    80
        assert(!obj || obj->is(MapKind_Module));
dvander@14
    81
        return reinterpret_cast<Module *>(obj);
dvander@0
    82
    }
dvander@0
    83
};
dvander@0
    84
dvander@0
    85
}
dvander@0
    86
dvander@0
    87
#endif // _include_jc_module_h_