a136a377ce
change symbol table to use pointers to heap allocated symbols
2019-09-28 13:17:11 -03:00
93811c986d
codegen: use Parameter.llvm_alloca
2019-09-28 12:46:23 -03:00
61c8493484
add basics of stack-stored arguments
...
this requires some changes regarding the const-ability of the passed
nodes into codegen.
2019-09-28 11:40:56 -03:00
58713b20e3
add llvmvalueref to Parameter
2019-09-28 11:32:36 -03:00
178acc656f
codegen: allow for mutable statements
...
- ast: add llvm_alloca llvmvalueref pointer in VarDeclStmt
2019-09-28 11:30:21 -03:00
d235ce0d13
add codegen for allocating vardecls onto stack (not init yet)
...
codegen pass needs type information about the variable. thankfully,
analyze pass already did the hard work for it, and scope info has types
of all its declared names. we use that info to generate the alloca
to have information about which current scope we are, we add a "child
index" to scopes so we can repoint current context at them instead of
bumpScope(), which always creates new, empty ones.
initializer exprs are next
2019-09-27 22:36:35 -03:00
77c88fad34
update readme with usage instructions
2019-09-27 21:23:11 -03:00
dfb7989123
add necessary hello.c code as we dont have linking step
2019-09-27 21:22:03 -03:00
849bbc0e94
add support for resolving parameters in function body
2019-09-27 20:39:16 -03:00
3f48be3420
codegen: prepare for variable emitting
2019-09-27 17:18:38 -03:00
7def9abc5a
add "variable metadata"
...
this is inserted in the analysis pass into a map from expr ptrs to
metadata in the compilation context itself, this enables codegen to
fetch that metadata with the expr pointer
the other approach was embedding it into the variable expr itself (as
seen by VariableExpr), but that causes a compiler crash
2019-09-27 17:08:01 -03:00
362fc7e3ef
analysis: add name type resolution
...
this only adds resolution for the types. for the actual metadata, such
as e.g parameters, that isn't available, so codegen isn't helped by
this.
2019-09-27 15:12:30 -03:00
4346636cfa
analysis: add check for call expr's arguments
2019-09-27 14:31:59 -03:00
3f94082477
analyze: make VarDecl statements insert symbols to current scope
2019-09-27 14:07:42 -03:00
466243fc2b
add checking of numeric types around boolean operators
2019-09-27 13:49:53 -03:00
68b9855309
remove _start from examples/hello.ry
2019-09-27 13:40:05 -03:00
86c7f7dd6a
comp_ctx: remove Environment in favor of UnderlyingTypeMap
2019-09-27 13:39:04 -03:00
a081de93ce
comp_ctx: remove isSymUnTypeEnumSubset
2019-09-27 12:08:25 -03:00
7e41d03eb9
add proper Integer32 and Integer64 literals
2019-09-27 12:07:20 -03:00
76d888bde8
analysis: create err ctx buffer on init()
...
- do better error message for resolveGlobalType
2019-09-27 10:47:34 -03:00
c3d3486163
rename types.zig to analysis.zig
2019-09-27 00:00:06 -03:00
2cb328c3f9
analysis: ensure Get.name exists in enum
2019-09-26 22:27:05 -03:00
6543884366
analysis: add check of composite types (structs and enums)
...
- analysis: add bool check for loop condition exprs
2019-09-26 22:22:11 -03:00
dfb954c39c
analysis: insert "incomplete" function as soon as possible
...
by inserting it before we analyze statements, we allow ourselves to
analyze statements *with the data we already have*, for example, we can
now check the return statements' type, and see if it matches with the
functions' declared return type.
this is done via setting CompilationContext.cur_function on insertFn()
- don't just ignore function analysis if its incomplete, do an error
2019-09-26 22:00:32 -03:00
093a8003b6
ast_printer: fix children printing
...
- add scope ids for debug purposes
- add children to parent on Scope.createChild
- types: add validation of if's condition expr type
- types: add scopes to ifs
2019-09-26 21:36:26 -03:00
fc9f5d9ce0
add get expr analysis
...
- rename GetExpr.struc to GetExpr.target
2019-09-26 18:03:39 -03:00
64e39a6f1e
ast_printer: print scopes inside functions
...
- comp_ctx: add children attr for debug info
2019-09-26 16:58:57 -03:00
97c2437d97
add basic business logic for scopes
2019-09-26 16:04:11 -03:00
e91c2dfdaf
fix errs
2019-09-26 14:32:23 -03:00
ae27995eb6
add rudimentary type analysis for return, if, loop
2019-09-26 14:23:15 -03:00
8065d0d905
s/nodePass/stmtPass
2019-09-26 00:12:47 -03:00
bf035abadf
add lots of TODOs for variables and type analysis of statements
...
- comp_ctx: replace Function.symbols to Function.env
2019-09-26 00:11:48 -03:00
45275d73db
change variable declarations to statements
...
doing them as expressions was a hack since no 'var' keyword,
also, yeet the := operator from the parser.
2019-09-25 22:22:13 -03:00
e69451cdd9
example: function calls can't happen on consts yet
...
- add suggestion to make it work as TODO
2019-09-25 18:10:17 -03:00
0b72462954
codegen: add emitting of call exprs
...
- codegen: add llvm value ref table to more easily fetch function
values
- comp_ctx: add fetchGlobalSymbol
- types: use ctx.fetchGlobalSymbol
2019-09-25 18:05:56 -03:00
5036be02e3
add rudimentary return type analysis for call exprs
2019-09-25 17:17:47 -03:00
04c624e210
codegen: add emitting of const declarations
2019-09-25 17:05:37 -03:00
cb8908dc80
add type analysis for consts
...
- add the basics of recursive type resolving for expressions
- set err context for enum
2019-09-25 14:34:32 -03:00
1040eef79f
codegen: add emitting for enum get expressions
2019-09-25 12:28:22 -03:00
5188dac3c0
add type analysis of enums
2019-09-25 11:59:36 -03:00
0b0a8896bb
add basic resolution of enums to llvm types
...
- pass ctx to codegen
- add better type solver error for unhandled nodes
2019-09-25 11:29:47 -03:00
6b3d54aed7
embed FnDecl inside FunctionSymbol for correct param order
2019-09-25 10:53:10 -03:00
e2cca03d52
add type resolving for structs and fn params
...
- add a printer for the symbol table
- add error contexts to type pass
2019-09-25 00:26:30 -03:00
8afab8e4ed
comp_ctx: add FunctionSymbol.findSymbol
...
- add Variable symbol
2019-09-24 23:09:00 -03:00
bfe9f4fe0d
s/testfile/output.ll
2019-09-24 18:59:00 -03:00
9e80ad4c23
fix if statement emitting
...
- don't emit br instructions (or any other) if branch emits ret
- remove phi node (ifs are statements, not exprs)
- emit to testfile (even if ir is broken)
2019-09-24 18:49:35 -03:00
c1d6939c43
add the rest of (currently nonfunctional) emitting of if stmts
...
- add compilation context and basics of type solver
2019-09-24 17:47:17 -03:00
1bb1fb813d
add basics of if statement emitting
...
- add util mkLLVMBool
- add left/right paren to if statements
- lowkey fix for statements' semicolon
2019-09-24 14:12:37 -03:00
1ac63cdbef
resolve llvm types for function parameters
2019-09-24 13:32:00 -03:00
e25621350a
fix boolean operators
...
- remove Logical expressions
- add basic token return type to LLVMTypeRef converter
- add codegen for Bool literals
- fix "and" and "or" being identified as identifiers
2019-09-24 13:23:23 -03:00