49106e4858
This is a second attempt at landing CL 644866 which was reverted by CL 667019. Extends the current implementation of WASM exceptions to be able to throw exceptions with values (not just tags). A JS typed (uint_16) array is used to hold the thrown values. This allows all WASM types to be stored (i32, i64, f32, and f64) as well as be inspected in JS. The previous CL was reverted because the WASM compiler made calls to run time functions with tagged objects, which must not be done. To fix this, all run time calls use the thread-level isolate to hold the exception being processed. Bug: v8:6577 Change-Id: I4b1ef7e2847b71a2fab8e9934a0531057db9de63 Reviewed-on: https://chromium-review.googlesource.com/677056 Commit-Queue: Karl Schimpf <kschimpf@chromium.org> Reviewed-by: Clemens Hammacher <clemensh@chromium.org> Reviewed-by: Eric Holk <eholk@chromium.org> Cr-Commit-Position: refs/heads/master@{#48148}
33 lines
772 B
C++
33 lines
772 B
C++
// Copyright 2017 the V8 project authors. All rights reserved.
|
|
// Use of this source code is governed by a BSD-style license that can be
|
|
// found in the LICENSE file.
|
|
|
|
#ifndef V8_TEST_COMMON_FLAG_UTILS_H
|
|
#define V8_TEST_COMMON_FLAG_UTILS_H
|
|
|
|
namespace v8 {
|
|
namespace internal {
|
|
|
|
template <typename T>
|
|
class FlagScope {
|
|
public:
|
|
FlagScope(T* flag, T new_value) : flag_(flag), previous_value_(*flag) {
|
|
*flag = new_value;
|
|
}
|
|
~FlagScope() { *flag_ = previous_value_; }
|
|
|
|
private:
|
|
T* flag_;
|
|
T previous_value_;
|
|
};
|
|
|
|
#define FLAG_SCOPE(flag) \
|
|
FlagScope<bool> __scope_##flag##__LINE__(&FLAG_##flag, true)
|
|
|
|
#define EXPERIMENTAL_FLAG_SCOPE(flag) FLAG_SCOPE(experimental_wasm_##flag)
|
|
|
|
} // namespace internal
|
|
} // namespace v8
|
|
|
|
#endif // V8_TEST_COMMON_FLAG_UTILS_H
|