Modified SourceLocation::hasText() to allow empty source.

This commit is contained in:
alex 2020-02-04 04:18:34 +01:00 committed by alex
parent 351c39efb5
commit 211227f50b
4 changed files with 9 additions and 9 deletions

View File

@ -76,7 +76,8 @@ struct SourceLocation
source && source &&
0 <= start && 0 <= start &&
start <= end && start <= end &&
end <= int(source->source().length()); // in some cases (json import) source->source() can be empty
(source->source().empty() || end <= int(source->source().length()));
} }
std::string text() const std::string text() const
@ -124,7 +125,7 @@ inline std::ostream& operator<<(std::ostream& _out, SourceLocation const& _locat
if (_location.source) if (_location.source)
_out << _location.source->name(); _out << _location.source->name();
_out << "[" << _location.start << "," << _location.end << "]"; _out << "[" << _location.start << "," << _location.end << ")";
return _out; return _out;
} }

View File

@ -54,9 +54,8 @@ T AsmJsonImporter::createAsmNode(Json::Value const& _node)
{ {
T r; T r;
r.location = createSourceLocation(_node); r.location = createSourceLocation(_node);
astAssert(!r.location.isValid() || r.location.hasText(), "Invalid source location in Asm AST"); astAssert(r.location.hasText(), "Invalid source location in Asm AST");
return r; return r;
} }
Json::Value AsmJsonImporter::member(Json::Value const& _node, string const& _name) Json::Value AsmJsonImporter::member(Json::Value const& _node, string const& _name)

View File

@ -51,11 +51,11 @@ BOOST_AUTO_TEST_SUITE(Assembler)
BOOST_AUTO_TEST_CASE(all_assembly_items) BOOST_AUTO_TEST_CASE(all_assembly_items)
{ {
Assembly _assembly; Assembly _assembly;
auto root_asm = make_shared<CharStream>("lorem ipsum", "root.asm"); auto root_asm = make_shared<CharStream>("", "root.asm");
_assembly.setSourceLocation({1, 3, root_asm}); _assembly.setSourceLocation({1, 3, root_asm});
Assembly _subAsm; Assembly _subAsm;
auto sub_asm = make_shared<CharStream>("lorem ipsum", "sub.asm"); auto sub_asm = make_shared<CharStream>("", "sub.asm");
_subAsm.setSourceLocation({6, 8, sub_asm}); _subAsm.setSourceLocation({6, 8, sub_asm});
_subAsm.append(Instruction::INVALID); _subAsm.append(Instruction::INVALID);
shared_ptr<Assembly> _subAsmPtr = make_shared<Assembly>(_subAsm); shared_ptr<Assembly> _subAsmPtr = make_shared<Assembly>(_subAsm);

View File

@ -33,9 +33,9 @@ BOOST_AUTO_TEST_SUITE(SourceLocationTest)
BOOST_AUTO_TEST_CASE(test_fail) BOOST_AUTO_TEST_CASE(test_fail)
{ {
auto const source = std::make_shared<CharStream>("lorem ipsum", "source"); auto const source = std::make_shared<CharStream>("", "source");
auto const sourceA = std::make_shared<CharStream>("lorem ipsum", "sourceA"); auto const sourceA = std::make_shared<CharStream>("", "sourceA");
auto const sourceB = std::make_shared<CharStream>("lorem ipsum", "sourceB"); auto const sourceB = std::make_shared<CharStream>("", "sourceB");
BOOST_CHECK(SourceLocation{} == SourceLocation{}); BOOST_CHECK(SourceLocation{} == SourceLocation{});
BOOST_CHECK((SourceLocation{0, 3, sourceA} != SourceLocation{0, 3, sourceB})); BOOST_CHECK((SourceLocation{0, 3, sourceA} != SourceLocation{0, 3, sourceB}));