Fixed issue with TypeMod.

This commit is contained in:
2020-10-10 16:20:56 +02:00
parent f5baed48a9
commit ad8a0ce1b4
3 changed files with 80 additions and 9 deletions

View File

@@ -345,7 +345,7 @@ namespace MalachScript::Parser {
if (!ParseType((const ParsedStatement*&)parameter.GetTypeStatement(), currentToken)) {
LogError(Diagnostics::DiagnosticType::UnexpectedToken, currentToken->GetSpan());
}
ParseTypeMod(parameter.GetTypeMod());
ParseTypeMod(parameter.GetTypeMod(), currentToken);
ParseIdentifier(parameter.GetIdentifier(), currentToken);
PROGRESS_TOKEN(currentToken);
if (currentToken->GetKind() != LexTokenKind::CommaSymbol) {
@@ -402,23 +402,23 @@ namespace MalachScript::Parser {
default: return false;
}
}
bool Parser::ParseTypeMod(TypeMod& typeMod) {
if (_currentToken->GetKind() != LexTokenKind::AmpersandSymbol) {
bool Parser::ParseTypeMod(TypeMod& typeMod, const LexToken*& currentToken) {
if (currentToken->GetKind() != LexTokenKind::AmpersandSymbol) {
return false;
}
PROGRESS_TOKEN(_currentToken);
switch (_currentToken->GetKind()) {
PROGRESS_TOKEN(currentToken);
switch (currentToken->GetKind()) {
case LexTokenKind::InKeyword:
typeMod = TypeMod::RefIn;
PROGRESS_TOKEN(_currentToken);
PROGRESS_TOKEN(currentToken);
return true;
case LexTokenKind::OutKeyword:
typeMod = TypeMod::RefOut;
PROGRESS_TOKEN(_currentToken);
PROGRESS_TOKEN(currentToken);
return true;
case LexTokenKind::InoutKeyword:
typeMod = TypeMod::RefInOut;
PROGRESS_TOKEN(_currentToken);
PROGRESS_TOKEN(currentToken);
return true;
default: typeMod = TypeMod::RefInOut; return true;
}

View File

@@ -29,7 +29,7 @@ namespace MalachScript::Parser {
bool ParseType(const ParsedStatement*& out, const LexToken*& currentToken);
bool ParseScope(std::vector<Identifier>& out, const LexToken*& currentToken);
bool ParseParamList(const ParsedStatement*& out, const LexToken*& currentToken);
bool ParseTypeMod(TypeMod& typeMod);
bool ParseTypeMod(TypeMod& typeMod, const LexToken*& currentToken);
bool ParseDataType(Identifier& out, const LexToken*& currentToken);
bool ParseVirtProp(const ParsedStatement*& out);