src/Modules.h
author David Anderson <dvander@alliedmods.net>
Tue Jul 24 23:53:34 2012 -0700 (2012-07-24)
changeset 86 32ad0523b309
parent 85 jitcraft/Modules.h@06a0015b6a5c
child 91 5f4402180204
permissions -rw-r--r--
Renamed jitcraft/ to src/, fixed some /Wp64 warnings.
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@85
    28
dvander@14
    29
class Module : public Object
dvander@0
    30
{
dvander@14
    31
    Barriered<FixedArray> functions_;
dvander@64
    32
    Barriered<FixedArray> publics_;
dvander@68
    33
    Barriered<FixedArray> natives_;
dvander@70
    34
    Barriered<String> file_;
dvander@85
    35
    Barriered<Environment> environment_;
dvander@85
    36
    Barriered<Code> code_;
dvander@68
    37
    void *nativeIdentity_;
dvander@0
    38
dvander@0
    39
  public:
dvander@14
    40
    static Module *New(Zone *zone, unsigned nfunctions);
dvander@0
    41
dvander@26
    42
    Function *getFunction(size_t i) {
dvander@26
    43
        return Function::cast(functions_->at(i));
dvander@0
    44
    }
dvander@26
    45
    void setFunction(Zone *zone, size_t i, Function *fun) {
dvander@14
    46
        assert(!functions_->at(i));
dvander@26
    47
        assert(fun);
dvander@26
    48
        functions_->set(zone, i, fun);
dvander@14
    49
    }
dvander@14
    50
dvander@64
    51
    FixedArray *publics() {
dvander@64
    52
        return publics_;
dvander@64
    53
    }
dvander@68
    54
    FixedArray *natives() {
dvander@68
    55
        return natives_;
dvander@68
    56
    }
dvander@70
    57
    String *file() {
dvander@70
    58
        return file_;
dvander@70
    59
    }
dvander@85
    60
    Environment *environment() {
dvander@85
    61
        return environment_;
dvander@85
    62
    }
dvander@85
    63
    Code *code() {
dvander@85
    64
        return code_;
dvander@85
    65
    }
dvander@68
    66
dvander@64
    67
    void setPublics(Handle<FixedArray> publics) {
dvander@64
    68
        publics_ = publics;
dvander@64
    69
    }
dvander@68
    70
    void setNatives(Handle<FixedArray> natives) {
dvander@68
    71
        natives_ = natives;
dvander@68
    72
    }
dvander@70
    73
    void setPath(Handle<String> path) {
dvander@70
    74
        file_ = path;
dvander@70
    75
    }
dvander@85
    76
    void setEnvironment(Handle<Environment> environment) {
dvander@85
    77
        environment_ = environment;
dvander@85
    78
    }
dvander@85
    79
    void setCode(Handle<Code> code) {
dvander@85
    80
        code_ = code;
dvander@85
    81
    }
dvander@68
    82
dvander@68
    83
    void *nativeIdentity() {
dvander@68
    84
        return nativeIdentity_;
dvander@68
    85
    }
dvander@68
    86
    void setNativeIdentity(void *identity) {
dvander@68
    87
        nativeIdentity_ = identity;
dvander@68
    88
    }
dvander@64
    89
dvander@44
    90
    // Begin GC Descriptor.
dvander@44
    91
    static inline size_t offsetOfFunctions() {
dvander@44
    92
        return offsetof(Module, functions_);
dvander@44
    93
    }
dvander@64
    94
    static inline size_t offsetOfPublics() {
dvander@64
    95
        return offsetof(Module, publics_);
dvander@64
    96
    }
dvander@68
    97
    static inline size_t offsetOfNatives() {
dvander@68
    98
        return offsetof(Module, natives_);
dvander@68
    99
    }
dvander@70
   100
    static inline size_t offsetOfFile() {
dvander@70
   101
        return offsetof(Module, file_);
dvander@70
   102
    }
dvander@85
   103
    static inline size_t offsetOfEnvironment() {
dvander@85
   104
        return offsetof(Module, environment_);
dvander@85
   105
    }
dvander@85
   106
    static inline size_t offsetOfCode() {
dvander@85
   107
        return offsetof(Module, code_);
dvander@85
   108
    }
dvander@44
   109
    // End GC Descriptor.
dvander@44
   110
dvander@14
   111
    static inline Module *cast(Object *obj) {
dvander@14
   112
        assert(!obj || obj->is(MapKind_Module));
dvander@14
   113
        return reinterpret_cast<Module *>(obj);
dvander@0
   114
    }
dvander@0
   115
};
dvander@0
   116
dvander@0
   117
}
dvander@0
   118
dvander@0
   119
#endif // _include_jc_module_h_