Commit Graph

217 Commits

Author SHA1 Message Date
0594542167 Enums: Make EnumDefinition use EnumValues instead of Strings as children.
This allows us to store the index of the enum value along the name. The index can be used to compare two enum values in assembler.

Later on this might be used to enable users of KLang to set arbitrary values as the index of an enum value.
2023-03-20 19:30:07 +01:00
77fe360ffa Evaluate: Implement evaluation for enums. 2023-03-20 19:10:40 +01:00
55a5b8f54a Make sure that a variable that references an enum has to be initialized. 2023-03-16 00:01:31 +01:00
2768b4429c Check that a struct field name of a struct declaration does not shadow an enum or a struct definition. 2023-03-15 23:48:57 +01:00
30dfbbbbba Check that a variable name of variable declaration does not shadow an enum definition. 2023-03-15 23:33:12 +01:00
f77d6a002d Check that a parameter name of a function definition does not shadow an enum definition. 2023-03-15 23:17:43 +01:00
22634c9652 Use LinkedHashMaps and LinkedHashSets to preserve the order of parameters and struct fields. 2023-03-15 23:08:38 +01:00
6fd3f5a2e6 Make it possible to use an enum in an expression (i.e. selecting one of the enum values: Foo.A) 2023-03-15 19:14:04 +01:00
3b928d621b Refactor FunctionDefinition and Parameter context analysis and extend the type check to include enums. 2023-03-15 17:47:58 +01:00
9a58afb550 Implement StructField type checking in ContextAnalysis. 2023-03-15 17:21:35 +01:00
6e4431652c Remove FunctionInformation and replace it with FunctionDefinition. 2023-03-15 16:19:42 +01:00
7af815042b WIP: Add enum support 2023-03-15 15:56:42 +01:00
Marvin Kaiser
49b024b95f 32: Require data type for all asm functions 2020-03-17 16:02:03 +01:00
Marvin Kaiser
982fc6417d 32: Create Meta ASM Structure 2020-03-14 14:14:19 +01:00
221b928d0e push all args onto stack before moving them into the local var to ensure that the function parameters can be used in the tail recursive function call 2020-03-10 12:07:55 +01:00
Marvin Kaiser
8dd0b6cffa Fix pretty printing to file 2020-03-10 11:21:49 +01:00
5a5191612e visit block first because the condition variable may be initialized inside the block 2020-03-09 23:04:55 +01:00
Dennis Kaiser
36a38ee7ab Merge branch '16-tail-recursion-optimization' into 'master'
Resolve "Tail Recursion Optimization"

Closes #16

See merge request mkais001/klang!18
2020-03-09 22:59:38 +01:00
89ec828499 remove unused import 2020-03-09 21:32:40 +01:00
9df0da89ff implement junit tests 2020-03-09 21:32:05 +01:00
35de3c7de4 implement test for tail call optimization 2020-03-09 17:10:50 +01:00
704e6441ca move float result into rax before further processing 2020-03-09 16:09:15 +01:00
cb5ceafbbc implement tail recursion call optimization when generation function call 2020-03-09 15:58:15 +01:00
d96b083c41 add metadata to class fields during visit of function definition nodes 2020-03-09 15:57:37 +01:00
acaa37b3b1 implement detection of tail calls 2020-03-09 15:55:23 +01:00
d1cf626934 add flag to indicate whether this is a tail call 2020-03-09 15:55:01 +01:00
Dennis Kaiser
4f1d009626 Merge branch '24-structs' into 'master'
Resolve "Structs"

Closes #24

See merge request mkais001/klang!17
2020-03-09 14:43:17 +01:00
ac6cb22e45 delete print statement 2020-03-09 14:19:43 +01:00
14f80b46cc remove whitespace 2020-03-09 14:12:19 +01:00
4a9e5c30e1 implement test_expected functions for all types in use 2020-03-09 14:10:35 +01:00
0adb9e22da implement print function for struct addresses and bools 2020-03-09 14:10:03 +01:00
1f8de66751 update the struct test so that field c of the test struct is of type double 2020-03-09 13:49:09 +01:00
fc16663dae make floats work in structs 2020-03-09 13:48:31 +01:00
31330db676 replace DOT with PERIOD 2020-03-09 12:53:26 +01:00
8bb912b377 implement isNumericType 2020-03-09 12:51:28 +01:00
3b5dc43cfb implement test functions 2020-03-09 12:49:09 +01:00
08398e4064 add struct test function prototype 2020-03-09 12:48:31 +01:00
b776ac00e3 call struct tests 2020-03-09 12:48:31 +01:00
9adc48da82 implement struct tests 2020-03-09 12:48:31 +01:00
1403e0a231 fix indices 2020-03-09 12:48:31 +01:00
02666a9459 implement visitors 2020-03-09 12:48:31 +01:00
32cb06cd51 implement method that returns the index of a field by name 2020-03-09 12:48:31 +01:00
e3d8f3cfa7 implement field access visitor 2020-03-09 12:48:31 +01:00
90ed033943 implement fielfd assignment node 2020-03-09 12:48:31 +01:00
ed4c901c6c add field assignment to statements 2020-03-09 12:48:31 +01:00
86e77d1609 update the struct definition when following the path 2020-03-09 12:48:31 +01:00
eb75cc7838 implement GenASM for structs 2020-03-09 12:48:31 +01:00
e2986b3d65 add the struct name to the struct field access expression node 2020-03-09 12:48:31 +01:00
1693eb6426 implement helper functions to determine the struct size and field offsets 2020-03-09 12:48:31 +01:00
622be803cc add structs to the constructor params of GenASM 2020-03-09 12:48:31 +01:00