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 &&
0 <= start &&
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
@ -124,7 +125,7 @@ inline std::ostream& operator<<(std::ostream& _out, SourceLocation const& _locat
if (_location.source)
_out << _location.source->name();
_out << "[" << _location.start << "," << _location.end << "]";
_out << "[" << _location.start << "," << _location.end << ")";
return _out;
}

View File

@ -54,9 +54,8 @@ T AsmJsonImporter::createAsmNode(Json::Value const& _node)
{
T r;
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;
}
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)
{
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 _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.append(Instruction::INVALID);
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)
{
auto const source = std::make_shared<CharStream>("lorem ipsum", "source");
auto const sourceA = std::make_shared<CharStream>("lorem ipsum", "sourceA");
auto const sourceB = std::make_shared<CharStream>("lorem ipsum", "sourceB");
auto const source = std::make_shared<CharStream>("", "source");
auto const sourceA = std::make_shared<CharStream>("", "sourceA");
auto const sourceB = std::make_shared<CharStream>("", "sourceB");
BOOST_CHECK(SourceLocation{} == SourceLocation{});
BOOST_CHECK((SourceLocation{0, 3, sourceA} != SourceLocation{0, 3, sourceB}));