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

Unified Diff: src/runtime/runtime-wasm.cc

Issue 2562393002: [wasm] Introduce the TrapIf and TrapUnless operators to generate trap code. (Closed)
Patch Set: Created 4 years 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/runtime/runtime-wasm.cc
diff --git a/src/runtime/runtime-wasm.cc b/src/runtime/runtime-wasm.cc
index e840eb464e9797325d5a89514ff82c3a94b3d3c0..161f7f4d52331fc0a371b20c14593ff773c84f41 100644
--- a/src/runtime/runtime-wasm.cc
+++ b/src/runtime/runtime-wasm.cc
@@ -15,6 +15,7 @@
#include "src/v8memory.h"
#include "src/wasm/wasm-module.h"
#include "src/wasm/wasm-objects.h"
+#include "src/wasm/wasm-opcodes.h"
namespace v8 {
namespace internal {
@@ -61,14 +62,14 @@ RUNTIME_FUNCTION(Runtime_WasmGrowMemory) {
wasm::GrowMemory(isolate, instance, delta_pages));
}
-RUNTIME_FUNCTION(Runtime_ThrowWasmError) {
- HandleScope scope(isolate);
- DCHECK_EQ(2, args.length());
- CONVERT_SMI_ARG_CHECKED(message_id, 0);
- CONVERT_SMI_ARG_CHECKED(byte_offset, 1);
+Object* ThrowRuntimeError(Isolate* isolate, int message_id, int byte_offset) {
Handle<Object> error_obj = isolate->factory()->NewWasmRuntimeError(
static_cast<MessageTemplate::Template>(message_id));
+ if (FLAG_wasm_trap_if) {
+ return isolate->Throw(*error_obj);
+ }
+
// For wasm traps, the byte offset (a.k.a source position) can not be
// determined from relocation info, since the explicit checks for traps
// converge in one singe block which calls this runtime function.
@@ -115,6 +116,26 @@ RUNTIME_FUNCTION(Runtime_ThrowWasmError) {
return isolate->Throw(*error_obj);
}
+RUNTIME_FUNCTION(Runtime_ThrowWasmError) {
+ HandleScope scope(isolate);
+ DCHECK_EQ(2, args.length());
+ CONVERT_SMI_ARG_CHECKED(message_id, 0);
+ CONVERT_SMI_ARG_CHECKED(byte_offset, 1);
+ return ThrowRuntimeError(isolate, message_id, byte_offset);
+}
+
+#define DECLARE_ENUM(name) \
+ RUNTIME_FUNCTION(Runtime_ThrowWasm##name) { \
titzer 2016/12/12 14:21:34 Can you factor the common code out of this macro i
ahaas 2016/12/13 12:38:59 Done.
+ HandleScope scope(isolate); \
+ int message_id = wasm::WasmOpcodes::TrapReasonToMessageId(wasm::k##name); \
+ printf("Throw trap %s\n", \
+ wasm::WasmOpcodes::TrapReasonMessage(wasm::k##name)); \
+ int byte_offset = 1; \
+ return ThrowRuntimeError(isolate, message_id, byte_offset); \
+ }
+FOREACH_WASM_TRAPREASON(DECLARE_ENUM)
+#undef DECLARE_ENUM
+
RUNTIME_FUNCTION(Runtime_WasmThrowTypeError) {
HandleScope scope(isolate);
DCHECK_EQ(0, args.length());

Powered by Google App Engine
This is Rietveld 408576698