Skip to content

Commit 581d363

Browse files
committed
feat: Add type checker implementation, AST definitions, and initial benchmark scripts.
1 parent 7ef3e41 commit 581d363

5 files changed

Lines changed: 30 additions & 14 deletions

File tree

benchmarks/fibonacci.prox

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,14 +1,14 @@
11
// benchmarks/fibonacci.prox
22
// Stress Test: Recursion & Function Calls
33

4-
fun fib(n) {
4+
func fib(n) {
55
if (n < 2) return n;
66
return fib(n - 1) + fib(n - 2);
77
}
88

99
print("Starting Fib(30)...");
10-
start = clock();
11-
res = fib(30);
12-
end = clock();
10+
let start = clock();
11+
let res = fib(30);
12+
let end = clock();
1313
print("Result: " + res);
1414
print("Time: " + (end - start));

benchmarks/loop_math.prox

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -4,14 +4,14 @@
44
const ITERATIONS = 10000000;
55
print("Starting Loop Math...");
66

7-
start = clock();
8-
sum = 0;
9-
i = 0;
7+
let start = clock();
8+
let sum = 0;
9+
let i = 0;
1010
while (i < ITERATIONS) {
1111
sum = sum + i;
1212
i = i + 1;
1313
}
14-
end = clock();
14+
let end = clock();
1515

1616
print("Sum: " + sum);
1717
print("Time: " + (end - start));

benchmarks/string_concat.prox

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -4,14 +4,14 @@
44
const ITERATIONS = 20000;
55
print("Starting String Concat...");
66

7-
start = clock();
8-
s = "";
9-
i = 0;
7+
let start = clock();
8+
let s = "";
9+
let i = 0;
1010
while (i < ITERATIONS) {
1111
s = s + ".";
1212
i = i + 1;
1313
}
14-
end = clock();
14+
let end = clock();
1515

1616
print("String Length: " + len(s));
1717
print("Time: " + (end - start));

src/compiler/parser/ast.c

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -323,6 +323,11 @@ Stmt *createVarDeclStmt(const char *name, Expr *init, bool is_const, int line,
323323
stmt->as.var_decl.name = strdup(name);
324324
stmt->as.var_decl.initializer = init;
325325
stmt->as.var_decl.is_const = is_const;
326+
stmt->as.var_decl.type.kind = TYPE_UNKNOWN;
327+
stmt->as.var_decl.type.name = NULL;
328+
stmt->as.var_decl.type.returnType = NULL;
329+
stmt->as.var_decl.type.paramTypes = NULL;
330+
stmt->as.var_decl.type.paramCount = 0;
326331
return stmt;
327332
}
328333

src/compiler/type_checker.c

Lines changed: 13 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -436,8 +436,19 @@ void initTypeChecker(TypeChecker *checker) {
436436
checker->currentScope = NULL;
437437
beginScope(checker); // Global Scope
438438

439-
// Define Builtins?
440-
// defineSymbol(checker, "print", ...);
439+
// Define Builtins
440+
441+
// clock() -> Float
442+
TypeInfo clockType = createType(TYPE_FUNCTION);
443+
clockType.returnType = (TypeInfo*)malloc(sizeof(TypeInfo));
444+
*clockType.returnType = createType(TYPE_FLOAT);
445+
defineSymbol(checker, "clock", clockType);
446+
447+
// len(str) -> Float
448+
TypeInfo lenType = createType(TYPE_FUNCTION);
449+
lenType.returnType = (TypeInfo*)malloc(sizeof(TypeInfo));
450+
*lenType.returnType = createType(TYPE_FLOAT);
451+
defineSymbol(checker, "len", lenType);
441452
}
442453

443454
bool checkTypes(TypeChecker *checker, StmtList *statements) {

0 commit comments

Comments
 (0)