diff options
Diffstat (limited to 'src')
-rw-r--r-- | src/backend/bba.c | 0 | ||||
-rw-r--r-- | src/backend/bba.h | 39 | ||||
-rw-r--r-- | src/compiler/lexer.c | 20 | ||||
-rw-r--r-- | src/compiler/lexer.h | 2 | ||||
-rw-r--r-- | src/runner/runner.c | 2 |
5 files changed, 55 insertions, 8 deletions
diff --git a/src/backend/bba.c b/src/backend/bba.c new file mode 100644 index 0000000..e69de29 --- /dev/null +++ b/src/backend/bba.c diff --git a/src/backend/bba.h b/src/backend/bba.h new file mode 100644 index 0000000..98c081e --- /dev/null +++ b/src/backend/bba.h @@ -0,0 +1,39 @@ +#pragma once + +#include "compiler/ast-tree.h" + +typedef enum BBAOperation { + BBA_OPERATION_ASSIGN, + + BBA_OPERATION_CAST, + // BBA_OPERATION_TYPE_OF, + // BBA_OPERATION_IMPORT, + // BBA_OPERATION_IS_COMPTIME, + BBA_OPERATION_STACK_ALLOC, + BBA_OPERATION_HEAP_ALLOC, + BBA_OPERATION_NEG, + BBA_OPERATION_ADD, + BBA_OPERATION_SUB, + BBA_OPERATION_MUL, + BBA_OPERATION_DIV, + BBA_OPERATION_MOD, + BBA_OPERATION_EQUAL, + BBA_OPERATION_NOT_EQUAL, + BBA_OPERATION_GREATER, + BBA_OPERATION_SMALLER, + BBA_OPERATION_GREATER_OR_EQUAL, + BBA_OPERATION_SMALLER_OR_EQUAL, + BBA_OPERATION_PUTC, + + BBA_OPERATION_CALL, +}BBAOperation; + +typedef struct BBAInstruction { + +} BBAInstruction; + +typedef struct BBABlock { +} BBABlock; + +typedef struct BBA { +} BBA; diff --git a/src/compiler/lexer.c b/src/compiler/lexer.c index 6b55e61..23a827e 100644 --- a/src/compiler/lexer.c +++ b/src/compiler/lexer.c @@ -30,6 +30,8 @@ const char *LEXER_TOKEN_STRINGS[] = { "LEXER_TOKEN_BUILTIN_GREATER_OR_EQUAL", "LEXER_TOKEN_BUILTIN_SMALLER_OR_EQUAL", "LEXER_TOKEN_BUILTIN_PUTC", + "LEXER_TOKEN_BUILTIN_C_LIBRARY", + "LEXER_TOKEN_BUILTIN_C_FUNCTION", "LEXER_TOKEN_KEYWORD_TYPE", "LEXER_TOKEN_KEYWORD_VOID", "LEXER_TOKEN_KEYWORD_I8", @@ -199,11 +201,11 @@ static const size_t LEXER_KEYWORD_SIZE = static const char *LEXER_BUILTIN_STRINGS[] = { "cast", - "typeOf", + "type_of", "import", - "isComptime", - "stackAlloc", - "heapAlloc", + "is_comptime", + "stack_alloc", + "heap_alloc", "neg", "add", "sub", @@ -211,12 +213,14 @@ static const char *LEXER_BUILTIN_STRINGS[] = { "div", "mod", "equal", - "notEqual", + "not_equal", "greater", "smaller", - "greaterOrEqual", - "smallerOrEqual", + "greater_or_equal", + "smaller_or_equal", "putc", + "c_library", + "c_function", }; static const LexerToken LEXER_BUILTIN_TOKENS[] = { LEXER_TOKEN_BUILTIN_CAST, @@ -238,6 +242,8 @@ static const LexerToken LEXER_BUILTIN_TOKENS[] = { LEXER_TOKEN_BUILTIN_GREATER_OR_EQUAL, LEXER_TOKEN_BUILTIN_SMALLER_OR_EQUAL, LEXER_TOKEN_BUILTIN_PUTC, + LEXER_TOKEN_BUILTIN_C_LIBRARY, + LEXER_TOKEN_BUILTIN_C_FUNCTION, }; static const size_t LEXER_BUILTIN_SIZE = sizeof(LEXER_BUILTIN_TOKENS) / sizeof(*LEXER_BUILTIN_TOKENS); diff --git a/src/compiler/lexer.h b/src/compiler/lexer.h index 925c16f..d07f7e7 100644 --- a/src/compiler/lexer.h +++ b/src/compiler/lexer.h @@ -32,6 +32,8 @@ typedef enum LexerToken { LEXER_TOKEN_BUILTIN_GREATER_OR_EQUAL, LEXER_TOKEN_BUILTIN_SMALLER_OR_EQUAL, LEXER_TOKEN_BUILTIN_PUTC, + LEXER_TOKEN_BUILTIN_C_LIBRARY, + LEXER_TOKEN_BUILTIN_C_FUNCTION, LEXER_TOKEN_KEYWORD_TYPE, LEXER_TOKEN_KEYWORD_VOID, LEXER_TOKEN_KEYWORD_I8, diff --git a/src/runner/runner.c b/src/runner/runner.c index f1e8afa..24e8e3b 100644 --- a/src/runner/runner.c +++ b/src/runner/runner.c @@ -922,7 +922,7 @@ AstTree *runAstTreeBuiltin(AstTree *tree, AstTreeScope *scope, return ret; } case AST_TREE_TOKEN_BUILTIN_PUTC: { - putchar((u8) * (AstTreeInt *)arguments[0]->metadata); + putchar(*(u8*)arguments[0]->metadata); return copyAstTree(&AST_TREE_VOID_VALUE); } case AST_TREE_TOKEN_BUILTIN_IMPORT: |