Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

[mlir] Change end of OperationDefinition. #77273

Merged
merged 1 commit into from Jan 10, 2024
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Jump to
Jump to file
Failed to load files.
Diff view
Diff view
12 changes: 7 additions & 5 deletions mlir/lib/AsmParser/Parser.cpp
Expand Up @@ -1209,7 +1209,7 @@ ParseResult OperationParser::parseOperation() {
resultIt += std::get<1>(record);
}
state.asmState->finalizeOperationDefinition(
op, nameTok.getLocRange(), /*endLoc=*/getToken().getLoc(),
op, nameTok.getLocRange(), /*endLoc=*/getLastToken().getEndLoc(),
asmResultGroups);
}

Expand All @@ -1225,8 +1225,9 @@ ParseResult OperationParser::parseOperation() {

// Add this operation to the assembly state if it was provided to populate.
} else if (state.asmState) {
state.asmState->finalizeOperationDefinition(op, nameTok.getLocRange(),
/*endLoc=*/getToken().getLoc());
state.asmState->finalizeOperationDefinition(
op, nameTok.getLocRange(),
/*endLoc=*/getLastToken().getEndLoc());
}

return success();
Expand Down Expand Up @@ -1500,8 +1501,9 @@ Operation *OperationParser::parseGenericOperation(Block *insertBlock,
// If we are populating the parser asm state, finalize this operation
// definition.
if (state.asmState)
state.asmState->finalizeOperationDefinition(op, nameToken.getLocRange(),
/*endLoc=*/getToken().getLoc());
state.asmState->finalizeOperationDefinition(
op, nameToken.getLocRange(),
/*endLoc=*/getLastToken().getEndLoc());
return op;
}

Expand Down
5 changes: 5 additions & 0 deletions mlir/lib/AsmParser/Parser.h
Expand Up @@ -102,6 +102,9 @@ class Parser {
const Token &getToken() const { return state.curToken; }
StringRef getTokenSpelling() const { return state.curToken.getSpelling(); }

/// Return the last parsed token.
const Token &getLastToken() const { return state.lastToken; }

/// If the current token has the specified kind, consume it and return true.
/// If not, return false.
bool consumeIf(Token::Kind kind) {
Expand All @@ -115,6 +118,7 @@ class Parser {
void consumeToken() {
assert(state.curToken.isNot(Token::eof, Token::error) &&
"shouldn't advance past EOF or errors");
state.lastToken = state.curToken;
state.curToken = state.lex.lexToken();
}

Expand All @@ -129,6 +133,7 @@ class Parser {
/// Reset the parser to the given lexer position.
void resetToken(const char *tokPos) {
state.lex.resetPointer(tokPos);
state.lastToken = state.curToken;
state.curToken = state.lex.lexToken();
}

Expand Down
7 changes: 5 additions & 2 deletions mlir/lib/AsmParser/ParserState.h
Expand Up @@ -54,8 +54,8 @@ struct ParserState {
AsmParserCodeCompleteContext *codeCompleteContext)
: config(config),
lex(sourceMgr, config.getContext(), codeCompleteContext),
curToken(lex.lexToken()), symbols(symbols), asmState(asmState),
codeCompleteContext(codeCompleteContext) {}
curToken(lex.lexToken()), lastToken(Token::error, ""), symbols(symbols),
asmState(asmState), codeCompleteContext(codeCompleteContext) {}
ParserState(const ParserState &) = delete;
void operator=(const ParserState &) = delete;

Expand All @@ -68,6 +68,9 @@ struct ParserState {
/// This is the next token that hasn't been consumed yet.
Token curToken;

/// This is the last token that has been consumed.
Token lastToken;

/// The current state for symbol parsing.
SymbolState &symbols;

Expand Down