dvander@0: /* dvander@0: * Copyright (C) 2012 David Anderson dvander@0: * dvander@0: * This file is part of JITCraft. dvander@0: * dvander@0: * JITCraft is free software: you can redistribute it and/or modify it under dvander@0: * the terms of the GNU General Public License as published by the Free dvander@0: * Software Foundation, either version 3 of the License, or (at your option) dvander@0: * any later version. dvander@0: * dvander@0: * Foobar is distributed in the hope that it will be useful, but WITHOUT ANY dvander@0: * WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS dvander@0: * FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. dvander@0: * dvander@0: * You should have received a copy of the GNU General Public License along with dvander@0: * JITCraft. If not, see http://www.gnu.org/licenses/. dvander@0: */ dvander@0: #ifndef _include_jc_module_h_ dvander@0: #define _include_jc_module_h_ dvander@0: dvander@14: #include "Heap.h" dvander@0: #include "Code.h" dvander@26: #include "Functions.h" dvander@0: dvander@59: namespace ke { dvander@0: dvander@85: class Environment; dvander@195: class Struct; dvander@85: dvander@14: class Module : public Object dvander@0: { dvander@70: Barriered file_; dvander@85: Barriered code_; dvander@195: Barriered globals_; dvander@68: void *nativeIdentity_; dvander@0: dvander@0: public: dvander@195: static Module *New(Zone *zone); dvander@195: dvander@70: String *file() { dvander@70: return file_; dvander@70: } dvander@85: Code *code() { dvander@85: return code_; dvander@85: } dvander@195: Struct *globals() { dvander@195: return globals_; dvander@64: } dvander@195: dvander@70: void setPath(Handle path) { dvander@70: file_ = path; dvander@70: } dvander@85: void setCode(Handle code) { dvander@85: code_ = code; dvander@85: } dvander@195: void setGlobals(Handle globals) { dvander@195: globals_ = globals; dvander@195: } dvander@68: dvander@68: void *nativeIdentity() { dvander@68: return nativeIdentity_; dvander@68: } dvander@68: void setNativeIdentity(void *identity) { dvander@68: nativeIdentity_ = identity; dvander@68: } dvander@64: dvander@44: // Begin GC Descriptor. dvander@70: static inline size_t offsetOfFile() { danderson@91: return OFFSETOF(Module, file_); dvander@70: } dvander@85: static inline size_t offsetOfCode() { danderson@91: return OFFSETOF(Module, code_); dvander@85: } dvander@195: static inline size_t offsetOfGlobals() { dvander@195: return OFFSETOF(Module, globals_); dvander@195: } dvander@44: // End GC Descriptor. dvander@44: dvander@14: static inline Module *cast(Object *obj) { dvander@14: assert(!obj || obj->is(MapKind_Module)); dvander@14: return reinterpret_cast(obj); dvander@0: } dvander@0: }; dvander@0: dvander@0: } dvander@0: dvander@0: #endif // _include_jc_module_h_