Skip to content

Commit 04dfd13

Browse files
committed
Remove nullptr usage from parse processor
1 parent 03a11c6 commit 04dfd13

File tree

6 files changed

+92
-67
lines changed

6 files changed

+92
-67
lines changed

include/cpp/jank/read/lex.hpp

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -67,7 +67,7 @@ namespace jank::read::lex
6767
static constexpr size_t ignore_pos{ std::numeric_limits<size_t>::max() };
6868
size_t pos{ ignore_pos };
6969
size_t size{ 1 };
70-
token_kind kind;
70+
token_kind kind{ token_kind::eof };
7171
boost::variant<no_data, native_integer, native_real, native_persistent_string_view, native_bool>
7272
data;
7373
};

include/cpp/jank/read/parse.hpp

Lines changed: 9 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -14,8 +14,15 @@ namespace jank::read::parse
1414
{
1515
struct processor
1616
{
17-
/* TODO: none instead of nullptr. */
18-
using object_result = result<runtime::object_ptr, error>;
17+
struct object_source_info
18+
{
19+
native_bool operator==(object_source_info const &rhs) const;
20+
native_bool operator!=(object_source_info const &rhs) const;
21+
22+
runtime::object_ptr ptr{};
23+
};
24+
25+
using object_result = result<option<object_source_info>, error>;
1926

2027
struct iterator
2128
{

src/cpp/jank/analyze/processor.cpp

Lines changed: 6 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -65,7 +65,7 @@ namespace jank::analyze
6565
{
6666
return err(parse_current->expect_err_move());
6767
}
68-
fn.push_back(parse_current->expect_ok());
68+
fn.push_back(parse_current->expect_ok().unwrap().ptr);
6969
}
7070
auto fn_list(make_box<runtime::obj::persistent_list>(fn.rbegin(), fn.rend()));
7171
return analyze(fn_list, expression_type::expression);
@@ -986,8 +986,11 @@ namespace jank::analyze
986986
{
987987
return parsed_it->expect_err_move();
988988
}
989-
auto result(
990-
analyze(parsed_it->expect_ok(), current_frame, expression_type::expression, fn_ctx, true));
989+
auto result(analyze(parsed_it->expect_ok().unwrap().ptr,
990+
current_frame,
991+
expression_type::expression,
992+
fn_ctx,
993+
true));
991994
if(result.is_err())
992995
{
993996
return result.expect_err_move();

src/cpp/jank/read/parse.cpp

Lines changed: 35 additions & 23 deletions
Original file line numberDiff line numberDiff line change
@@ -66,6 +66,18 @@ namespace jank::read::parse
6666
}
6767
}
6868

69+
native_bool
70+
processor::object_source_info::operator==(processor::object_source_info const &rhs) const
71+
{
72+
return !(*this != rhs);
73+
}
74+
75+
native_bool
76+
processor::object_source_info::operator!=(processor::object_source_info const &rhs) const
77+
{
78+
return ptr != rhs.ptr;
79+
}
80+
6981
processor::iterator::value_type processor::iterator::operator*() const
7082
{
7183
return latest.unwrap();
@@ -109,10 +121,9 @@ namespace jank::read::parse
109121

110122
processor::object_result processor::next()
111123
{
112-
/* TODO: Replace nullptr with none. */
113124
if(token_current == token_end)
114125
{
115-
return ok(nullptr);
126+
return ok(none);
116127
}
117128

118129
while(true)
@@ -146,7 +157,7 @@ namespace jank::read::parse
146157
}
147158
++token_current;
148159
expected_closer = none;
149-
return ok(nullptr);
160+
return ok(none);
150161
case lex::token_kind::single_quote:
151162
return parse_quote();
152163
case lex::token_kind::nil:
@@ -166,7 +177,7 @@ namespace jank::read::parse
166177
case lex::token_kind::escaped_string:
167178
return parse_escaped_string();
168179
case lex::token_kind::eof:
169-
return ok(nullptr);
180+
return ok(none);
170181
default:
171182
{
172183
native_persistent_string msg{ fmt::format("unexpected token kind: {}",
@@ -191,15 +202,15 @@ namespace jank::read::parse
191202
{
192203
return err(it.latest.unwrap().expect_err());
193204
}
194-
ret.push_back(it.latest.unwrap().expect_ok());
205+
ret.push_back(it.latest.unwrap().expect_ok().unwrap().ptr);
195206
}
196207
if(expected_closer.is_some())
197208
{
198209
return err(error{ start_token.pos, "Unterminated list" });
199210
}
200211

201212
expected_closer = prev_expected_closer;
202-
return make_box<runtime::obj::persistent_list>(ret.rbegin(), ret.rend());
213+
return object_source_info{ make_box<runtime::obj::persistent_list>(ret.rbegin(), ret.rend()) };
203214
}
204215

205216
processor::object_result processor::parse_vector()
@@ -216,15 +227,15 @@ namespace jank::read::parse
216227
{
217228
return err(it.latest.unwrap().expect_err());
218229
}
219-
ret.push_back(it.latest.unwrap().expect_ok());
230+
ret.push_back(it.latest.unwrap().expect_ok().unwrap().ptr);
220231
}
221232
if(expected_closer.is_some())
222233
{
223234
return err(error{ start_token.pos, "Unterminated vector" });
224235
}
225236

226237
expected_closer = prev_expected_closer;
227-
return make_box<runtime::obj::persistent_vector>(ret.persistent());
238+
return object_source_info{ make_box<runtime::obj::persistent_vector>(ret.persistent()) };
228239
}
229240

230241
/* TODO: Uniqueness check. */
@@ -255,15 +266,15 @@ namespace jank::read::parse
255266
}
256267
auto const value(it.latest.unwrap().expect_ok());
257268

