mirror of https://github.com/tbklang/tlang.git
Tristan B. Velloza Kildaire
493da1a4e7
* Make branches not identical * Removed temporary file * Typecheck - Added `attemptPointerAriehmeticCoercion(Value, Value)` * Typechecker - Moved `attemptPointerAriehmeticCoercion(Value, Value)` to class-level and made privately accessible * Test cases - Added pointer arithmetic in the form of `*(ptr+0)` to `simple_pointer.t` to start testing it out * Typechecker - When handling `BinaryOperatorExpression` call `attemptPointerAriehmeticCoercion(Value, Value)` with both `(vLhsInstr, vRhsInstr)` before we call `vLhsInstr.getInstrType()` and `vRhsInstr.getInstrType()` before `isSameType(vLhsType, vRhsType)`. By doing so we attempt to coerce the types of both instructions if one is a pointer and another is an integer, else do nothing * DGen - When emitting for `PointerDereferenceAssignmentInstruction` we didn't wrap `<expr>` with `()`. So instead of `*(<expre>)` we got `*<expr>` which doesn't work if you're doing pointer arithmetic * Test cases - Added `simple_pointer_cast.t` to test casting (currently broken parsing-wise) DGen - Added a todo for semantic tests for the `simple_pointer_cast.t` test case * Parser - Added a TODO - we need a `parseType()` * Test cases - Removed `simple_cast_complex_type.t` as it is wrong, syntax wise * Test cases - Removed coercion usage, I am only testing the casting here (explicit) * Test cases - Removed `simple_pointer_cast.t` and replace it with `simple_pointer_cast_le.t` which casts the integer pointer to a byte pointer and sets the lowest significant byte (little endian hence at base of integer) to `2+2` DGen - Added semantic test for `simple_pointer_cast_le.t` * Test cases - Update `simple_pointer_cast_le.t` to do some pointer airthmetic at the byte-level of the 32-bit integer DGen - Updated the semantic test code generation for `simple_pointer_cast_le.t` to check for new values * Added 'simple_pointer_cast_le.t' to Emit tests * TypeChecker - Update `isSameType(Type t1, Type t2)` to now handle pointers explicitly and in a recursive manner based on their referred types - This check occurs before the `Integer` type check therefore following the rule of most specific types to least * Test cases - Added new test case `simple_pointer_malloc.t` - Added semantic code test generation for `simple_pointer_malloc.t` - Added `malloc_test.sh` to compile and generate `mem.o` from `mem.c` to link it then with `simple_pointer_malloc.t` - Added `mem.c` external C file to generate the required `mem.o` for linking against `simple_pointer_malloc.t` * Test cases - Updated `malloc_test.sh` to look for any `brk()` system calls and fixed its interpreter path |
||
---|---|---|
.. | ||
typecheck | ||
basic1.t | ||
basic1_invalid.t | ||
basic1_invalid_2.t | ||
basic1_typedeclrationchecking.t | ||
basic1_typedeclrationchecking_grandresolvefail.t | ||
basic2.t | ||
basic2_mega_fucked.t | ||
classTest1.t | ||
class_deps_simple.t | ||
collide_container.t | ||
collide_container_module1.t | ||
collide_container_module2.t | ||
collide_container_non_module.t | ||
collide_member.t | ||
else_if_without_if.pl | ||
else_without_if.pl | ||
file_io.c | ||
mem.c | ||
nested_conditionals.t | ||
precedence_collision_test.t | ||
simple1_module_positive.t | ||
simple1_oop.t | ||
simple2_name_recognition.t | ||
simple_cast.t | ||
simple_class_ref_static.t | ||
simple_conditionals.t | ||
simple_discard.t | ||
simple_do_while.t | ||
simple_extern.t | ||
simple_for_loops.t | ||
simple_function_decls.t | ||
simple_functions.t | ||
simple_functor.t | ||
simple_literals.t | ||
simple_literals2.t | ||
simple_literals3.t | ||
simple_literals4.t | ||
simple_literals5.t | ||
simple_literals6.t | ||
simple_pointer.t | ||
simple_pointer_cast_le.t | ||
simple_pointer_malloc.t | ||
simple_variables.t | ||
simple_variables_class.t | ||
simple_variables_decls_ass.t | ||
simple_variables_only_decs.t | ||
simple_while.t | ||
test3.t |