Core: Conditional compound to fix Msvc, better assert but printf based, Fix tests

This commit is contained in:
Krzosa Karol
2023-04-21 07:55:34 +02:00
parent fb3800a43a
commit e6bf6b680e
13 changed files with 71 additions and 59 deletions

View File

@@ -17,31 +17,31 @@ and make a pointer out of it. Have to be mindful of the lifetime.
*/
storage: [32]S64
len : S64
storage: [32]int
len : int
"+" :: (a: Any, b: Any): Any
result: Any = storage[len++]
if a.type == S64 && b.type == S64
*(result.data->*S64) = *(a.data->*S64) + *(b.data->*S64)
if a.type == int && b.type == int
*(result.data->*int) = *(a.data->*int) + *(b.data->*int)
return result
"+" :: (a: Any, b: S64): Any
"+" :: (a: Any, b: int): Any
result: Any = storage[len++]
if a.type == S64
*(result.data->*S64) = *(a.data->*S64) + b
if a.type == int
*(result.data->*int) = *(a.data->*int) + b
return result
"==" :: (a: Any, b: S64): bool
"==" :: (a: Any, b: int): bool
result := false
if a.type == S64
result = *(a.data->*S64) == b
if a.type == int
result = *(a.data->*int) == b
return result
"==" :: (a: Any, b: Any): bool
result := false
if a.type == S64 && b.type == S64
result = *(a.data->*S64) == *(b.data->*S64)
if a.type == int && b.type == int
result = *(a.data->*int) == *(b.data->*int)
return result
main :: (): int
@@ -49,7 +49,7 @@ main :: (): int
b: Any = 20
c := a + b
Assert(c.type == S64 && c == 30)
Assert(c.type == int && c == 30)
Assert(a+b+a==c+(5+5))
return 0

View File

@@ -16,6 +16,12 @@ Tuple :: struct($A: Type, $B: Type)
a: A
b: B
Triple :: struct($A: Type, $B: Type, $C: Type)
a: A
b: B
c: C
Variant :: union($A: Type, $B: Type, $C: Type)
a: A
b: B
@@ -49,9 +55,6 @@ GetCount :: (a: int): int
// @todo: this is allowed, shouldn't be
// Test :: (a: int, b: int = 10, c: int???)
Test :: (a: C.Triple(int, int, int))
pass
// @todo:
// Add :: (arr: *Array($T), item: T)
// return
@@ -74,7 +77,6 @@ main :: (argc: int, argv: **char): int
sixth: Array(Array(F32))
seventh: Variant(int, F32, S64)
Test({1,2,3})
test_a := int
test := *int
Assert(test_a != test)

View File

@@ -10,6 +10,6 @@ main :: (argc: int, argv: **char): int
a: *int = PushStruct(&arena, int, int)
b: *F32 = PushStruct(&arena, int, F32)
padding := sizeof(int)
Assert(arena.len->S64 == (sizeof(int) + sizeof(F32) + padding))
Assert(arena.len->int == (sizeof(int) + sizeof(F32) + padding))
return 0

View File