258-
ret.insert_or_assign(key, value);
269+
ret.insert_or_assign(key.unwrap().ptr, value.unwrap().ptr);
259270
}
260271
if(expected_closer.is_some())
261272
{
262273
return err(error{ start_token.pos, "Unterminated map" });
263274
}
264275

265276
expected_closer = prev_expected_closer;
266-
return make_box<runtime::obj::persistent_array_map>(ret);
277+
return object_source_info{ make_box<runtime::obj::persistent_array_map>(ret) };
267278
}
268279

269280
processor::object_result processor::parse_quote()
@@ -278,28 +289,28 @@ namespace jank::read::parse
278289
{
279290
return val_result;
280291
}
281-
else if(val_result.expect_ok() == nullptr)
292+
else if(val_result.expect_ok().is_none())
282293
{
283294
return err(error{ start_token.pos, native_persistent_string{ "invalid value after quote" } });
284295
}
285296

286-
return runtime::erase(
297+
return object_source_info{ runtime::erase(
287298
make_box<runtime::obj::persistent_list>(make_box<runtime::obj::symbol>("quote"),
288-
val_result.expect_ok_move()));
299+
val_result.expect_ok().unwrap().ptr)) };
289300
}
290301

291302
processor::object_result processor::parse_nil()
292303
{
293304
++token_current;
294-
return ok(runtime::obj::nil::nil_const());
305+
return object_source_info{ runtime::obj::nil::nil_const() };
295306
}
296307

297308
processor::object_result processor::parse_boolean()
298309
{
299310
auto const token((*token_current).expect_ok());
300311
++token_current;
301312
auto const b(boost::get<native_bool>(token.data));
302-
return ok(make_box<runtime::obj::boolean>(b));
313+
return object_source_info{ make_box<runtime::obj::boolean>(b) };
303314
}
304315

305316
processor::object_result processor::parse_symbol()
@@ -341,7 +352,7 @@ namespace jank::read::parse
341352
{
342353
name = sv;
343354
}
344-
return ok(make_box<runtime::obj::symbol>(ns, name));
355+
return object_source_info{ make_box<runtime::obj::symbol>(ns, name) };
345356
}
346357

347358
processor::object_result processor::parse_keyword()
@@ -377,30 +388,31 @@ namespace jank::read::parse
377388
{
378389
return err(intern_res.expect_err());
379390
}
380-
return ok(intern_res.expect_ok());
391+
return object_source_info{ intern_res.expect_ok() };
381392
}
382393

383394
processor::object_result processor::parse_integer()
384395
{
385396
auto const token(token_current->expect_ok());
386397
++token_current;
387-
return ok(make_box<runtime::obj::integer>(boost::get<native_integer>(token.data)));
398+
return object_source_info{ make_box<runtime::obj::integer>(
399+
boost::get<native_integer>(token.data)) };
388400
}
389401

390402
processor::object_result processor::parse_real()
391403
{
392404
auto const token(token_current->expect_ok());
393405
++token_current;
394-
return ok(make_box<runtime::obj::real>(boost::get<native_real>(token.data)));
406+
return object_source_info{ make_box<runtime::obj::real>(boost::get<native_real>(token.data)) };
395407
}
396408

397409
processor::object_result processor::parse_string()
398410
{
399411
auto const token(token_current->expect_ok());
400412
++token_current;
401413
auto const sv(boost::get<native_persistent_string_view>(token.data));
402-
return ok(
403-
make_box<runtime::obj::persistent_string>(native_persistent_string{ sv.data(), sv.size() }));
414+
return object_source_info{ make_box<runtime::obj::persistent_string>(
415+
native_persistent_string{ sv.data(), sv.size() }) };
404416
}
405417

406418
processor::object_result processor::parse_escaped_string()
@@ -413,7 +425,7 @@ namespace jank::read::parse
413425
{
414426
return err(error{ token.pos, res.expect_err_move() });
415427
}
416-
return ok(make_box<runtime::obj::persistent_string>(res.expect_ok_move()));
428+
return object_source_info{ make_box<runtime::obj::persistent_string>(res.expect_ok_move()) };
417429
}
418430

419431
processor::iterator processor::begin()
@@ -423,6 +435,6 @@ namespace jank::read::parse
423435

424436
processor::iterator processor::end()
425437
{
426-
return { some(ok(nullptr)), *this };
438+
return { some(ok(none)), *this };
427439
}
428440
}

src/cpp/jank/runtime/context.cpp

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -197,7 +197,8 @@ namespace jank::runtime
197197
native_vector<analyze::expression_ptr> exprs{};
198198
for(auto const &form : p_prc)
199199
{
200-
auto const expr(an_prc.analyze(form.expect_ok(), analyze::expression_type::statement));
200+
auto const expr(
201+
an_prc.analyze(form.expect_ok().unwrap().ptr, analyze::expression_type::statement));
201202
ret = evaluate::eval(*this, jit_prc, expr.expect_ok());
202203
exprs.emplace_back(expr.expect_ok());
203204
}
@@ -230,7 +231,8 @@ namespace jank::runtime
230231
native_vector<analyze::expression_ptr> ret{};
231232
for(auto const &form : p_prc)
232233
{
233-
auto const expr(an_prc.analyze(form.expect_ok(), analyze::expression_type::statement));
234+
auto const expr(
235+
an_prc.analyze(form.expect_ok().unwrap().ptr, analyze::expression_type::statement));
234236
if(eval)
235237
{
236238
evaluate::eval(*this, jit_prc, expr.expect_ok());

0 commit comments

Comments
 (0)