Chromium Code Reviews| OLD | NEW |
|---|---|
| 1 // Copyright 2015 the V8 project authors. All rights reserved. | 1 // Copyright 2015 the V8 project authors. All rights reserved. |
| 2 // Use of this source code is governed by a BSD-style license that can be | 2 // Use of this source code is governed by a BSD-style license that can be |
| 3 // found in the LICENSE file. | 3 // found in the LICENSE file. |
| 4 | 4 |
| 5 #ifndef V8_WASM_DECODER_H_ | 5 #ifndef V8_WASM_DECODER_H_ |
| 6 #define V8_WASM_DECODER_H_ | 6 #define V8_WASM_DECODER_H_ |
| 7 | 7 |
| 8 #include <memory> | |
| 9 | |
| 8 #include "src/base/compiler-specific.h" | 10 #include "src/base/compiler-specific.h" |
| 9 #include "src/base/smart-pointers.h" | 11 #include "src/base/smart-pointers.h" |
| 10 #include "src/flags.h" | 12 #include "src/flags.h" |
| 11 #include "src/signature.h" | 13 #include "src/signature.h" |
| 12 #include "src/utils.h" | 14 #include "src/utils.h" |
| 13 #include "src/wasm/wasm-result.h" | 15 #include "src/wasm/wasm-result.h" |
| 14 #include "src/zone-containers.h" | 16 #include "src/zone-containers.h" |
| 15 | 17 |
| 16 namespace v8 { | 18 namespace v8 { |
| 17 namespace internal { | 19 namespace internal { |
| (...skipping 222 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 240 if (FLAG_wasm_break_on_decoder_error) { | 242 if (FLAG_wasm_break_on_decoder_error) { |
| 241 base::OS::DebugBreak(); | 243 base::OS::DebugBreak(); |
| 242 } | 244 } |
| 243 #endif | 245 #endif |
| 244 const int kMaxErrorMsg = 256; | 246 const int kMaxErrorMsg = 256; |
| 245 char* buffer = new char[kMaxErrorMsg]; | 247 char* buffer = new char[kMaxErrorMsg]; |
| 246 va_list arguments; | 248 va_list arguments; |
| 247 va_start(arguments, format); | 249 va_start(arguments, format); |
| 248 base::OS::VSNPrintF(buffer, kMaxErrorMsg - 1, format, arguments); | 250 base::OS::VSNPrintF(buffer, kMaxErrorMsg - 1, format, arguments); |
| 249 va_end(arguments); | 251 va_end(arguments); |
| 250 error_msg_.Reset(buffer); | 252 error_msg_.reset(buffer); |
| 251 error_pc_ = pc; | 253 error_pc_ = pc; |
| 252 error_pt_ = pt; | 254 error_pt_ = pt; |
| 253 onFirstError(); | 255 onFirstError(); |
| 254 } | 256 } |
| 255 } | 257 } |
| 256 | 258 |
| 257 // Behavior triggered on first error, overridden in subclasses. | 259 // Behavior triggered on first error, overridden in subclasses. |
| 258 virtual void onFirstError() {} | 260 virtual void onFirstError() {} |
| 259 | 261 |
| 260 // Debugging helper to print bytes up to the end. | 262 // Debugging helper to print bytes up to the end. |
| (...skipping 12 matching lines...) Expand all Loading... | |
| 273 template <typename T> | 275 template <typename T> |
| 274 Result<T> toResult(T val) { | 276 Result<T> toResult(T val) { |
| 275 Result<T> result; | 277 Result<T> result; |
| 276 if (error_pc_) { | 278 if (error_pc_) { |
| 277 TRACE("Result error: %s\n", error_msg_.get()); | 279 TRACE("Result error: %s\n", error_msg_.get()); |
| 278 result.error_code = kError; | 280 result.error_code = kError; |
| 279 result.start = start_; | 281 result.start = start_; |
| 280 result.error_pc = error_pc_; | 282 result.error_pc = error_pc_; |
| 281 result.error_pt = error_pt_; | 283 result.error_pt = error_pt_; |
| 282 // transfer ownership of the error to the result. | 284 // transfer ownership of the error to the result. |
| 283 result.error_msg.Reset(error_msg_.Detach()); | 285 result.error_msg.reset(error_msg_.release()); |
| 284 } else { | 286 } else { |
| 285 result.error_code = kSuccess; | 287 result.error_code = kSuccess; |
| 286 } | 288 } |
| 287 result.val = std::move(val); | 289 result.val = std::move(val); |
| 288 return result; | 290 return result; |
| 289 } | 291 } |
| 290 | 292 |
| 291 // Resets the boundaries of this decoder. | 293 // Resets the boundaries of this decoder. |
| 292 void Reset(const byte* start, const byte* end) { | 294 void Reset(const byte* start, const byte* end) { |
| 293 start_ = start; | 295 start_ = start; |
| 294 pc_ = start; | 296 pc_ = start; |
| 295 limit_ = end; | 297 limit_ = end; |
| 296 end_ = end; | 298 end_ = end; |
| 297 error_pc_ = nullptr; | 299 error_pc_ = nullptr; |
| 298 error_pt_ = nullptr; | 300 error_pt_ = nullptr; |
| 299 error_msg_.Reset(nullptr); | 301 error_msg_.reset(nullptr); |
|
Igor Sheludko
2016/07/25 08:56:44
Just .reset()
jochen (gone - plz use gerrit)
2016/07/25 09:14:48
done
| |
| 300 } | 302 } |
| 301 | 303 |
| 302 bool ok() const { return error_pc_ == nullptr; } | 304 bool ok() const { return error_pc_ == nullptr; } |
| 303 bool failed() const { return !error_msg_.is_empty(); } | 305 bool failed() const { return !!error_msg_; } |
| 304 bool more() const { return pc_ < limit_; } | 306 bool more() const { return pc_ < limit_; } |
| 305 | 307 |
| 306 const byte* start() { return start_; } | 308 const byte* start() { return start_; } |
| 307 const byte* pc() { return pc_; } | 309 const byte* pc() { return pc_; } |
| 308 uint32_t pc_offset() { return static_cast<uint32_t>(pc_ - start_); } | 310 uint32_t pc_offset() { return static_cast<uint32_t>(pc_ - start_); } |
| 309 | 311 |
| 310 protected: | 312 protected: |
| 311 const byte* start_; | 313 const byte* start_; |
| 312 const byte* pc_; | 314 const byte* pc_; |
| 313 const byte* limit_; | 315 const byte* limit_; |
| 314 const byte* end_; | 316 const byte* end_; |
| 315 const byte* error_pc_; | 317 const byte* error_pc_; |
| 316 const byte* error_pt_; | 318 const byte* error_pt_; |
| 317 base::SmartArrayPointer<char> error_msg_; | 319 std::unique_ptr<char[]> error_msg_; |
| 318 | 320 |
| 319 private: | 321 private: |
| 320 template <typename IntType, bool is_signed> | 322 template <typename IntType, bool is_signed> |
| 321 IntType checked_read_leb(const byte* base, unsigned offset, unsigned* length, | 323 IntType checked_read_leb(const byte* base, unsigned offset, unsigned* length, |
| 322 const char* msg) { | 324 const char* msg) { |
| 323 if (!check(base, offset, 1, msg)) { | 325 if (!check(base, offset, 1, msg)) { |
| 324 *length = 0; | 326 *length = 0; |
| 325 return 0; | 327 return 0; |
| 326 } | 328 } |
| 327 | 329 |
| (...skipping 42 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 370 return result; | 372 return result; |
| 371 } | 373 } |
| 372 }; | 374 }; |
| 373 | 375 |
| 374 #undef TRACE | 376 #undef TRACE |
| 375 } // namespace wasm | 377 } // namespace wasm |
| 376 } // namespace internal | 378 } // namespace internal |
| 377 } // namespace v8 | 379 } // namespace v8 |
| 378 | 380 |
| 379 #endif // V8_WASM_DECODER_H_ | 381 #endif // V8_WASM_DECODER_H_ |
| OLD | NEW |