[Parser] Modify parser so that it could parse contract description blocks of functions
This commit is contained in:
@@ -1047,6 +1047,43 @@ public class KotlinExpressionParsing extends AbstractKotlinParsing {
|
||||
}
|
||||
}
|
||||
|
||||
public void parseContractDescriptionBlock() {
|
||||
assert _at(CONTRACT_KEYWORD);
|
||||
|
||||
advance(); // CONTRACT_KEYWORD
|
||||
|
||||
parseContractEffectList();
|
||||
}
|
||||
|
||||
private void parseContractEffectList() {
|
||||
PsiBuilder.Marker block = mark();
|
||||
|
||||
expect(LBRACKET, "Expecting '['");
|
||||
myBuilder.enableNewlines();
|
||||
|
||||
parseContractEffects();
|
||||
|
||||
expect(RBRACKET, "Expecting ']'");
|
||||
myBuilder.restoreNewlinesState();
|
||||
|
||||
block.done(CONTRACT_EFFECT_LIST);
|
||||
}
|
||||
|
||||
private void parseContractEffects() {
|
||||
while (true) {
|
||||
if (at(COMMA)) errorAndAdvance("Expecting a contract effect");
|
||||
if (at(RBRACKET)) {
|
||||
break;
|
||||
}
|
||||
PsiBuilder.Marker effect = mark();
|
||||
parseExpression();
|
||||
effect.done(CONTRACT_EFFECT);
|
||||
|
||||
if (!at(COMMA)) break;
|
||||
advance(); // COMMA
|
||||
}
|
||||
}
|
||||
|
||||
/*
|
||||
* SimpleName
|
||||
*/
|
||||
|
||||
@@ -1673,6 +1673,8 @@ public class KotlinParsing extends AbstractKotlinParsing {
|
||||
|
||||
parseTypeConstraintsGuarded(typeParameterListOccurred);
|
||||
|
||||
parseFunctionContract();
|
||||
|
||||
if (at(SEMICOLON)) {
|
||||
advance(); // SEMICOLON
|
||||
}
|
||||
@@ -1993,6 +1995,12 @@ public class KotlinParsing extends AbstractKotlinParsing {
|
||||
constraint.done(TYPE_CONSTRAINT);
|
||||
}
|
||||
|
||||
private void parseFunctionContract() {
|
||||
if (at(CONTRACT_KEYWORD)) {
|
||||
myExpressionParsing.parseContractDescriptionBlock();
|
||||
}
|
||||
}
|
||||
|
||||
/*
|
||||
* typeParameter
|
||||
* : modifiers SimpleName (":" userType)?
|
||||
|
||||
Reference in New Issue
Block a user