Make a lot of one-liner functions inline
Some checks failed
continuous-integration/drone/push Build is failing

This commit is contained in:
2019-07-04 19:08:13 +02:00
parent bb0a6aba19
commit 32836c6c58
53 changed files with 428 additions and 424 deletions

View File

@@ -14,10 +14,10 @@ namespace Porygon::Parser {
}
vector<const IToken *> Lexer::Lex() {
vector<const IToken *> tokens;
vector<const Token *> Lexer::Lex() {
vector<const Token *> tokens;
while (true) {
IToken *next = this->LexNext(this->Next());
Token *next = this->LexNext(this->Next());
auto nextKind = next->GetKind();
if (nextKind != TokenKind::WhiteSpace)
tokens.push_back(next);
@@ -41,7 +41,7 @@ namespace Porygon::Parser {
return next;
}
IToken *Lexer::LexNext(char16_t c) {
Token *Lexer::LexNext(char16_t c) {
switch (c) {
case '\0':
return new SimpleToken(TokenKind::EndOfFile, this->_position - 1, 1);
@@ -154,7 +154,7 @@ namespace Porygon::Parser {
}
}
IToken *Lexer::LexNumber(char16_t c) {
Token *Lexer::LexNumber(char16_t c) {
long int_value = CharToInt(c);
double float_value = 0;
short decimal_index = 0;
@@ -201,7 +201,7 @@ namespace Porygon::Parser {
}
}
IToken *Lexer::LexIdentifierOrKeyword() {
Token *Lexer::LexIdentifierOrKeyword() {
auto start = this->_position - 1;
auto end = start;
while (true) {
@@ -275,7 +275,7 @@ namespace Porygon::Parser {
{'\\', '\\'},
};
IToken *Lexer::LexString(char16_t c) {
Token *Lexer::LexString(char16_t c) {
auto start = this->_position - 1;
auto end = start;
char16_t last = c;

View File

@@ -17,14 +17,14 @@ namespace Porygon::Parser{
unsigned int _scriptSize;
char16_t Peek();
char16_t Next();
IToken* LexNext(char16_t c);
IToken* LexNumber(char16_t c);
IToken* LexIdentifierOrKeyword();
IToken* LexString(char16_t c);
Token* LexNext(char16_t c);
Token* LexNumber(char16_t c);
Token* LexIdentifierOrKeyword();
Token* LexString(char16_t c);
public:
Porygon::Script* ScriptData;
vector<const IToken*> Lex();
vector<const Token*> Lex();
explicit Lexer(const u16string& scriptString, Porygon::Script* script);
};

View File

@@ -43,15 +43,15 @@ namespace Porygon::Parser {
virtual const ParsedExpressionKind GetKind() const = 0;
const unsigned int GetStartPosition() const {
inline const unsigned int GetStartPosition() const {
return _position;
}
const unsigned int GetEndPosition() const {
inline const unsigned int GetEndPosition() const {
return _position + _length - 1;
}
const unsigned int GetLength() const {
inline const unsigned int GetLength() const {
return _length;
}
};
@@ -60,7 +60,7 @@ namespace Porygon::Parser {
public:
BadExpression(unsigned int position, unsigned int length) : ParsedExpression(position, length) {}
const ParsedExpressionKind GetKind() const final {
inline const ParsedExpressionKind GetKind() const final {
return ParsedExpressionKind::Bad;
}
};
@@ -68,7 +68,7 @@ namespace Porygon::Parser {
class LiteralIntegerExpression : public ParsedExpression {
const long _value;
public:
const ParsedExpressionKind GetKind() const final {
inline const ParsedExpressionKind GetKind() const final {
return ParsedExpressionKind::LiteralInteger;
}
@@ -77,7 +77,7 @@ namespace Porygon::Parser {
_value(token->GetValue()) {
}
const long GetValue() const {
inline const long GetValue() const {
return _value;
}
};
@@ -85,7 +85,7 @@ namespace Porygon::Parser {
class LiteralFloatExpression : public ParsedExpression {
const double _value;
public:
const ParsedExpressionKind GetKind() const final {
inline const ParsedExpressionKind GetKind() const final {
return ParsedExpressionKind::LiteralFloat;
}
@@ -94,7 +94,7 @@ namespace Porygon::Parser {
_value(token->GetValue()) {
}
const double GetValue() const {
inline const double GetValue() const {
return _value;
}
};
@@ -102,16 +102,16 @@ namespace Porygon::Parser {
class LiteralStringExpression : public ParsedExpression {
const u16string _value;
public:
const ParsedExpressionKind GetKind() const final {
inline const ParsedExpressionKind GetKind() const final {
return ParsedExpressionKind::LiteralString;
}
explicit LiteralStringExpression(const StringToken *token)
: ParsedExpression(token->GetStartPosition(), token->GetLength()),
_value(std::move(token->GetValue())) {
_value(token->GetValue()) {
}
const u16string &GetValue() const {
inline const u16string &GetValue() const {
return _value;
}
};
@@ -119,16 +119,16 @@ namespace Porygon::Parser {
class LiteralBoolExpression : public ParsedExpression {
const bool _value;
public:
const ParsedExpressionKind GetKind() const final {
inline const ParsedExpressionKind GetKind() const final {
return ParsedExpressionKind::LiteralBool;
}
explicit LiteralBoolExpression(const IToken *token)
explicit LiteralBoolExpression(const Token *token)
: ParsedExpression(token->GetStartPosition(), token->GetLength()),
_value(token->GetKind() == TokenKind::TrueKeyword) {
}
const bool GetValue() const {
inline const bool GetValue() const {
return _value;
}
};
@@ -136,7 +136,7 @@ namespace Porygon::Parser {
class VariableExpression : public ParsedExpression {
const HashedString _value;
public:
const ParsedExpressionKind GetKind() const final {
inline const ParsedExpressionKind GetKind() const final {
return ParsedExpressionKind::Variable;
}
@@ -145,7 +145,7 @@ namespace Porygon::Parser {
_value(HashedString(token->GetValue())) {
}
const HashedString GetValue() const {
inline const HashedString GetValue() const {
return _value;
}
};
@@ -158,7 +158,7 @@ namespace Porygon::Parser {
delete _expression;
}
const ParsedExpressionKind GetKind() const final {
inline const ParsedExpressionKind GetKind() const final {
return ParsedExpressionKind::Parenthesized;
}
@@ -166,7 +166,7 @@ namespace Porygon::Parser {
: ParsedExpression(start, length), _expression(innerExpression) {
}
const ParsedExpression *GetInnerExpression() const {
inline const ParsedExpression *GetInnerExpression() const {
return _expression;
}
};
@@ -179,7 +179,7 @@ namespace Porygon::Parser {
delete _operand;
}
const ParsedExpressionKind GetKind() const final {
inline const ParsedExpressionKind GetKind() const final {
return ParsedExpressionKind::Unary;
}
@@ -188,11 +188,11 @@ namespace Porygon::Parser {
_kind(kind), _operand(operand) {
}
const UnaryOperatorKind GetOperatorKind() const {
inline const UnaryOperatorKind GetOperatorKind() const {
return _kind;
}
const ParsedExpression *GetOperand() const {
inline const ParsedExpression *GetOperand() const {
return _operand;
}
};
@@ -207,7 +207,7 @@ namespace Porygon::Parser {
delete _right;
}
const ParsedExpressionKind GetKind() const final {
inline const ParsedExpressionKind GetKind() const final {
return ParsedExpressionKind::Binary;
}
@@ -217,15 +217,15 @@ namespace Porygon::Parser {
_kind(kind), _left(left), _right(right) {
}
const BinaryOperatorKind GetOperatorKind() const {
inline const BinaryOperatorKind GetOperatorKind() const {
return _kind;
}
const ParsedExpression *GetLeft() const {
inline const ParsedExpression *GetLeft() const {
return _left;
}
const ParsedExpression *GetRight() const {
inline const ParsedExpression *GetRight() const {
return _right;
}
};
@@ -246,15 +246,15 @@ namespace Porygon::Parser {
}
}
const ParsedExpressionKind GetKind() const final {
inline const ParsedExpressionKind GetKind() const final {
return ParsedExpressionKind::FunctionCall;
}
const ParsedExpression *GetFunction() const {
inline const ParsedExpression *GetFunction() const {
return _function.get();
}
const vector<const ParsedExpression *> *GetParameters() const {
inline const vector<const ParsedExpression *> *GetParameters() const {
return &_parameters;
}
};
@@ -273,15 +273,15 @@ namespace Porygon::Parser {
delete _indexExpression;
}
const ParsedExpressionKind GetKind() const final {
inline const ParsedExpressionKind GetKind() const final {
return ParsedExpressionKind::Indexer;
}
const ParsedExpression *GetIndexer() const {
inline const ParsedExpression *GetIndexer() const {
return _indexerExpression;
}
const ParsedExpression *GetIndex() const {
inline const ParsedExpression *GetIndex() const {
return _indexExpression;
}
};
@@ -299,15 +299,15 @@ namespace Porygon::Parser {
delete _indexerExpression;
}
const ParsedExpressionKind GetKind() const final {
inline const ParsedExpressionKind GetKind() const final {
return ParsedExpressionKind::PeriodIndexer;
}
const ParsedExpression *GetIndexer() const {
inline const ParsedExpression *GetIndexer() const {
return _indexerExpression;
}
const HashedString &GetIndex() const {
inline const HashedString &GetIndex() const {
return _index;
}
};
@@ -327,11 +327,11 @@ namespace Porygon::Parser {
}
}
const vector<const ParsedExpression *> *GetExpressions() const {
inline const vector<const ParsedExpression *> *GetExpressions() const {
return &_expressions;
}
const ParsedExpressionKind GetKind() const final {
inline const ParsedExpressionKind GetKind() const final {
return ParsedExpressionKind::NumericalTable;
}
};

View File

@@ -56,7 +56,7 @@ namespace Porygon::Parser {
public:
ParsedBadStatement(unsigned int start, unsigned int length) : ParsedStatement(start, length) {};
const ParsedStatementKind GetKind() const final {
inline const ParsedStatementKind GetKind() const final {
return ParsedStatementKind::Bad;
}
};
@@ -65,7 +65,7 @@ namespace Porygon::Parser {
public:
ParsedBreakStatement(unsigned int start, unsigned int length) : ParsedStatement(start, length) {};
const ParsedStatementKind GetKind() const final {
inline const ParsedStatementKind GetKind() const final {
return ParsedStatementKind::Break;
}
};
@@ -89,11 +89,11 @@ namespace Porygon::Parser {
}
}
const ParsedStatementKind GetKind() const override {
inline const ParsedStatementKind GetKind() const override {
return ParsedStatementKind::Block;
}
const std::vector<const ParsedStatement *> *GetStatements() const {
inline const std::vector<const ParsedStatement *> *GetStatements() const {
return &_statements;
}
};
@@ -103,7 +103,7 @@ namespace Porygon::Parser {
explicit ParsedScriptStatement(vector<const ParsedStatement *> statements) : ParsedBlockStatement(
move(statements)) {}
const ParsedStatementKind GetKind() const final {
inline const ParsedStatementKind GetKind() const final {
return ParsedStatementKind::Script;
}
};
@@ -120,15 +120,15 @@ namespace Porygon::Parser {
delete _expression;
}
void NullifyExpression(){
inline void NullifyExpression(){
_expression = nullptr;
}
const ParsedStatementKind GetKind() const final {
inline const ParsedStatementKind GetKind() const final {
return ParsedStatementKind::Expression;
}
const ParsedExpression *GetExpression() const {
inline const ParsedExpression *GetExpression() const {
return _expression;
}
};
@@ -151,19 +151,19 @@ namespace Porygon::Parser {
delete _block;
}
const ParsedStatementKind GetKind() const final {
inline const ParsedStatementKind GetKind() const final {
return ParsedStatementKind::FunctionDeclaration;
}
const HashedString GetIdentifier() const {
inline const HashedString GetIdentifier() const {
return _identifier;
}
const vector<TypedVariableIdentifier *> *GetParameters() const {
inline const vector<TypedVariableIdentifier *> *GetParameters() const {
return &_parameters;
}
const ParsedBlockStatement *GetBlock() const {
inline const ParsedBlockStatement *GetBlock() const {
return _block;
}
};
@@ -182,19 +182,19 @@ namespace Porygon::Parser {
delete _expression;
}
const ParsedStatementKind GetKind() const final {
inline const ParsedStatementKind GetKind() const final {
return ParsedStatementKind::Assignment;
}
const bool IsLocal() const {
inline const bool IsLocal() const {
return _local;
}
const HashedString GetIdentifier() const {
inline const HashedString GetIdentifier() const {
return _identifier;
}
const ParsedExpression *GetExpression() const {
inline const ParsedExpression *GetExpression() const {
return _expression;
}
};
@@ -214,15 +214,15 @@ namespace Porygon::Parser {
delete _valueExpression;
}
const ParsedStatementKind GetKind() const final {
inline const ParsedStatementKind GetKind() const final {
return ParsedStatementKind::IndexAssignment;
}
const ParsedExpression *GetIndexExpression() const {
inline const ParsedExpression *GetIndexExpression() const {
return _indexExpression;
}
const ParsedExpression *GetValueExpression() const {
inline const ParsedExpression *GetValueExpression() const {
return _valueExpression;
}
};
@@ -239,11 +239,11 @@ namespace Porygon::Parser {
delete _expression;
}
const ParsedStatementKind GetKind() const final {
inline const ParsedStatementKind GetKind() const final {
return ParsedStatementKind::Return;
}
const ParsedExpression *GetExpression() const {
inline const ParsedExpression *GetExpression() const {
return _expression;
}
};
@@ -273,19 +273,19 @@ namespace Porygon::Parser {
delete _elseStatement;
}
const ParsedStatementKind GetKind() const final {
inline const ParsedStatementKind GetKind() const final {
return ParsedStatementKind::Conditional;
}
const ParsedExpression *GetCondition() const {
inline const ParsedExpression *GetCondition() const {
return _condition;
}
const ParsedStatement *GetBlock() const {
inline const ParsedStatement *GetBlock() const {
return _block;
}
const ParsedStatement *GetElseStatement() const {
inline const ParsedStatement *GetElseStatement() const {
return _elseStatement;
}
};
@@ -310,27 +310,27 @@ namespace Porygon::Parser {
delete _block;
}
const ParsedStatementKind GetKind() const final {
inline const ParsedStatementKind GetKind() const final {
return ParsedStatementKind::NumericalFor;
}
const HashedString GetIdentifier() const{
inline const HashedString GetIdentifier() const{
return _identifier;
}
const ParsedExpression *GetStart() const{
inline const ParsedExpression *GetStart() const{
return _start;
}
const ParsedExpression *GetEnd() const{
inline const ParsedExpression *GetEnd() const{
return _end;
}
const ParsedExpression *GetStep() const{
inline const ParsedExpression *GetStep() const{
return _step;
}
const ParsedStatement *GetBlock() const{
inline const ParsedStatement *GetBlock() const{
return _block;
}
};
@@ -352,23 +352,23 @@ namespace Porygon::Parser {
delete _block;
}
const ParsedStatementKind GetKind() const final {
inline const ParsedStatementKind GetKind() const final {
return ParsedStatementKind::GenericFor;
}
const HashedString GetKeyIdentifier() const{
inline const HashedString GetKeyIdentifier() const{
return _keyIdentifier;
}
const HashedString GetValueIdentifier() const{
inline const HashedString GetValueIdentifier() const{
return _valueIdentifier;
}
const ParsedExpression* GetIteratorExpression() const{
inline const ParsedExpression* GetIteratorExpression() const{
return _iteratorExpression;
}
const ParsedStatement* GetBlock() const{
inline const ParsedStatement* GetBlock() const{
return _block;
}
};
@@ -386,15 +386,15 @@ namespace Porygon::Parser {
delete _block;
}
const ParsedStatementKind GetKind() const final {
inline const ParsedStatementKind GetKind() const final {
return ParsedStatementKind::While;
}
const ParsedExpression* GetCondition(){
inline const ParsedExpression* GetCondition(){
return _condition;
}
const ParsedStatement* GetBlock(){
inline const ParsedStatement* GetBlock(){
return _block;
}
};

View File

@@ -20,20 +20,20 @@ namespace Porygon::Parser {
return new ParsedScriptStatement(statements);
}
const IToken *Parser::Peek() {
inline const Token *Parser::Peek() {
return this->_tokens[_position];
}
const IToken *Parser::PeekAt(int offset) {
inline const Token *Parser::PeekAt(int offset) {
return this->_tokens[_position + offset];
}
const IToken *Parser::Next() {
inline const Token *Parser::Next() {
this->_position++;
return this->_tokens[_position - 1];
}
ParsedStatement *Parser::ParseStatement(const IToken *current) {
ParsedStatement *Parser::ParseStatement(const Token *current) {
auto currentKind = current->GetKind();
switch (currentKind) {
case TokenKind::LocalKeyword:
@@ -65,9 +65,9 @@ namespace Porygon::Parser {
return new ParsedExpressionStatement(expression);
}
ParsedStatement *Parser::ParseVariableAssignment(const IToken *current) {
ParsedStatement *Parser::ParseVariableAssignment(const Token *current) {
bool isLocal = false;
const IToken *identifier;
const Token *identifier;
if (current->GetKind() == TokenKind::LocalKeyword) {
isLocal = true;
identifier = this->Next();
@@ -125,7 +125,7 @@ namespace Porygon::Parser {
return new ParsedBlockStatement(statements);
}
ParsedStatement *Parser::ParseFunctionDeclaration(const IToken *current) {
ParsedStatement *Parser::ParseFunctionDeclaration(const Token *current) {
auto functionIdentifierToken = this->Next();
auto openParenthesis = this->Next();
vector<TypedVariableIdentifier *> parameters;
@@ -196,7 +196,7 @@ namespace Porygon::Parser {
block->GetEndPosition() - start);
}
ParsedStatement *Parser::ParseReturnStatement(const IToken *current) {
ParsedStatement *Parser::ParseReturnStatement(const Token *current) {
auto start = current->GetStartPosition();
auto startLine = this -> ScriptData -> Diagnostics ->GetLineFromPosition(start);
if (startLine != this -> ScriptData -> Diagnostics -> GetLineFromPosition(this -> Peek() -> GetStartPosition())){
@@ -206,7 +206,7 @@ namespace Porygon::Parser {
return new ParsedReturnStatement(expression, start, expression->GetEndPosition() - start);
}
ParsedStatement *Parser::ParseIfStatement(const IToken *current) {
ParsedStatement *Parser::ParseIfStatement(const Token *current) {
auto condition = this->ParseExpression(this->Next());
auto next = this->Next();
if (next->GetKind() != TokenKind::ThenKeyword) {
@@ -238,7 +238,7 @@ namespace Porygon::Parser {
}
}
ParsedStatement *Parser::ParseNumericForStatement(const IToken *current) {
ParsedStatement *Parser::ParseNumericForStatement(const Token *current) {
auto identifier = dynamic_cast<const IdentifierToken*>(current);
this->Next(); // consume assignment token
bool hasErrors = false;
@@ -270,7 +270,7 @@ namespace Porygon::Parser {
}
ParsedStatement *Parser::ParseGenericForStatement(const IToken *current) {
ParsedStatement *Parser::ParseGenericForStatement(const Token *current) {
auto keyIdentifier = dynamic_cast<const IdentifierToken*>(current)->GetValue();
const IdentifierToken* valueIdentifierToken = nullptr;
bool hasErrors = false;
@@ -314,7 +314,7 @@ namespace Porygon::Parser {
}
}
ParsedStatement *Parser::ParseWhileStatement(const IToken *current) {
ParsedStatement *Parser::ParseWhileStatement(const Token *current) {
auto condition = this -> ParseExpression(this -> Next());
auto doKeyword = this -> Next();
if (doKeyword -> GetKind() != TokenKind::DoKeyword){
@@ -331,7 +331,7 @@ namespace Porygon::Parser {
// Expressions //
/////////////////
ParsedExpression *Parser::ParseExpression(const IToken *current) {
ParsedExpression *Parser::ParseExpression(const Token *current) {
auto expression = this->ParseBinaryExpression(current, OperatorPrecedence::No);
auto peekKind = this->Peek()->GetKind();
while (peekKind == TokenKind::OpenParenthesis ||
@@ -447,7 +447,7 @@ namespace Porygon::Parser {
}
}
ParsedExpression *Parser::ParseBinaryExpression(const IToken *current, OperatorPrecedence parentPrecedence) {
ParsedExpression *Parser::ParseBinaryExpression(const Token *current, OperatorPrecedence parentPrecedence) {
OperatorPrecedence unaryPrecedence = GetUnaryPrecedence(current->GetKind());
ParsedExpression *left;
if (unaryPrecedence != OperatorPrecedence::No && unaryPrecedence >= parentPrecedence) {
@@ -474,7 +474,7 @@ namespace Porygon::Parser {
return left;
}
ParsedExpression *Parser::ParsePrimaryExpression(const IToken *current) {
ParsedExpression *Parser::ParsePrimaryExpression(const Token *current) {
switch (current->GetKind()) {
case TokenKind::Integer:
return new LiteralIntegerExpression(dynamic_cast<const IntegerToken*>(current));
@@ -502,7 +502,7 @@ namespace Porygon::Parser {
}
}
ParsedExpression *Parser::ParseParenthesizedExpression(const IToken *current) {
ParsedExpression *Parser::ParseParenthesizedExpression(const Token *current) {
auto next = this->Next();
auto expression = this->ParseExpression(next);
auto closeToken = this->Next();
@@ -571,7 +571,7 @@ namespace Porygon::Parser {
}
ParsedExpression *Parser::ParseTableExpression(const IToken *current) {
ParsedExpression *Parser::ParseTableExpression(const Token *current) {
if (this->Peek()->GetKind() == TokenKind::CloseCurlyBracket) {
this->Next();
auto start = current->GetStartPosition();

View File

@@ -1,3 +1,5 @@
#include <utility>
#ifndef PORYGONLANG_PARSER_HPP
#define PORYGONLANG_PARSER_HPP
@@ -19,45 +21,45 @@ namespace Porygon::Parser {
};
class Parser {
vector<const IToken *> _tokens;
vector<const Token *> _tokens;
unsigned int _position;
Porygon::Script *ScriptData;
const IToken *Peek();
const Token *Peek();
const IToken *PeekAt(int offset);
const Token *PeekAt(int offset);
const IToken *Next();
const Token *Next();
// Statements
ParsedStatement *ParseStatement(const IToken *current);
ParsedStatement *ParseVariableAssignment(const IToken *current);
ParsedStatement *ParseStatement(const Token *current);
ParsedStatement *ParseVariableAssignment(const Token *current);
ParsedStatement *ParseIndexAssignment(ParsedExpression *indexer);
ParsedBlockStatement *ParseBlock(const vector<TokenKind> &endTokens, const vector<const ParsedStatement *> &openStatements = {});
ParsedStatement *ParseFunctionDeclaration(const IToken *current);
ParsedStatement *ParseReturnStatement(const IToken *current);
ParsedStatement *ParseIfStatement(const IToken *current);
ParsedStatement *ParseFunctionDeclaration(const Token *current);
ParsedStatement *ParseReturnStatement(const Token *current);
ParsedStatement *ParseIfStatement(const Token *current);
ParsedStatement *ParseForStatement();
ParsedStatement *ParseNumericForStatement(const IToken *current);
ParsedStatement *ParseGenericForStatement(const IToken *current);
ParsedStatement *ParseWhileStatement(const IToken *current);
ParsedStatement *ParseNumericForStatement(const Token *current);
ParsedStatement *ParseGenericForStatement(const Token *current);
ParsedStatement *ParseWhileStatement(const Token *current);
// Expressions
ParsedExpression *ParseExpression(const IToken *current);
ParsedExpression *ParseBinaryExpression(const IToken *current, OperatorPrecedence parentPrecedence);
ParsedExpression *ParsePrimaryExpression(const IToken *current);
ParsedExpression *ParseParenthesizedExpression(const IToken *current);
ParsedExpression *ParseExpression(const Token *current);
ParsedExpression *ParseBinaryExpression(const Token *current, OperatorPrecedence parentPrecedence);
ParsedExpression *ParsePrimaryExpression(const Token *current);
ParsedExpression *ParseParenthesizedExpression(const Token *current);
ParsedExpression *ParseFunctionCallExpression(ParsedExpression *functionExpression);
ParsedExpression *ParseIndexExpression(ParsedExpression *indexingExpression);
ParsedExpression *ParsePeriodIndexExpression(ParsedExpression *indexingExpression);
ParsedExpression *ParseTableExpression(const IToken *current);
ParsedExpression *ParseTableExpression(const Token *current);
public:
ParsedScriptStatement *Parse();
explicit Parser(const vector<const IToken *> &tokens, Porygon::Script *scriptData) : _tokens(tokens), _position(0),
explicit Parser(vector<const Token *> tokens, Porygon::Script *scriptData) : _tokens(std::move(tokens)), _position(0),
ScriptData(scriptData){
}

View File

@@ -13,113 +13,113 @@ using namespace std;
using namespace Porygon::Utilities;
namespace Porygon::Parser {
class IToken {
class Token {
const unsigned int _position;
const unsigned int _length;
public:
virtual const TokenKind GetKind() const = 0;
IToken(unsigned int position, unsigned int length)
Token(unsigned int position, unsigned int length)
: _position(position), _length(length) {
}
const unsigned int GetStartPosition() const {
inline const unsigned int GetStartPosition() const {
return _position;
}
const unsigned int GetEndPosition() const {
inline const unsigned int GetEndPosition() const {
return _position + _length - 1;
}
const unsigned int GetLength() const {
inline const unsigned int GetLength() const {
return _length;
}
virtual ~IToken() = default;
virtual ~Token() = default;
};
class SimpleToken : public IToken {
class SimpleToken : public Token {
const TokenKind _kind;
public:
explicit SimpleToken(TokenKind kind, unsigned int position, unsigned int length)
: IToken(position, length),
: Token(position, length),
_kind(kind) {
}
const TokenKind GetKind() const final {
inline const TokenKind GetKind() const final {
return _kind;
}
};
class IntegerToken : public IToken {
class IntegerToken : public Token {
const long _value;
public:
explicit IntegerToken(long value, unsigned int position, unsigned int length)
: IToken(position, length),
: Token(position, length),
_value(value) {
}
const TokenKind GetKind() const final {
inline const TokenKind GetKind() const final {
return TokenKind::Integer;
}
const long GetValue() const {
inline const long GetValue() const {
return _value;
}
};
class FloatToken : public IToken {
class FloatToken : public Token {
const double _value;
public:
explicit FloatToken(double value, unsigned int position, unsigned int length)
: IToken(position, length),
: Token(position, length),
_value(value) {
}
const TokenKind GetKind() const final {
inline const TokenKind GetKind() const final {
return TokenKind::Float;
}
const double GetValue() const {
inline const double GetValue() const {
return _value;
}
};
class StringToken : public IToken {
class StringToken : public Token {
const u16string _value;
public:
explicit StringToken(u16string value, unsigned int position, unsigned int length)
: IToken(position, length),
: Token(position, length),
_value(std::move(value)) {
}
const TokenKind GetKind() const final {
inline const TokenKind GetKind() const final {
return TokenKind::String;
}
const u16string &GetValue() const {
inline const u16string &GetValue() const {
return _value;
}
};
class IdentifierToken : public IToken {
class IdentifierToken : public Token {
const Utilities::HashedString _value;
public:
explicit IdentifierToken(const HashedString value, unsigned int position, unsigned int length)
: IToken(position, length),
: Token(position, length),
_value(value) {
}
const TokenKind GetKind() const final {
inline const TokenKind GetKind() const final {
return TokenKind::Identifier;
}
const HashedString GetValue() const {
inline const HashedString GetValue() const {
return _value;
}
};

View File

@@ -9,15 +9,15 @@ namespace Porygon::Parser {
HashedString _type;
HashedString _identifier;
public:
TypedVariableIdentifier(HashedString type, HashedString identifier)
TypedVariableIdentifier(const HashedString& type, const HashedString& identifier)
: _type(type), _identifier(identifier) {
}
HashedString GetType() {
inline HashedString GetType() {
return _type;
}
HashedString GetIdentifier() {
inline HashedString GetIdentifier() {
return _identifier;
}
};