aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--code/basic.felan76
-rw-r--r--code/main.felan16
-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
7 files changed, 105 insertions, 50 deletions
diff --git a/code/basic.felan b/code/basic.felan
index cac8d85..cec6032 100644
--- a/code/basic.felan
+++ b/code/basic.felan
@@ -367,99 +367,99 @@ __smaller__ :: (left:f128,right:f128) -> bool {
};
__greater_or_equal__ :: (left:u8,right:u8) -> bool {
- return @greaterOrEqual(left,right);
+ return @greater_or_equal(left,right);
};
__greater_or_equal__ :: (left:i8,right:i8) -> bool {
- return @greaterOrEqual(left,right);
+ return @greater_or_equal(left,right);
};
__greater_or_equal__ :: (left:u16,right:u16) -> bool {
- return @greaterOrEqual(left,right);
+ return @greater_or_equal(left,right);
};
__greater_or_equal__ :: (left:i16,right:i16) -> bool {
- return @greaterOrEqual(left,right);
+ return @greater_or_equal(left,right);
};
__greater_or_equal__ :: (left:u32,right:u32) -> bool {
- return @greaterOrEqual(left,right);
+ return @greater_or_equal(left,right);
};
__greater_or_equal__ :: (left:i32,right:i32) -> bool {
- return @greaterOrEqual(left,right);
+ return @greater_or_equal(left,right);
};
__greater_or_equal__ :: (left:u64,right:u64) -> bool {
- return @greaterOrEqual(left,right);
+ return @greater_or_equal(left,right);
};
__greater_or_equal__ :: (left:i64,right:i64) -> bool {
- return @greaterOrEqual(left,right);
+ return @greater_or_equal(left,right);
};
__greater_or_equal__ :: (left:f16,right:f16) -> bool {
- return @greaterOrEqual(left,right);
+ return @greater_or_equal(left,right);
};
__greater_or_equal__ :: (left:f32,right:f32) -> bool {
- return @greaterOrEqual(left,right);
+ return @greater_or_equal(left,right);
};
__greater_or_equal__ :: (left:f64,right:f64) -> bool {
- return @greaterOrEqual(left,right);
+ return @greater_or_equal(left,right);
};
__greater_or_equal__ :: (left:f128,right:f128) -> bool {
- return @greaterOrEqual(left,right);
+ return @greater_or_equal(left,right);
};
__smaller_or_equal__ :: (left:u8,right:u8) -> bool {
- return @smallerOrEqual(left,right);
+ return @smaller_or_equal(left,right);
};
__smaller_or_equal__ :: (left:i8,right:i8) -> bool {
- return @smallerOrEqual(left,right);
+ return @smaller_or_equal(left,right);
};
__smaller_or_equal__ :: (left:u16,right:u16) -> bool {
- return @smallerOrEqual(left,right);
+ return @smaller_or_equal(left,right);
};
__smaller_or_equal__ :: (left:i16,right:i16) -> bool {
- return @smallerOrEqual(left,right);
+ return @smaller_or_equal(left,right);
};
__smaller_or_equal__ :: (left:u32,right:u32) -> bool {
- return @smallerOrEqual(left,right);
+ return @smaller_or_equal(left,right);
};
__smaller_or_equal__ :: (left:i32,right:i32) -> bool {
- return @smallerOrEqual(left,right);
+ return @smaller_or_equal(left,right);
};
__smaller_or_equal__ :: (left:u64,right:u64) -> bool {
- return @smallerOrEqual(left,right);
+ return @smaller_or_equal(left,right);
};
__smaller_or_equal__ :: (left:i64,right:i64) -> bool {
- return @smallerOrEqual(left,right);
+ return @smaller_or_equal(left,right);
};
__smaller_or_equal__ :: (left:f16,right:f16) -> bool {
- return @smallerOrEqual(left,right);
+ return @smaller_or_equal(left,right);
};
__smaller_or_equal__ :: (left:f32,right:f32) -> bool {
- return @smallerOrEqual(left,right);
+ return @smaller_or_equal(left,right);
};
__smaller_or_equal__ :: (left:f64,right:f64) -> bool {
- return @smallerOrEqual(left,right);
+ return @smaller_or_equal(left,right);
};
__smaller_or_equal__ :: (left:f128,right:f128) -> bool {
- return @smallerOrEqual(left,right);
+ return @smaller_or_equal(left,right);
};
__equal__ :: (left:u8,right:u8) -> bool {
@@ -519,59 +519,59 @@ __equal__ :: (left:type,right:type) -> bool {
};
__not_equal__ :: (left:u8,right:u8) -> bool {
- return @notEqual(left,right);
+ return @not_equal(left,right);
};
__not_equal__ :: (left:i8,right:i8) -> bool {
- return @notEqual(left,right);
+ return @not_equal(left,right);
};
__not_equal__ :: (left:u16,right:u16) -> bool {
- return @notEqual(left,right);
+ return @not_equal(left,right);
};
__not_equal__ :: (left:i16,right:i16) -> bool {
- return @notEqual(left,right);
+ return @not_equal(left,right);
};
__not_equal__ :: (left:u32,right:u32) -> bool {
- return @notEqual(left,right);
+ return @not_equal(left,right);
};
__not_equal__ :: (left:i32,right:i32) -> bool {
- return @notEqual(left,right);
+ return @not_equal(left,right);
};
__not_equal__ :: (left:u64,right:u64) -> bool {
- return @notEqual(left,right);
+ return @not_equal(left,right);
};
__not_equal__ :: (left:i64,right:i64) -> bool {
- return @notEqual(left,right);
+ return @not_equal(left,right);
};
__not_equal__ :: (left:f16,right:f16) -> bool {
- return @notEqual(left,right);
+ return @not_equal(left,right);
};
__not_equal__ :: (left:f32,right:f32) -> bool {
- return @notEqual(left,right);
+ return @not_equal(left,right);
};
__not_equal__ :: (left:f64,right:f64) -> bool {
- return @notEqual(left,right);
+ return @not_equal(left,right);
};
__not_equal__ :: (left:f128,right:f128) -> bool {
- return @notEqual(left,right);
+ return @not_equal(left,right);
};
__not_equal__ :: (left:bool,right:bool) -> bool {
- return @notEqual(left,right);
+ return @not_equal(left,right);
};
__not_equal__ :: (left:type,right:type) -> bool {
- return @notEqual(left,right);
+ return @not_equal(left,right);
};
__logical_not__ :: (value:bool) -> bool {
diff --git a/code/main.felan b/code/main.felan
index 9047fd2..ec02627 100644
--- a/code/main.felan
+++ b/code/main.felan
@@ -1,7 +1,7 @@
@import("basic.felan");
print :: (comptime t:type,v:t)->void{
- if @typeOf(v) == u8
+ if @type_of(v) == u8
@putc(v);
else
@putc('n');
@@ -25,7 +25,9 @@ fun0 :: () -> void {
fun1 :: ()->void{
a :[20]u8 = undefined;
a[0] = '2';
+ b := a;
@putc(a[0]);
+ @putc(b[0]);
};
fun2 :: ()->void{
@@ -47,9 +49,15 @@ fun3 :: ()->void{
@putc(@cast(a.a,u8)+'0');
};
+/*
+libc :: @c_lib("/lib/libc.so");
+
+putchar : (i8)->void : @c_function(libc,"putchar");
+*/
+
main :: ()->void{
- fun0();
+ // fun0();
fun1();
- fun2();
- fun3();
+ // fun2();
+ //fun3();
};
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: