aboutsummaryrefslogtreecommitdiff
path: root/backend/lib/MIR/MILexer.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'backend/lib/MIR/MILexer.cpp')
-rw-r--r--backend/lib/MIR/MILexer.cpp42
1 files changed, 30 insertions, 12 deletions
diff --git a/backend/lib/MIR/MILexer.cpp b/backend/lib/MIR/MILexer.cpp
index 816264e..f568cef 100644
--- a/backend/lib/MIR/MILexer.cpp
+++ b/backend/lib/MIR/MILexer.cpp
@@ -569,14 +569,25 @@ private:
++Offset;
const std::string_view Number = slice(NumberBegin, Offset);
- std::size_t NameBegin = Offset;
- if (peek() == '.') {
- ++Offset;
- NameBegin = Offset;
- while (!atEnd() && isIdentifierCharacter(peek()))
- ++Offset;
+ if (peek() != '.') {
+ return stringToken(IsReference ? MITokenKind::MachineBasicBlock
+ : MITokenKind::MachineBasicBlockLabel,
+ Begin, Offset, {}, Number);
}
+ ++Offset;
+ const std::size_t NameBegin = Offset;
+ if (peek() == '"') {
+ auto Quoted = scanQuotedString(Offset);
+ if (!Quoted)
+ return token(MITokenKind::Error, Begin, Offset);
+ Offset = Quoted->End;
+ return ownedStringToken(IsReference ? MITokenKind::MachineBasicBlock
+ : MITokenKind::MachineBasicBlockLabel,
+ Begin, Offset, std::move(Quoted->Value), Number);
+ }
+ while (!atEnd() && isIdentifierCharacter(peek()))
+ ++Offset;
return stringToken(IsReference ? MITokenKind::MachineBasicBlock
: MITokenKind::MachineBasicBlockLabel,
Begin, Offset, slice(NameBegin, Offset), Number);
@@ -597,13 +608,20 @@ private:
if (!HasOptionalName)
return token(Kind, Begin, Offset, Number);
- std::size_t NameBegin = Offset;
- if (peek() == '.') {
- ++Offset;
- NameBegin = Offset;
- while (!atEnd() && isIdentifierCharacter(peek()))
- ++Offset;
+ if (peek() != '.')
+ return stringToken(Kind, Begin, Offset, {}, Number);
+
+ ++Offset;
+ const std::size_t NameBegin = Offset;
+ if (peek() == '"') {
+ auto Quoted = scanQuotedString(Offset);
+ if (!Quoted)
+ return token(MITokenKind::Error, Begin, Offset);
+ Offset = Quoted->End;
+ return ownedStringToken(Kind, Begin, Offset, std::move(Quoted->Value), Number);
}
+ while (!atEnd() && isIdentifierCharacter(peek()))
+ ++Offset;
return stringToken(Kind, Begin, Offset, slice(NameBegin, Offset), Number);
}