Support break statements
All checks were successful
continuous-integration/drone/push Build is passing
All checks were successful
continuous-integration/drone/push Build is passing
This commit is contained in:
@@ -22,7 +22,8 @@ namespace Porygon::Parser {
|
||||
Return,
|
||||
Conditional,
|
||||
NumericalFor,
|
||||
GenericFor
|
||||
GenericFor,
|
||||
Break
|
||||
};
|
||||
|
||||
class ParsedStatement {
|
||||
@@ -59,6 +60,15 @@ namespace Porygon::Parser {
|
||||
}
|
||||
};
|
||||
|
||||
class ParsedBreakStatement : public ParsedStatement{
|
||||
public:
|
||||
ParsedBreakStatement(unsigned int start, unsigned int length) : ParsedStatement(start, length) {};
|
||||
|
||||
const ParsedStatementKind GetKind() const final {
|
||||
return ParsedStatementKind::Break;
|
||||
}
|
||||
};
|
||||
|
||||
class ParsedBlockStatement : public ParsedStatement {
|
||||
const std::vector<const ParsedStatement *> _statements;
|
||||
public:
|
||||
|
||||
@@ -45,7 +45,9 @@ namespace Porygon::Parser {
|
||||
case TokenKind::IfKeyword:
|
||||
return this->ParseIfStatement(current);
|
||||
case TokenKind ::ForKeyword:
|
||||
return this->ParseForStatement(current);
|
||||
return this->ParseForStatement();
|
||||
case TokenKind ::BreakKeyword:
|
||||
return new ParsedBreakStatement(current->GetStartPosition(), current -> GetLength());
|
||||
default:
|
||||
break;
|
||||
}
|
||||
@@ -225,7 +227,7 @@ namespace Porygon::Parser {
|
||||
return new ParsedConditionalStatement(condition, block, start, block->GetEndPosition() - start);
|
||||
}
|
||||
|
||||
ParsedStatement *Parser::ParseForStatement(const IToken *current) {
|
||||
ParsedStatement *Parser::ParseForStatement() {
|
||||
auto identifier = this -> Next();
|
||||
if (this -> Peek()->GetKind() == TokenKind::AssignmentToken){
|
||||
return ParseNumericForStatement(identifier);
|
||||
|
||||
@@ -45,7 +45,7 @@ namespace Porygon::Parser {
|
||||
|
||||
ParsedStatement *ParseIfStatement(const IToken *current);
|
||||
|
||||
ParsedStatement *ParseForStatement(const IToken *current);
|
||||
ParsedStatement *ParseForStatement();
|
||||
ParsedStatement *ParseNumericForStatement(const IToken *current);
|
||||
ParsedStatement *ParseGenericForStatement(const IToken *current);
|
||||
|
||||
|
||||
Reference in New Issue
Block a user