diff --git a/lang/README.md b/lang/README.md index a1301fe..e853f92 100644 --- a/lang/README.md +++ b/lang/README.md @@ -1059,16 +1059,21 @@ main := fn(): uint { #### null_check_test ```hb -main := fn(): uint { - ptr := @as(?^uint, null) +get_ptr := fn(): ?^uint { value := 0 - ptr = &value + return &value +} + +main := fn(): void { + ptr := get_ptr() if ptr == null { - return 1 + return } - return *ptr + loop { + *ptr += 1 + } } ``` diff --git a/lang/tests/son_tests_inlining_loops.txt b/lang/tests/son_tests_inlining_loops.txt index e69de29..f02533a 100644 --- a/lang/tests/son_tests_inlining_loops.txt +++ b/lang/tests/son_tests_inlining_loops.txt @@ -0,0 +1,8 @@ +main: + LRA r2, r0, :x + LI64 r1, 0d + ST r1, r2, 0a, 8h + JALA r0, r31, 0a +code size: 57 +ret: 0 +status: Ok(()) diff --git a/lang/tests/son_tests_null_check_test.txt b/lang/tests/son_tests_null_check_test.txt index e69de29..c9727f8 100644 --- a/lang/tests/son_tests_null_check_test.txt +++ b/lang/tests/son_tests_null_check_test.txt @@ -0,0 +1,6 @@ +test.hb:15:4: can't prove the value is not 'null', use '@unwrap()' if you believe compiler is stupid, or explicitly check for null and handle it ('if == null { /* handle */ } else { /* use opt */ }') + *ptr += 1 + ^ +test.hb:15:4: can't prove the value is not 'null', use '@unwrap()' if you believe compiler is stupid, or explicitly check for null and handle it ('if == null { /* handle */ } else { /* use opt */ }') + *ptr += 1 + ^