@@ -4,8 +4,8 @@ V2 :: #import "MathVec2.core"; Vec2 :: V2.Vec2
Epsilon :: 0.00001
Screen : *U32
X : S64
Y : S64
X : int
Y : int
TotalTime: F64
LightPos := Vec3{2,4,2}
@@ -143,7 +143,7 @@ WinMain :: (hInstance: HINSTANCE, hPrevInstance: HINSTANCE, lpCmdLine: LPSTR, nS
requested_time_per_frame: F64 = 1.0 / 60.0
frame_start_time := Time()
frame_number: S64
frame_number: int
for AppIsRunning
msg: MSG
for PeekMessageW(&msg, window, 0, 0, PM_REMOVE) > 0

View File

@@ -34,15 +34,11 @@ main :: (): int
value_to_be_wrapped := 10
any_value: Any = value_to_be_wrapped
if any_value.type == S64
*(any_value.data->*S64) = 20
elif any_value.type == int
// Void pointers get implicitly cast
value: *int = any_value.data
*value = 30
elif any_value.type == char;; Assert(false, "No bueno")
if any_value.type == int
*(any_value.data->*int) = 20
else ;; Assert(false, "No bueno")
Assert(*(any_value.data->*S64) == 20)
Assert(*(any_value.data->*int) == 20)
letter := GetFirstLetterOfType(value_to_be_wrapped)
Assert(letter == 'I')

View File

@@ -27,12 +27,12 @@ ZeroMemory :: (p: *void, size: SizeU)
// Unicode
//
QuestionMark16 :: 0x003f
String32 :: struct;; str: *U32; len: S64
String16 :: struct;; str: *U16; len: S64
String32 :: struct;; str: *U32; len: int
String16 :: struct;; str: *U16; len: int
Utf8ToUtf32 :: (c: *U8, max_advance: S64): U32, S64
Utf8ToUtf32 :: (c: *U8, max_advance: int): U32, int
out_str: U32
advance: S64
advance: int
if (c[0] & 0b10000000) == 0
if max_advance >= 1
c0 := c[0]->U32
@@ -62,7 +62,7 @@ Utf8ToUtf32 :: (c: *U8, max_advance: S64): U32, S64
return out_str, advance
Utf32ToUtf16 :: (codepoint: U32): [2]U16, S64
Utf32ToUtf16 :: (codepoint: U32): [2]U16, int
str: [2]U16
len := 0
if codepoint < 0x10000

View File

@@ -1,5 +1,5 @@
Vec2I :: struct;; x: S64; y: S64
Vec2I :: struct;; x: int; y: int
Vec2 :: struct;; x: F32; y: F32
"*" :: (a: Vec2, b: Vec2): Vec2 ;; return {a.x*b.x, a.y*b.y}
@@ -16,17 +16,17 @@ Vec2 :: struct;; x: F32; y: F32
"/" :: (a: F32, b: Vec2) : Vec2 ;; return {a/b.x, a/b.y}
"*" :: (a: Vec2I, b: Vec2I): Vec2I ;; return {a.x*b.x, a.y*b.y}
"*" :: (a: Vec2I, b: S64) : Vec2I ;; return {a.x*b, a.y*b}
"*" :: (a: S64, b: Vec2I) : Vec2I ;; return {a*b.x, a*b.y}
"*" :: (a: Vec2I, b: int) : Vec2I ;; return {a.x*b, a.y*b}
"*" :: (a: int, b: Vec2I) : Vec2I ;; return {a*b.x, a*b.y}
"-" :: (a: Vec2I, b: Vec2I): Vec2I ;; return {a.x-b.x, a.y-b.y}
"-" :: (a: Vec2I, b: S64) : Vec2I ;; return {a.x-b, a.y-b}
"-" :: (a: S64, b: Vec2I) : Vec2I ;; return {a-b.x, a-b.y}
"-" :: (a: Vec2I, b: int) : Vec2I ;; return {a.x-b, a.y-b}
"-" :: (a: int, b: Vec2I) : Vec2I ;; return {a-b.x, a-b.y}
"+" :: (a: Vec2I, b: Vec2I): Vec2I ;; return {a.x+b.x, a.y+b.y}
"+" :: (a: Vec2I, b: S64) : Vec2I ;; return {a.x+b, a.y+b}
"+" :: (a: S64, b: Vec2I) : Vec2I ;; return {a+b.x, a+b.y}
"+" :: (a: Vec2I, b: int) : Vec2I ;; return {a.x+b, a.y+b}
"+" :: (a: int, b: Vec2I) : Vec2I ;; return {a+b.x, a+b.y}
"/" :: (a: Vec2I, b: Vec2I): Vec2I ;; return {a.x/b.x, a.y/b.y}
"/" :: (a: Vec2I, b: S64) : Vec2I ;; return {a.x/b, a.y/b}
"/" :: (a: S64, b: Vec2I) : Vec2I ;; return {a/b.x, a/b.y}
"/" :: (a: Vec2I, b: int) : Vec2I ;; return {a.x/b, a.y/b}
"/" :: (a: int, b: Vec2I) : Vec2I ;; return {a/b.x, a/b.y}
FloorVec2ToVec2I :: (a: Vec2): Vec2I ;; return {floorf(a.x)->S64, floorf(a.y)->S64}
CastVec2ToVec2I :: (a: Vec2): Vec2I ;; return {a.x->S64, a.y->S64}
FloorVec2ToVec2I :: (a: Vec2): Vec2I ;; return {floorf(a.x)->int, floorf(a.y)->int}
CastVec2ToVec2I :: (a: Vec2): Vec2I ;; return {a.x->int, a.y->int}

View File

@@ -26,8 +26,8 @@ MU :: struct
os: Platform
MUWindow :: struct
x: S64
y: S64
x: int
y: int
sizef: Vec2
size: Vec2I
resizable: bool
@@ -55,7 +55,7 @@ Mouse :: struct
left: KeyState
right: KeyState
middle: KeyState
wheel: S64
wheel: int
#import "Base.core"
#import "MathF32.core"

View File

@@ -66,8 +66,8 @@ GetWindowSize :: (window: HWND): Vec2I
result: Vec2I
window_rect: RECT
GetClientRect(window, &window_rect)
result.x = (window_rect.right - window_rect.left)->S64
result.y = (window_rect.bottom - window_rect.top)->S64
result.x = (window_rect.right - window_rect.left)->int
result.y = (window_rect.bottom - window_rect.top)->int
return result
GetWindowPos :: (window: HWND): Vec2I
@@ -94,7 +94,7 @@ SetWindowPosition :: (window: HWND, style: DWORD, pos: Vec2I): void
SetWindowPos(window, 0, rect.left, rect.top, 0, 0, SWP_NOACTIVATE | SWP_NOZORDER | SWP_NOSIZE)
StartMultimedia :: (
x: S64 = 1280, y: S64 = 720,
x: int = 1280, y: int = 720,
title: String = "Hello people!",
window_resizable: bool = false,
target_ms: F64 = 0.0166666