Create WebAssembly functions
[WebKit-https.git] / Source / JavaScriptCore / wasm / JSWASMModule.h
1 /*
2  * Copyright (C) 2015 Apple Inc. All rights reserved.
3  *
4  * Redistribution and use in source and binary forms, with or without
5  * modification, are permitted provided that the following conditions
6  * are met:
7  * 1. Redistributions of source code must retain the above copyright
8  *    notice, this list of conditions and the following disclaimer.
9  * 2. Redistributions in binary form must reproduce the above copyright
10  *    notice, this list of conditions and the following disclaimer in the
11  *    documentation and/or other materials provided with the distribution.
12  *
13  * THIS SOFTWARE IS PROVIDED BY APPLE INC. ``AS IS'' AND ANY
14  * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
15  * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
16  * PURPOSE ARE DISCLAIMED.  IN NO EVENT SHALL APPLE INC. OR
17  * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
18  * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
19  * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
20  * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY
21  * OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
22  * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
23  * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
24  */
25
26 #ifndef JSWASMModule_h
27 #define JSWASMModule_h
28
29 #if ENABLE(WEBASSEMBLY)
30
31 #include "JSDestructibleObject.h"
32 #include "WASMFormat.h"
33
34 namespace JSC {
35
36 class JSWASMModule : public JSDestructibleObject {
37 public:
38     typedef JSDestructibleObject Base;
39
40     static JSWASMModule* create(VM& vm, Structure* structure)
41     {
42         JSWASMModule* module = new (NotNull, allocateCell<JSWASMModule>(vm.heap)) JSWASMModule(vm, structure);
43         module->finishCreation(vm);
44         return module;
45     }
46
47     DECLARE_INFO;
48
49     static Structure* createStructure(VM& vm, JSGlobalObject* globalObject)
50     {
51         return Structure::create(vm, globalObject, jsNull(), TypeInfo(ObjectType, StructureFlags), info());
52     }
53
54     static void destroy(JSCell*);
55     static void visitChildren(JSCell*, SlotVisitor&);
56
57     Vector<uint32_t>& i32Constants() { return m_i32Constants; }
58     Vector<float>& f32Constants() { return m_f32Constants; }
59     Vector<double>& f64Constants() { return m_f64Constants; }
60     Vector<WASMSignature>& signatures() { return m_signatures; }
61     Vector<WASMFunctionImport>& functionImports() { return m_functionImports; }
62     Vector<WASMFunctionImportSignature>& functionImportSignatures() { return m_functionImportSignatures; }
63     Vector<WASMType>& globalVariableTypes() { return m_globalVariableTypes; }
64     Vector<WASMFunctionDeclaration>& functionDeclarations() { return m_functionDeclarations; }
65     Vector<WASMFunctionPointerTable>& functionPointerTables() { return m_functionPointerTables; }
66
67     Vector<WriteBarrier<JSFunction>>& functions() { return m_functions; }
68
69 private:
70     JSWASMModule(VM& vm, Structure* structure)
71         : Base(vm, structure)
72     {
73     }
74
75     Vector<uint32_t> m_i32Constants;
76     Vector<float> m_f32Constants;
77     Vector<double> m_f64Constants;
78     Vector<WASMSignature> m_signatures;
79     Vector<WASMFunctionImport> m_functionImports;
80     Vector<WASMFunctionImportSignature> m_functionImportSignatures;
81     Vector<WASMType> m_globalVariableTypes;
82     Vector<WASMFunctionDeclaration> m_functionDeclarations;
83     Vector<WASMFunctionPointerTable> m_functionPointerTables;
84
85     Vector<WriteBarrier<JSFunction>> m_functions;
86 };
87
88 } // namespace JSC
89
90 #endif // ENABLE(WEBASSEMBLY)
91
92 #endif // JSWASMModule_h