Skip to content

Commit f670ae3

Browse files
committed
parse resource handle as keyword or string
1 parent 857e8e7 commit f670ae3

File tree

3 files changed

+31
-11
lines changed

3 files changed

+31
-11
lines changed

mlir/lib/AsmParser/AsmParserImpl.h

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -514,7 +514,7 @@ class AsmParserImpl : public BaseT {
514514
return parser.emitError() << "dialect '" << dialect->getNamespace()
515515
<< "' does not expect resource handles";
516516
}
517-
StringRef resourceName;
517+
std::string resourceName;
518518
return parser.parseResourceHandle(interface, resourceName);
519519
}
520520

mlir/lib/AsmParser/Parser.cpp

Lines changed: 26 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -412,15 +412,32 @@ ParseResult Parser::parseOptionalKeyword(StringRef *keyword) {
412412
return success();
413413
}
414414

415+
ParseResult Parser::parseOptionalKeywordOrString(std::string *result) {
416+
StringRef keyword;
417+
if (succeeded(parseOptionalKeyword(&keyword))) {
418+
*result = keyword.str();
419+
return success();
420+
}
421+
422+
// Parse a quoted string token if present.
423+
if (!getToken().is(Token::string))
424+
return failure();
425+
426+
if (result)
427+
*result = getToken().getStringValue();
428+
consumeToken();
429+
return success();
430+
}
431+
415432
//===----------------------------------------------------------------------===//
416433
// Resource Parsing
417434

418435
FailureOr<AsmDialectResourceHandle>
419436
Parser::parseResourceHandle(const OpAsmDialectInterface *dialect,
420-
StringRef &name) {
437+
std::string &name) {
421438
assert(dialect && "expected valid dialect interface");
422439
SMLoc nameLoc = getToken().getLoc();
423-
if (failed(parseOptionalKeyword(&name)))
440+
if (failed(parseOptionalKeywordOrString(&name)))
424441
return emitError("expected identifier key for 'resource' entry");
425442
auto &resources = getState().symbols.dialectResources;
426443

@@ -451,7 +468,7 @@ Parser::parseResourceHandle(Dialect *dialect) {
451468
return emitError() << "dialect '" << dialect->getNamespace()
452469
<< "' does not expect resource handles";
453470
}
454-
StringRef resourceName;
471+
std::string resourceName;
455472
return parseResourceHandle(interface, resourceName);
456473
}
457474

@@ -2530,8 +2547,8 @@ class TopLevelOperationParser : public Parser {
25302547
/// textual format.
25312548
class ParsedResourceEntry : public AsmParsedResourceEntry {
25322549
public:
2533-
ParsedResourceEntry(StringRef key, SMLoc keyLoc, Token value, Parser &p)
2534-
: key(key), keyLoc(keyLoc), value(value), p(p) {}
2550+
ParsedResourceEntry(std::string key, SMLoc keyLoc, Token value, Parser &p)
2551+
: key(std::move(key)), keyLoc(keyLoc), value(value), p(p) {}
25352552
~ParsedResourceEntry() override = default;
25362553

25372554
StringRef getKey() const final { return key; }
@@ -2607,7 +2624,7 @@ class ParsedResourceEntry : public AsmParsedResourceEntry {
26072624
}
26082625

26092626
private:
2610-
StringRef key;
2627+
std::string key;
26112628
SMLoc keyLoc;
26122629
Token value;
26132630
Parser &p;
@@ -2736,7 +2753,7 @@ ParseResult TopLevelOperationParser::parseDialectResourceFileMetadata() {
27362753
return parseCommaSeparatedListUntil(Token::r_brace, [&]() -> ParseResult {
27372754
// Parse the name of the resource entry.
27382755
SMLoc keyLoc = getToken().getLoc();
2739-
StringRef key;
2756+
std::string key;
27402757
if (failed(parseResourceHandle(handler, key)) ||
27412758
parseToken(Token::colon, "expected ':'"))
27422759
return failure();
@@ -2763,8 +2780,8 @@ ParseResult TopLevelOperationParser::parseExternalResourceFileMetadata() {
27632780
return parseCommaSeparatedListUntil(Token::r_brace, [&]() -> ParseResult {
27642781
// Parse the name of the resource entry.
27652782
SMLoc keyLoc = getToken().getLoc();
2766-
StringRef key;
2767-
if (failed(parseOptionalKeyword(&key)))
2783+
std::string key;
2784+
if (failed(parseOptionalKeywordOrString(&key)))
27682785
return emitError(
27692786
"expected identifier key for 'external_resources' entry");
27702787
if (parseToken(Token::colon, "expected ':'"))

mlir/lib/AsmParser/Parser.h

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -171,13 +171,16 @@ class Parser {
171171
/// Parse a keyword, if present, into 'keyword'.
172172
ParseResult parseOptionalKeyword(StringRef *keyword);
173173

174+
/// Parse an optional keyword or string and set instance into 'result'.`
175+
ParseResult parseOptionalKeywordOrString(std::string *result);
176+
174177
//===--------------------------------------------------------------------===//
175178
// Resource Parsing
176179
//===--------------------------------------------------------------------===//
177180

178181
/// Parse a handle to a dialect resource within the assembly format.
179182
FailureOr<AsmDialectResourceHandle>
180-
parseResourceHandle(const OpAsmDialectInterface *dialect, StringRef &name);
183+
parseResourceHandle(const OpAsmDialectInterface *dialect, std::string &name);
181184
FailureOr<AsmDialectResourceHandle> parseResourceHandle(Dialect *dialect);
182185

183186
//===--------------------------------------------------------------------===//

0 commit comments

Comments
 (0)