|
@@ -99,13 +99,11 @@ static bool tokenizer_nextIf(char32_t c) {
|
|
|
}
|
|
|
|
|
|
static void tokenizer_addToken(Token token) {
|
|
|
-
|
|
|
- addToken(tokens, token, line);
|
|
|
+ tokens->add(token, line);
|
|
|
}
|
|
|
|
|
|
static void tokenizer_addStringToken(Token token, const char* text) {
|
|
|
-
|
|
|
- addStringToken(tokens, token, line, text);
|
|
|
+ tokens->add(token, line, text);
|
|
|
}
|
|
|
|
|
|
static Token tokenizer_chooseToken(char c, Token aCharEqual, Token aChar, Token aEqual, Token other) {
|
|
@@ -138,35 +136,33 @@ static bool tokenizer_handleLiteral(char32_t c, Token token) {
|
|
|
buffer[index] = '\0';
|
|
|
|
|
|
if(strcmp(buffer, "if") == 0) {
|
|
|
- tokenizer_addToken(IF);
|
|
|
- } else if(strcmp(buffer, "if") == 0) {
|
|
|
- tokenizer_addToken(IF);
|
|
|
+ tokenizer_addToken(Token::IF);
|
|
|
} else if(strcmp(buffer, "else") == 0) {
|
|
|
- tokenizer_addToken(ELSE);
|
|
|
+ tokenizer_addToken(Token::ELSE);
|
|
|
} else if(strcmp(buffer, "elseif") == 0) {
|
|
|
- tokenizer_addToken(ELSEIF);
|
|
|
+ tokenizer_addToken(Token::ELSEIF);
|
|
|
} else if(strcmp(buffer, "while") == 0) {
|
|
|
- tokenizer_addToken(WHILE);
|
|
|
+ tokenizer_addToken(Token::WHILE);
|
|
|
} else if(strcmp(buffer, "try") == 0) {
|
|
|
- tokenizer_addToken(TRY);
|
|
|
+ tokenizer_addToken(Token::TRY);
|
|
|
} else if(strcmp(buffer, "catch") == 0) {
|
|
|
- tokenizer_addToken(CATCH);
|
|
|
+ tokenizer_addToken(Token::CATCH);
|
|
|
} else if(strcmp(buffer, "for") == 0) {
|
|
|
- tokenizer_addToken(FOR);
|
|
|
+ tokenizer_addToken(Token::FOR);
|
|
|
} else if(strcmp(buffer, "function") == 0) {
|
|
|
- tokenizer_addToken(FUNCTION);
|
|
|
+ tokenizer_addToken(Token::FUNCTION);
|
|
|
} else if(strcmp(buffer, "break") == 0) {
|
|
|
- tokenizer_addToken(BREAK);
|
|
|
+ tokenizer_addToken(Token::BREAK);
|
|
|
} else if(strcmp(buffer, "continue") == 0) {
|
|
|
- tokenizer_addToken(CONTINUE);
|
|
|
+ tokenizer_addToken(Token::CONTINUE);
|
|
|
} else if(strcmp(buffer, "return") == 0) {
|
|
|
- tokenizer_addToken(RETURN);
|
|
|
+ tokenizer_addToken(Token::RETURN);
|
|
|
} else if(strcmp(buffer, "true") == 0) {
|
|
|
- tokenizer_addToken(TRUE);
|
|
|
+ tokenizer_addToken(Token::TRUE);
|
|
|
} else if(strcmp(buffer, "false") == 0) {
|
|
|
- tokenizer_addToken(FALSE);
|
|
|
+ tokenizer_addToken(Token::FALSE);
|
|
|
} else if(strcmp(buffer, "null") == 0) {
|
|
|
- tokenizer_addToken(NULL_TOKEN);
|
|
|
+ tokenizer_addToken(Token::NULL_TOKEN);
|
|
|
} else {
|
|
|
|
|
|
tokenizer_addStringToken(token, buffer);
|
|
@@ -194,8 +190,7 @@ static bool tokenizer_handleNumber(char32_t c) {
|
|
|
number = (number * 10) + (data - '0');
|
|
|
tokenizer_next(&data);
|
|
|
}
|
|
|
- addDoubleToken(tokens, NUMBER, line, number);
|
|
|
-
|
|
|
+ tokens->add(Token::NUMBER, line, number);
|
|
|
return false;
|
|
|
}
|
|
|
|
|
@@ -213,7 +208,7 @@ static bool tokenizer_handleString() {
|
|
|
}
|
|
|
if(data == '"') {
|
|
|
buffer[index] = '\0';
|
|
|
- tokenizer_addStringToken(STRING, buffer);
|
|
|
+ tokenizer_addStringToken(Token::STRING, buffer);
|
|
|
return false;
|
|
|
}
|
|
|
if(data == '\n') {
|
|
@@ -276,10 +271,10 @@ static bool tokenizer_handleSlash() {
|
|
|
} else if(tokenizer_nextIf('*')) {
|
|
|
return tokenizer_handleMultiLineComment();
|
|
|
} else if(tokenizer_nextIf('=')) {
|
|
|
- tokenizer_addToken(DIV_SET);
|
|
|
+ tokenizer_addToken(Token::DIV_SET);
|
|
|
return false;
|
|
|
}
|
|
|
- tokenizer_addToken(DIV);
|
|
|
+ tokenizer_addToken(Token::DIV);
|
|
|
|
|
|
return false;
|
|
|
}
|
|
@@ -294,51 +289,51 @@ static bool tokenizer_handleSpecial(char32_t c) {
|
|
|
return false;
|
|
|
case '"':
|
|
|
return tokenizer_handleString();
|
|
|
- case '(': tokenizer_addToken(OPEN_BRACKET);
|
|
|
+ case '(': tokenizer_addToken(Token::OPEN_BRACKET);
|
|
|
return false;
|
|
|
- case ')': tokenizer_addToken(CLOSE_BRACKET);
|
|
|
+ case ')': tokenizer_addToken(Token::CLOSE_BRACKET);
|
|
|
return false;
|
|
|
- case '[': tokenizer_addToken(OPEN_SQUARE_BRACKET);
|
|
|
+ case '[': tokenizer_addToken(Token::OPEN_SQUARE_BRACKET);
|
|
|
return false;
|
|
|
- case ']': tokenizer_addToken(CLOSE_SQUARE_BRACKET);
|
|
|
+ case ']': tokenizer_addToken(Token::CLOSE_SQUARE_BRACKET);
|
|
|
return false;
|
|
|
- case '{': tokenizer_addToken(OPEN_CURVED_BRACKET);
|
|
|
+ case '{': tokenizer_addToken(Token::OPEN_CURVED_BRACKET);
|
|
|
return false;
|
|
|
- case '}': tokenizer_addToken(CLOSE_CURVED_BRACKET);
|
|
|
+ case '}': tokenizer_addToken(Token::CLOSE_CURVED_BRACKET);
|
|
|
return false;
|
|
|
case '$':
|
|
|
- return tokenizer_handleLiteral(c, LITERAL);
|
|
|
+ return tokenizer_handleLiteral(c, Token::LITERAL);
|
|
|
case '@':
|
|
|
- return tokenizer_handleLiteral(c, LABEL);
|
|
|
- case ';': tokenizer_addToken(SEMICOLON);
|
|
|
+ return tokenizer_handleLiteral(c, Token::LABEL);
|
|
|
+ case ';': tokenizer_addToken(Token::SEMICOLON);
|
|
|
return false;
|
|
|
- case ',': tokenizer_addToken(COMMA);
|
|
|
+ case ',': tokenizer_addToken(Token::COMMA);
|
|
|
return false;
|
|
|
- case '~': tokenizer_addToken(BIT_INVERT);
|
|
|
+ case '~': tokenizer_addToken(Token::BIT_INVERT);
|
|
|
return false;
|
|
|
- case '+': tokenizer_addToken(tokenizer_nextIf('=') ? ADD_SET: (tokenizer_nextIf('+') ? INC: ADD));
|
|
|
+ case '+': tokenizer_addToken(tokenizer_nextIf('=') ? Token::ADD_SET: (tokenizer_nextIf('+') ? Token::INC: Token::ADD));
|
|
|
return false;
|
|
|
- case '-': tokenizer_addToken(tokenizer_nextIf('=') ? SUB_SET: (tokenizer_nextIf('-') ? DEC: SUB));
|
|
|
+ case '-': tokenizer_addToken(tokenizer_nextIf('=') ? Token::SUB_SET: (tokenizer_nextIf('-') ? Token::DEC: Token::SUB));
|
|
|
return false;
|
|
|
- case '!': tokenizer_addToken(tokenizer_nextIf('=') ? NOT_EQUAL: INVERT);
|
|
|
+ case '!': tokenizer_addToken(tokenizer_nextIf('=') ? Token::NOT_EQUAL: Token::INVERT);
|
|
|
break;
|
|
|
- case '=': tokenizer_addToken(tokenizer_nextIf('=') ? EQUAL: SET);
|
|
|
+ case '=': tokenizer_addToken(tokenizer_nextIf('=') ? Token::EQUAL: Token::SET);
|
|
|
return false;
|
|
|
- case '*': tokenizer_addToken(tokenizer_nextIf('=') ? MUL_SET: MUL);
|
|
|
+ case '*': tokenizer_addToken(tokenizer_nextIf('=') ? Token::MUL_SET: Token::MUL);
|
|
|
return false;
|
|
|
case '/':
|
|
|
return tokenizer_handleSlash();
|
|
|
- case '%': tokenizer_addToken(tokenizer_nextIf('=') ? MOD_SET: MOD);
|
|
|
+ case '%': tokenizer_addToken(tokenizer_nextIf('=') ? Token::MOD_SET: Token::MOD);
|
|
|
return false;
|
|
|
- case '&': tokenizer_addToken(tokenizer_nextIf('=') ? BIT_AND_SET: (tokenizer_nextIf('&') ? AND: BIT_AND));
|
|
|
+ case '&': tokenizer_addToken(tokenizer_nextIf('=') ? Token::BIT_AND_SET: (tokenizer_nextIf('&') ? Token::AND: Token::BIT_AND));
|
|
|
return false;
|
|
|
- case '|': tokenizer_addToken(tokenizer_nextIf('=') ? BIT_OR_SET: (tokenizer_nextIf('|') ? OR: BIT_OR));
|
|
|
+ case '|': tokenizer_addToken(tokenizer_nextIf('=') ? Token::BIT_OR_SET: (tokenizer_nextIf('|') ? Token::OR: Token::BIT_OR));
|
|
|
return false;
|
|
|
- case '^': tokenizer_addToken(tokenizer_nextIf('=') ? BIT_XOR_SET: BIT_XOR);
|
|
|
+ case '^': tokenizer_addToken(tokenizer_nextIf('=') ? Token::BIT_XOR_SET: Token::BIT_XOR);
|
|
|
return false;
|
|
|
- case '<': tokenizer_addToken(tokenizer_chooseToken('<', LEFT_SHIFT_SET, LEFT_SHIFT, LESS_EQUAL, LESS));
|
|
|
+ case '<': tokenizer_addToken(tokenizer_chooseToken('<', Token::LEFT_SHIFT_SET, Token::LEFT_SHIFT, Token::LESS_EQUAL, Token::LESS));
|
|
|
return false;
|
|
|
- case '>': tokenizer_addToken(tokenizer_chooseToken('>', RIGHT_SHIFT_SET, RIGHT_SHIFT, GREATER_EQUAL, GREATER));
|
|
|
+ case '>': tokenizer_addToken(tokenizer_chooseToken('>', Token::RIGHT_SHIFT_SET, Token::RIGHT_SHIFT, Token::GREATER_EQUAL, Token::GREATER));
|
|
|
return false;
|
|
|
}
|
|
|
char buffer[32];
|
|
@@ -354,7 +349,7 @@ static bool tokenizer_handleSpecial(char32_t c) {
|
|
|
|
|
|
static bool tokenizer_handleChar(char32_t c) {
|
|
|
if(tokenizer_isValidNameStart(c)) {
|
|
|
- return tokenizer_handleLiteral(c, LITERAL);
|
|
|
+ return tokenizer_handleLiteral(c, Token::LITERAL);
|
|
|
} else if(tokenizer_isDigit(c)) {
|
|
|
|
|
|
return tokenizer_handleNumber(c);
|
|
@@ -377,7 +372,7 @@ bool tokenize(TokenStream* tokenStream, const char* inputPath) {
|
|
|
return true;
|
|
|
}
|
|
|
}
|
|
|
- tokenizer_addToken(EOF_TOKEN);
|
|
|
+ tokenizer_addToken(Token::EOF_TOKEN);
|
|
|
|
|
|
fclose(input);
|
|
|
input = NULL;
|