aboutsummaryrefslogtreecommitdiff
path: root/src/compiler/lexer.c
diff options
context:
space:
mode:
Diffstat (limited to 'src/compiler/lexer.c')
-rw-r--r--src/compiler/lexer.c34
1 files changed, 31 insertions, 3 deletions
diff --git a/src/compiler/lexer.c b/src/compiler/lexer.c
index 1fbba2f..db1ba64 100644
--- a/src/compiler/lexer.c
+++ b/src/compiler/lexer.c
@@ -33,6 +33,10 @@ const char *LEXER_TOKEN_STRINGS[] = {
"LEXER_TOKEN_BUILTIN_PUTC",
"LEXER_TOKEN_BUILTIN_C_LIBRARY",
"LEXER_TOKEN_BUILTIN_C_FUNCTION",
+ "LEXER_TOKEN_BUILTIN_BITWISE_NOT",
+ "LEXER_TOKEN_BUILTIN_BITWISE_AND",
+ "LEXER_TOKEN_BUILTIN_BITWISE_XOR",
+ "LEXER_TOKEN_BUILTIN_BITWISE_OR",
"LEXER_TOKEN_KEYWORD_TYPE",
"LEXER_TOKEN_KEYWORD_VOID",
"LEXER_TOKEN_KEYWORD_I8",
@@ -76,6 +80,7 @@ const char *LEXER_TOKEN_STRINGS[] = {
"LEXER_TOKEN_SYMBOL_MINUS",
"LEXER_TOKEN_SYMBOL_ADDRESS",
"LEXER_TOKEN_SYMBOL_LOGICAL_NOT",
+ "LEXER_TOKEN_SYMBOL_BITWISE_NOT",
"LEXER_TOKEN_SYMBOL_MULTIPLY",
"LEXER_TOKEN_SYMBOL_DIVIDE",
@@ -91,6 +96,10 @@ const char *LEXER_TOKEN_STRINGS[] = {
"LEXER_TOKEN_SYMBOL_GREATER_OR_EQUAL",
"LEXER_TOKEN_SYMBOL_SMALLER_OR_EQUAL",
+ "LEXER_TOKEN_SYMBOL_BITWISE_AND",
+ "LEXER_TOKEN_SYMBOL_BITWISE_XOR",
+ "LEXER_TOKEN_SYMBOL_BITWISE_OR",
+
"LEXER_TOKEN_SYMBOL_LOGICAL_AND",
"LEXER_TOKEN_SYMBOL_LOGICAL_OR",
@@ -126,9 +135,9 @@ const char *LEXER_TOKEN_STRINGS[] = {
};
static const char *LEXER_SYMBOL_STRINGS[] = {
- ";", "(", ")", "{", "}", "->", ":", "=", "+=", "-=", "*=",
- "/=", "%=", ",", "+", "-", "*", "/", "%", "==", "!=", ">",
- ">=", "<", "<=", "&", ".*", ".", "!", "&&", "||", "[", "]",
+ ";", "(", ")", "{", "}", "->", ":", "=", "+=", "-=", "*=", "/=",
+ "%=", ",", "+", "-", "*", "/", "%", "==", "!=", ">", ">=", "<",
+ "<=", "&", ".*", ".", "!", "&&", "||", "[", "]", "^", "|", "~",
};
static const LexerToken LEXER_SYMBOL_TOKENS[] = {
LEXER_TOKEN_SYMBOL_EOL,
@@ -164,6 +173,9 @@ static const LexerToken LEXER_SYMBOL_TOKENS[] = {
LEXER_TOKEN_SYMBOL_LOGICAL_OR,
LEXER_TOKEN_SYMBOL_OPEN_BRACKET,
LEXER_TOKEN_SYMBOL_CLOSE_BRACKET,
+ LEXER_TOKEN_SYMBOL_BITWISE_XOR,
+ LEXER_TOKEN_SYMBOL_BITWISE_OR,
+ LEXER_TOKEN_SYMBOL_BITWISE_NOT,
};
static const size_t LEXER_SYMBOL_SIZE =
sizeof(LEXER_SYMBOL_TOKENS) / sizeof(*LEXER_SYMBOL_TOKENS);
@@ -229,6 +241,10 @@ static const char *LEXER_BUILTIN_STRINGS[] = {
"putc",
"c_library",
"c_function",
+ "bitwise_not",
+ "bitwise_and",
+ "bitwise_xor",
+ "bitwise_or",
};
static const LexerToken LEXER_BUILTIN_TOKENS[] = {
LEXER_TOKEN_BUILTIN_CAST,
@@ -253,6 +269,10 @@ static const LexerToken LEXER_BUILTIN_TOKENS[] = {
LEXER_TOKEN_BUILTIN_PUTC,
LEXER_TOKEN_BUILTIN_C_LIBRARY,
LEXER_TOKEN_BUILTIN_C_FUNCTION,
+ LEXER_TOKEN_BUILTIN_BITWISE_NOT,
+ LEXER_TOKEN_BUILTIN_BITWISE_AND,
+ LEXER_TOKEN_BUILTIN_BITWISE_XOR,
+ LEXER_TOKEN_BUILTIN_BITWISE_OR,
};
static const size_t LEXER_BUILTIN_SIZE =
sizeof(LEXER_BUILTIN_TOKENS) / sizeof(*LEXER_BUILTIN_TOKENS);
@@ -523,6 +543,10 @@ lexerPushClear(LexerNodeArray *array, size_t *array_size, char const *iter,
case LEXER_TOKEN_BUILTIN_SIZE_OF:
case LEXER_TOKEN_BUILTIN_C_LIBRARY:
case LEXER_TOKEN_BUILTIN_C_FUNCTION:
+ case LEXER_TOKEN_BUILTIN_BITWISE_NOT:
+ case LEXER_TOKEN_BUILTIN_BITWISE_AND:
+ case LEXER_TOKEN_BUILTIN_BITWISE_XOR:
+ case LEXER_TOKEN_BUILTIN_BITWISE_OR:
case LEXER_TOKEN_SYMBOL_CLOSE_BRACKET:
case LEXER_TOKEN_SYMBOL_OPEN_BRACKET:
case LEXER_TOKEN_KEYWORD_SHAPE_SHIFTER:
@@ -530,6 +554,10 @@ lexerPushClear(LexerNodeArray *array, size_t *array_size, char const *iter,
case LEXER_TOKEN_KEYWORD_CONTINUE:
case LEXER_TOKEN_KEYWORD_C_LIBRARY:
case LEXER_TOKEN_KEYWORD_C_FUNCTION:
+ case LEXER_TOKEN_SYMBOL_BITWISE_AND:
+ case LEXER_TOKEN_SYMBOL_BITWISE_XOR:
+ case LEXER_TOKEN_SYMBOL_BITWISE_OR:
+ case LEXER_TOKEN_SYMBOL_BITWISE_NOT:
if (*array_size == array->size) {
*array_size += 1 + *array_size / 2;
array->data =