5 #ifndef V8_WASM_WASM_RESULT_H_ 6 #define V8_WASM_WASM_RESULT_H_ 11 #include "src/base/compiler-specific.h" 12 #include "src/utils.h" 14 #include "src/globals.h" 34 : error_offset_(other.error_offset_),
35 error_msg_(std::move(other.error_msg_)) {}
37 bool ok()
const {
return error_msg_.empty(); }
38 bool failed()
const {
return !ok(); }
40 uint32_t error_offset()
const {
return error_offset_; }
41 const std::string& error_msg()
const & {
return error_msg_; }
42 std::string&& error_msg() && {
return std::move(error_msg_); }
46 : error_offset_(error_offset), error_msg_(std::move(error_msg)) {
48 DCHECK(!error_msg_.empty());
51 static std::string FormatError(
const char* format, va_list args);
55 std::string error_msg_;
65 explicit Result(S&& value) : value_(std::forward<S>(value)) {}
69 value_(std::move(other).value()) {}
74 Error(
uint32_t offset,
const char* format, ...) {
76 va_start(args, format);
77 Result<T> error_result{offset, FormatError(format, args)};
84 return Result<T>{error_offset, std::move(error_msg)};
88 return Error(error_result.error_offset(),
89 std::move(error_result).error_msg());
93 return Error(error_result.error_offset(), error_result.error_msg());
100 const T& value()
const & {
106 return std::move(value_);
113 :
ResultBase(error_offset, std::move(error_msg)) {}
115 DISALLOW_COPY_AND_ASSIGN(
Result);
122 : isolate_(isolate), context_(context) {}
127 PRINTF_FORMAT(2, 3)
void TypeError(
const char* fmt, ...);
128 PRINTF_FORMAT(2, 3)
void RangeError(
const char* fmt, ...);
129 PRINTF_FORMAT(2, 3)
void CompileError(
const char* fmt, ...);
130 PRINTF_FORMAT(2, 3)
void LinkError(
const char* fmt, ...);
131 PRINTF_FORMAT(2, 3)
void RuntimeError(
const char* fmt, ...);
133 void CompileFailed(
const char* error,
const ResultBase& result) {
134 DCHECK(result.failed());
135 CompileError(
"%s: %s @+%u", error, result.error_msg().c_str(),
136 result.error_offset());
139 void CompileFailed(
const ResultBase& result) {
140 DCHECK(result.failed());
141 CompileError(
"%s @+%u", result.error_msg().c_str(), result.error_offset());
150 bool error()
const {
return error_type_ !=
kNone; }
151 bool wasm_error() {
return error_type_ >= kFirstWasmError; }
152 const char* error_msg() {
return error_msg_.c_str(); }
154 Isolate* isolate()
const {
return isolate_; }
168 kFirstWasmError = kCompileError
171 void Format(ErrorType error_type_,
const char* fmt, va_list);
174 const char* context_;
175 ErrorType error_type_ =
kNone;
176 std::string error_msg_;
181 DISALLOW_NEW_AND_DELETE();
193 #endif // V8_WASM_WASM_RESULT_H_