successfulParsing: {
ParseHelper parse = new ParseHelper(lookAheadElement());
Reference type;
ProtoDefSymbol defId;
if(lookAhead() == DeeTokens.KW_AUTO) {
type = parseAutoReference();
defId = parseDefId(); // Parse a SimpleVariableDef even if id is missing
} else {
NodeResult<Reference> typeResult = parseTypeReference();
type = typeResult.node;
if(typeResult.ruleBroken) {
if(revertIfInvalid) break successfulParsing;
defId = parseMissingDefIdNoError();
} else {
defId = parseDefId();
if(revertIfInvalid && defId.isMissing()) break successfulParsing;
}
}
Expression defaultValue = null;
parse.consumeRequired(DeeTokens.ASSIGN);