Skip to content

Commit 3abde02

Browse files
committed
Fix issue with early destruction
1 parent 6963b42 commit 3abde02

File tree

5 files changed

+17
-17
lines changed

5 files changed

+17
-17
lines changed

benchmark/partial_tweets/iter.h

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -47,13 +47,13 @@ simdjson_really_inline bool Iter::Run(const padded_string &json) {
4747
tweet tweet;
4848

4949
if (!iter.start_object() || !iter.find_field_raw("created_at")) { return false; }
50-
tweet.created_at = iter.consume_raw_json_string().value().unescape(iter);
50+
tweet.created_at = iter.consume_string();
5151

5252
if (!iter.has_next_field() || !iter.find_field_raw("id")) { return false; }
5353
tweet.id = iter.consume_uint64();
5454

5555
if (!iter.has_next_field() || !iter.find_field_raw("text")) { return false; }
56-
tweet.text = iter.consume_raw_json_string().value().unescape(iter);
56+
tweet.text = iter.consume_string();
5757

5858
if (!iter.has_next_field() || !iter.find_field_raw("in_reply_to_status_id")) { return false; }
5959
if (!iter.is_null()) {
@@ -66,7 +66,7 @@ simdjson_really_inline bool Iter::Run(const padded_string &json) {
6666
tweet.user.id = iter.consume_uint64();
6767

6868
if (!iter.has_next_field() || !iter.find_field_raw("screen_name")) { return false; }
69-
tweet.user.screen_name = iter.consume_raw_json_string().value().unescape(iter);
69+
tweet.user.screen_name = iter.consume_string();
7070

7171
if (iter.skip_container()) { return false; } // Skip the rest of the user object
7272
}

include/simdjson/generic/ondemand/document-inl.h

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -15,7 +15,7 @@ simdjson_really_inline document::~document() noexcept {
1515
}
1616

1717
simdjson_really_inline void document::assert_at_start() const noexcept {
18-
SIMDJSON_ASSUME(json != nullptr);
18+
SIMDJSON_ASSUME(json != nullptr && iter.is_alive());
1919
}
2020
simdjson_really_inline document document::start(json_iterator &&iter) noexcept {
2121
auto json = iter.advance();

include/simdjson/generic/ondemand/json_iterator-inl.h

Lines changed: 6 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -2,12 +2,13 @@ namespace simdjson {
22
namespace SIMDJSON_IMPLEMENTATION {
33
namespace ondemand {
44

5-
#ifdef SIMDJSON_ONDEMAND_SAFETY_RAILS
65
simdjson_really_inline json_iterator::json_iterator(json_iterator &&other) noexcept
76
: token_iterator(std::forward<token_iterator>(other)),
87
parser{other.parser},
9-
current_string_buf_loc{other.current_string_buf_loc},
10-
active_lease_depth{other.active_lease_depth}
8+
current_string_buf_loc{other.current_string_buf_loc}
9+
#ifdef SIMDJSON_ONDEMAND_SAFETY_RAILS
10+
, active_lease_depth{other.active_lease_depth}
11+
#endif
1112
{
1213
other.parser = nullptr;
1314
}
@@ -16,11 +17,12 @@ simdjson_really_inline json_iterator &json_iterator::operator=(json_iterator &&o
1617
index = other.index;
1718
parser = other.parser;
1819
current_string_buf_loc = other.current_string_buf_loc;
20+
#ifdef SIMDJSON_ONDEMAND_SAFETY_RAILS
1921
active_lease_depth = other.active_lease_depth;
22+
#endif
2023
other.parser = nullptr;
2124
return *this;
2225
}
23-
#endif
2426

2527
simdjson_really_inline json_iterator::json_iterator(ondemand::parser *_parser) noexcept
2628
: token_iterator(_parser->dom_parser.buf, _parser->dom_parser.structural_indexes.get()),

include/simdjson/generic/ondemand/json_iterator.h

Lines changed: 1 addition & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -18,13 +18,11 @@ class json_iterator_ref;
1818
class json_iterator : public token_iterator {
1919
public:
2020
simdjson_really_inline json_iterator() noexcept = default;
21-
#ifdef SIMDJSON_ONDEMAND_SAFETY_RAILS
2221
simdjson_really_inline json_iterator(json_iterator &&other) noexcept;
2322
simdjson_really_inline json_iterator &operator=(json_iterator &&other) noexcept;
23+
#ifdef SIMDJSON_ONDEMAND_SAFETY_RAILS
2424
simdjson_really_inline ~json_iterator() noexcept;
2525
#else
26-
simdjson_really_inline json_iterator(json_iterator &&other) noexcept = default;
27-
simdjson_really_inline json_iterator &operator=(json_iterator &&other) noexcept = default;
2826
simdjson_really_inline ~json_iterator() noexcept = default;
2927
#endif
3028
simdjson_really_inline json_iterator(const json_iterator &other) noexcept = delete;

include/simdjson/generic/ondemand/value-inl.h

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -40,15 +40,15 @@ simdjson_really_inline simdjson_result<T> value::consume_if_success(simdjson_res
4040
}
4141

4242
simdjson_really_inline simdjson_result<array> value::get_array() noexcept {
43-
bool is_empty;
44-
SIMDJSON_TRY( iter->start_array(json).get(is_empty) );
45-
if (is_empty) { iter.release(); }
43+
bool has_value;
44+
SIMDJSON_TRY( iter->start_array(json).get(has_value) );
45+
if (!has_value) { iter.release(); }
4646
return array(std::move(iter));
4747
}
4848
simdjson_really_inline simdjson_result<object> value::get_object() noexcept {
49-
bool is_empty;
50-
SIMDJSON_TRY( iter->start_object(json).get(is_empty) );
51-
if (is_empty) { iter.release(); }
49+
bool has_value;
50+
SIMDJSON_TRY( iter->start_object(json).get(has_value) );
51+
if (!has_value) { iter.release(); }
5252
return object(std::move(iter));
5353
}
5454
simdjson_really_inline simdjson_result<raw_json_string> value::get_raw_json_string() noexcept {

0 commit comments

Comments
 (0)