Share ref_address everywhere it's used
This commit is contained in:
parent
e7e6ac5bb3
commit
a476531524
|
@ -89,6 +89,12 @@ public:
|
|||
size_t json_index;
|
||||
};
|
||||
|
||||
#ifdef SIMDJSON_USE_COMPUTED_GOTO
|
||||
typedef void* ret_address;
|
||||
#else
|
||||
typedef char ret_address;
|
||||
#endif
|
||||
|
||||
} // namespace internal
|
||||
|
||||
namespace dom {
|
||||
|
@ -977,13 +983,8 @@ public:
|
|||
/** @private Tape location of each open { or [ */
|
||||
std::unique_ptr<scope_descriptor[]> containing_scope{};
|
||||
|
||||
#ifdef SIMDJSON_USE_COMPUTED_GOTO
|
||||
/** @private Return address of each open { or [ */
|
||||
std::unique_ptr<void*[]> ret_address{};
|
||||
#else
|
||||
/** @private Return address of each open { or [ */
|
||||
std::unique_ptr<char[]> ret_address{};
|
||||
#endif
|
||||
std::unique_ptr<internal::ret_address[]> ret_address{};
|
||||
|
||||
/** @private Use `if (parser.parse(...).error())` instead */
|
||||
bool valid{false};
|
||||
|
|
|
@ -509,11 +509,7 @@ inline error_code parser::allocate(size_t capacity, size_t max_depth) noexcept {
|
|||
// Initialize stage 2 state
|
||||
//
|
||||
containing_scope.reset(new (std::nothrow) scope_descriptor[max_depth]); // TODO realloc
|
||||
#ifdef SIMDJSON_USE_COMPUTED_GOTO
|
||||
ret_address.reset(new (std::nothrow) void *[max_depth]);
|
||||
#else
|
||||
ret_address.reset(new (std::nothrow) char[max_depth]);
|
||||
#endif
|
||||
ret_address.reset(new (std::nothrow) internal::ret_address[max_depth]);
|
||||
|
||||
if (!ret_address || !containing_scope) {
|
||||
// Could not allocate memory
|
||||
|
|
|
@ -5,13 +5,13 @@
|
|||
|
||||
namespace stage2 {
|
||||
|
||||
using internal::ret_address;
|
||||
|
||||
#ifdef SIMDJSON_USE_COMPUTED_GOTO
|
||||
typedef void* ret_address;
|
||||
#define INIT_ADDRESSES() { &&array_begin, &&array_continue, &&error, &&finish, &&object_begin, &&object_continue }
|
||||
#define GOTO(address) { goto *(address); }
|
||||
#define CONTINUE(address) { goto *(address); }
|
||||
#else
|
||||
typedef char ret_address;
|
||||
#else // SIMDJSON_USE_COMPUTED_GOTO
|
||||
#define INIT_ADDRESSES() { '[', 'a', 'e', 'f', '{', 'o' };
|
||||
#define GOTO(address) \
|
||||
{ \
|
||||
|
@ -33,7 +33,7 @@ typedef char ret_address;
|
|||
case 'f': goto finish; \
|
||||
} \
|
||||
}
|
||||
#endif
|
||||
#endif // SIMDJSON_USE_COMPUTED_GOTO
|
||||
|
||||
struct unified_machine_addresses {
|
||||
ret_address array_begin;
|
||||
|
|
Loading…
Reference in New Issue