|
|
@@ -1,26 +1,15 @@
|
|
|
# Zelkel
|
|
|
+Compiled object-oriented programming language
|
|
|
|
|
|
-TODO: tomorrow, implement more macro stuff
|
|
|
-```zk
|
|
|
-val test: i64 = 1 + 2*3 + 3*4
|
|
|
-
|
|
|
-#llvm(
|
|
|
- "%call = call i32 (ptr, ...) @printf(ptr @int.fmt, i64 %{:irname})",
|
|
|
- test // Test variable's irname is inputted inplace or {:irname} in the llvm ir
|
|
|
-)
|
|
|
-```
|
|
|
-
|
|
|
-## Goals
|
|
|
+## Goals
|
|
|
- [ ] Self-hosted
|
|
|
- [ ] Reference-counting garbage collector
|
|
|
- [ ] Same-thread assync functions
|
|
|
|
|
|
## TODO
|
|
|
-- [x] Scope checking and stuff in parser
|
|
|
-- [ ] Parser should generate all names (unique), struct indexes, etc for codegen, this should also be in the scope
|
|
|
- - [x] Multi pass parser: first scope/symbol collection (what i've been doing now), then check if it makes sense :)
|
|
|
-- [x] Functions may kind of have same name but different arguments, but the scope stuff is using a dict[str, Value] so it is not tracked, the resolve_function() should work for this though, so scope stuff needs work.
|
|
|
-- [x] Need to know the value type of an expression in codegen, i think adding this in the validator to the ast is the right move...
|
|
|
+- [] Macros
|
|
|
+ - [ ] Macro definition
|
|
|
+ - [x] Macro calling and inline llvm
|
|
|
- Types:
|
|
|
- With no * or & before type it will be "dynamic", the compiler figures out if it's the pointer or the value that is being used
|
|
|
- explicit value with * or explicit pointer with &. You can also use & and * on a "dynamic" type to get both, "dynamic" types are both at the same time, but in reality they are probably the pointer and then you know both
|