Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(1369)

Unified Diff: src/wasm/wasm-objects.h

Issue 2784233004: [wasm] Further simplify WasmCompiledModule. (Closed)
Patch Set: . Created 3 years, 8 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
Index: src/wasm/wasm-objects.h
diff --git a/src/wasm/wasm-objects.h b/src/wasm/wasm-objects.h
index 98eee4a2e0caa16bd06a2a5020d81ad8f80b7a8f..47b17b524289a04374443e46e627094597b143ef 100644
--- a/src/wasm/wasm-objects.h
+++ b/src/wasm/wasm-objects.h
@@ -258,64 +258,67 @@ class WasmCompiledModule : public FixedArray {
return reinterpret_cast<WasmCompiledModule*>(fixed_array);
}
-#define WCM_OBJECT_OR_WEAK(TYPE, NAME, ID, TYPE_CHECK) \
- Handle<TYPE> NAME() const { return handle(ptr_to_##NAME()); } \
- \
- MaybeHandle<TYPE> maybe_##NAME() const { \
- if (has_##NAME()) return NAME(); \
- return MaybeHandle<TYPE>(); \
- } \
- \
- TYPE* maybe_ptr_to_##NAME() const { \
- Object* obj = get(ID); \
- if (!(TYPE_CHECK)) return nullptr; \
- return TYPE::cast(obj); \
- } \
- \
- TYPE* ptr_to_##NAME() const { \
- Object* obj = get(ID); \
- DCHECK(TYPE_CHECK); \
- return TYPE::cast(obj); \
- } \
- \
- void set_##NAME(Handle<TYPE> value) { set_ptr_to_##NAME(*value); } \
- \
- void set_ptr_to_##NAME(TYPE* value) { set(ID, value); } \
- \
- bool has_##NAME() const { \
- Object* obj = get(ID); \
- return TYPE_CHECK; \
- } \
- \
- void reset_##NAME() { set_undefined(ID); }
+#define WCM_OBJECT_OR_WEAK(TYPE, NAME, ID, TYPE_CHECK, SETTER_MODIFIER) \
+ public: \
+ Handle<TYPE> NAME() const { return handle(ptr_to_##NAME()); } \
+ \
+ MaybeHandle<TYPE> maybe_##NAME() const { \
+ if (has_##NAME()) return NAME(); \
+ return MaybeHandle<TYPE>(); \
+ } \
+ \
+ TYPE* maybe_ptr_to_##NAME() const { \
+ Object* obj = get(ID); \
+ if (!(TYPE_CHECK)) return nullptr; \
+ return TYPE::cast(obj); \
+ } \
+ \
+ TYPE* ptr_to_##NAME() const { \
+ Object* obj = get(ID); \
+ DCHECK(TYPE_CHECK); \
+ return TYPE::cast(obj); \
+ } \
+ \
+ bool has_##NAME() const { \
+ Object* obj = get(ID); \
+ return TYPE_CHECK; \
+ } \
+ \
+ void reset_##NAME() { set_undefined(ID); } \
+ \
+ SETTER_MODIFIER: \
+ void set_##NAME(Handle<TYPE> value) { set_ptr_to_##NAME(*value); } \
+ void set_ptr_to_##NAME(TYPE* value) { set(ID, value); }
#define WCM_OBJECT(TYPE, NAME) \
- WCM_OBJECT_OR_WEAK(TYPE, NAME, kID_##NAME, obj->Is##TYPE())
+ WCM_OBJECT_OR_WEAK(TYPE, NAME, kID_##NAME, obj->Is##TYPE(), public)
+
+#define WCM_CONST_OBJECT(TYPE, NAME) \
+ WCM_OBJECT_OR_WEAK(TYPE, NAME, kID_##NAME, obj->Is##TYPE(), private)
#define WCM_WASM_OBJECT(TYPE, NAME) \
- WCM_OBJECT_OR_WEAK(TYPE, NAME, kID_##NAME, TYPE::Is##TYPE(obj))
+ WCM_OBJECT_OR_WEAK(TYPE, NAME, kID_##NAME, TYPE::Is##TYPE(obj), private)
-#define WCM_SMALL_FIXED_NUMBER(TYPE, NAME) \
+#define WCM_SMALL_CONST_NUMBER(TYPE, NAME) \
+ public: \
TYPE NAME() const { \
return static_cast<TYPE>(Smi::cast(get(kID_##NAME))->value()); \
} \
+ \
+ private: \
void set_##NAME(TYPE value) { set(kID_##NAME, Smi::FromInt(value)); }
-#define WCM_SMALL_NUMBER(TYPE, NAME) \
- TYPE NAME() const { \
- return static_cast<TYPE>(Smi::cast(get(kID_##NAME))->value()); \
- } \
- void set_##NAME(TYPE value) { set(kID_##NAME, Smi::FromInt(value)); } \
- bool has_##NAME() const { return get(kID_##NAME)->IsSmi(); }
-
-#define WCM_WEAK_LINK(TYPE, NAME) \
- WCM_OBJECT_OR_WEAK(WeakCell, weak_##NAME, kID_##NAME, obj->IsWeakCell()); \
- \
- Handle<TYPE> NAME() const { \
- return handle(TYPE::cast(weak_##NAME()->value())); \
+#define WCM_WEAK_LINK(TYPE, NAME) \
+ WCM_OBJECT_OR_WEAK(WeakCell, weak_##NAME, kID_##NAME, obj->IsWeakCell(), \
+ public) \
+ \
+ public: \
+ Handle<TYPE> NAME() const { \
+ return handle(TYPE::cast(weak_##NAME()->value())); \
}
#define WCM_LARGE_NUMBER(TYPE, NAME) \
+ public: \
TYPE NAME() const { \
Object* value = get(kID_##NAME); \
DCHECK(value->IsMutableHeapNumber()); \
@@ -336,29 +339,35 @@ class WasmCompiledModule : public FixedArray {
} \
bool has_##NAME() const { return get(kID_##NAME)->IsMutableHeapNumber(); }
+// Add values here if they are required for creating new instances or
+// for deserialization, and if they are serializable.
+// By default, instance values go to WasmInstanceObject, however, if
+// we embed the generated code with a value, then we track that value here.
#define CORE_WCM_PROPERTY_TABLE(MACRO) \
MACRO(WASM_OBJECT, WasmSharedModuleData, shared) \
MACRO(OBJECT, Context, native_context) \
- MACRO(SMALL_FIXED_NUMBER, uint32_t, num_imported_functions) \
- MACRO(OBJECT, FixedArray, code_table) \
+ MACRO(SMALL_CONST_NUMBER, uint32_t, num_imported_functions) \
+ MACRO(CONST_OBJECT, FixedArray, code_table) \
MACRO(OBJECT, FixedArray, weak_exported_functions) \
MACRO(OBJECT, FixedArray, function_tables) \
MACRO(OBJECT, FixedArray, signature_tables) \
- MACRO(OBJECT, FixedArray, empty_function_tables) \
+ MACRO(CONST_OBJECT, FixedArray, empty_function_tables) \
MACRO(LARGE_NUMBER, size_t, embedded_mem_start) \
MACRO(LARGE_NUMBER, size_t, globals_start) \
MACRO(LARGE_NUMBER, uint32_t, embedded_mem_size) \
- MACRO(SMALL_FIXED_NUMBER, uint32_t, min_mem_pages) \
- MACRO(SMALL_FIXED_NUMBER, uint32_t, max_mem_pages) \
+ MACRO(SMALL_CONST_NUMBER, uint32_t, min_mem_pages) \
+ MACRO(SMALL_CONST_NUMBER, uint32_t, max_mem_pages) \
MACRO(WEAK_LINK, WasmCompiledModule, next_instance) \
MACRO(WEAK_LINK, WasmCompiledModule, prev_instance) \
MACRO(WEAK_LINK, JSObject, owning_instance) \
MACRO(WEAK_LINK, WasmModuleObject, wasm_module)
#if DEBUG
-#define DEBUG_ONLY_TABLE(MACRO) MACRO(SMALL_NUMBER, uint32_t, instance_id)
+#define DEBUG_ONLY_TABLE(MACRO) MACRO(SMALL_CONST_NUMBER, uint32_t, instance_id)
#else
#define DEBUG_ONLY_TABLE(IGNORE)
+
+ public:
uint32_t instance_id() const { return static_cast<uint32_t>(-1); }
#endif
@@ -374,8 +383,11 @@ class WasmCompiledModule : public FixedArray {
};
public:
- static Handle<WasmCompiledModule> New(Isolate* isolate,
- Handle<WasmSharedModuleData> shared);
+ static Handle<WasmCompiledModule> New(
+ Isolate* isolate, Handle<WasmSharedModuleData> shared,
+ Handle<FixedArray> code_table,
+ MaybeHandle<FixedArray> maybe_empty_function_tables,
+ MaybeHandle<FixedArray> maybe_signature_tables);
static Handle<WasmCompiledModule> Clone(Isolate* isolate,
Handle<WasmCompiledModule> module);
@@ -412,6 +424,7 @@ class WasmCompiledModule : public FixedArray {
WCM_PROPERTY_TABLE(DECLARATION)
#undef DECLARATION
+ public:
// Allow to call method on WasmSharedModuleData also on this object.
#define FORWARD_SHARED(type, name) \
type name() { return shared()->name(); }
@@ -514,6 +527,10 @@ class WasmCompiledModule : public FixedArray {
Handle<Code> caller, int offset,
int func_index, bool patch_caller);
+ void ReplaceCodeTableForTesting(Handle<FixedArray> testing_table) {
+ set_code_table(testing_table);
+ }
+
private:
void InitId();
« src/wasm/wasm-module.cc ('K') | « src/wasm/wasm-module.cc ('k') | src/wasm/wasm-objects.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698