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_RESULT_H_ | 5 #ifndef V8_WASM_RESULT_H_ |
| 6 #define V8_WASM_RESULT_H_ | 6 #define V8_WASM_RESULT_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 | 12 |
| 11 #include "src/handles.h" | 13 #include "src/handles.h" |
| 12 #include "src/globals.h" | 14 #include "src/globals.h" |
| 13 | 15 |
| 14 namespace v8 { | 16 namespace v8 { |
| 15 namespace internal { | 17 namespace internal { |
| 16 | 18 |
| 17 class Isolate; | 19 class Isolate; |
| (...skipping 15 matching lines...) Expand all Loading... | |
| 33 kInvalidLocalIndex, // invalid local | 35 kInvalidLocalIndex, // invalid local |
| 34 kInvalidGlobalIndex, // invalid global | 36 kInvalidGlobalIndex, // invalid global |
| 35 kInvalidFunctionIndex, // invalid function | 37 kInvalidFunctionIndex, // invalid function |
| 36 kInvalidMemType // invalid memory type | 38 kInvalidMemType // invalid memory type |
| 37 }; | 39 }; |
| 38 | 40 |
| 39 // The overall result of decoding a function or a module. | 41 // The overall result of decoding a function or a module. |
| 40 template <typename T> | 42 template <typename T> |
| 41 struct Result { | 43 struct Result { |
| 42 Result() : val(), error_code(kSuccess), start(nullptr), error_pc(nullptr) { | 44 Result() : val(), error_code(kSuccess), start(nullptr), error_pc(nullptr) { |
| 43 error_msg.Reset(nullptr); | 45 error_msg.reset(nullptr); |
|
Igor Sheludko
2016/07/25 08:56:44
Not necessary. Default constructor already does th
jochen (gone - plz use gerrit)
2016/07/25 09:14:48
done
| |
| 46 } | |
| 47 Result(Result&& other) { | |
| 48 CopyFrom(other); | |
| 49 val = other.val; | |
|
Igor Sheludko
2016/07/25 08:56:44
How about using std::move(*this, other) here and i
jochen (gone - plz use gerrit)
2016/07/25 09:14:48
done.
I didn't inline CopyFrom (now MoveFrom), as
| |
| 50 } | |
| 51 Result& operator=(Result&& other) { | |
| 52 CopyFrom(other); | |
| 53 val = other.val; | |
| 54 return *this; | |
| 44 } | 55 } |
| 45 | 56 |
| 46 T val; | 57 T val; |
| 47 ErrorCode error_code; | 58 ErrorCode error_code; |
| 48 const byte* start; | 59 const byte* start; |
| 49 const byte* error_pc; | 60 const byte* error_pc; |
| 50 const byte* error_pt; | 61 const byte* error_pt; |
| 51 base::SmartArrayPointer<char> error_msg; | 62 std::unique_ptr<char[]> error_msg; |
| 52 | 63 |
| 53 bool ok() const { return error_code == kSuccess; } | 64 bool ok() const { return error_code == kSuccess; } |
| 54 bool failed() const { return error_code != kSuccess; } | 65 bool failed() const { return error_code != kSuccess; } |
| 55 | 66 |
| 56 template <typename V> | 67 template <typename V> |
| 57 void CopyFrom(Result<V>& that) { | 68 void CopyFrom(Result<V>& that) { |
|
Igor Sheludko
2016/07/25 08:56:44
Once we use unique_ptr it is no longer a CopyFrom
| |
| 58 error_code = that.error_code; | 69 error_code = that.error_code; |
| 59 start = that.start; | 70 start = that.start; |
| 60 error_pc = that.error_pc; | 71 error_pc = that.error_pc; |
| 61 error_pt = that.error_pt; | 72 error_pt = that.error_pt; |
| 62 error_msg = that.error_msg; | 73 error_msg.swap(that.error_msg); |
| 63 } | 74 } |
| 75 | |
| 76 private: | |
| 77 DISALLOW_COPY_AND_ASSIGN(Result); | |
| 64 }; | 78 }; |
| 65 | 79 |
| 66 template <typename T> | 80 template <typename T> |
| 67 std::ostream& operator<<(std::ostream& os, const Result<T>& result) { | 81 std::ostream& operator<<(std::ostream& os, const Result<T>& result) { |
| 68 os << "Result = "; | 82 os << "Result = "; |
| 69 if (result.ok()) { | 83 if (result.ok()) { |
| 70 if (result.val != nullptr) { | 84 if (result.val != nullptr) { |
| 71 os << *result.val; | 85 os << *result.val; |
| 72 } else { | 86 } else { |
| 73 os << "success (no value)"; | 87 os << "success (no value)"; |
| (...skipping 41 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 115 private: | 129 private: |
| 116 Isolate* isolate_; | 130 Isolate* isolate_; |
| 117 const char* context_; | 131 const char* context_; |
| 118 i::Handle<i::String> message_; | 132 i::Handle<i::String> message_; |
| 119 }; | 133 }; |
| 120 } // namespace wasm | 134 } // namespace wasm |
| 121 } // namespace internal | 135 } // namespace internal |
| 122 } // namespace v8 | 136 } // namespace v8 |
| 123 | 137 |
| 124 #endif | 138 #endif |
| OLD | NEW |