aboutsummaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
Diffstat (limited to 'src')
-rw-r--r--src/backend/bba.c0
-rw-r--r--src/backend/bba.h39
-rw-r--r--src/compiler/lexer.c20
-rw-r--r--src/compiler/lexer.h2
-rw-r--r--src/runner/runner.c2
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: