Working on modules finding bugs

This commit is contained in:
Krzosa Karol
2022-10-14 07:06:55 +02:00
parent 16a2fe659e
commit 62aaffdb83
7 changed files with 37 additions and 71 deletions

View File

@@ -10,6 +10,10 @@ Fix backlog
* a.void[10] * a.void[10]
- [ ] Test and bulletproof any, slices - [ ] Test and bulletproof any, slices
- [ ] Need tests that make sure stuff errors out - [ ] Need tests that make sure stuff errors out
- [ ] String declaration in Language.core this way we can compound create it and access fields and stuff
- [ ] This error is valid error case when someone creates a compound out of basic type C:/AProgramming/cparse/compiler/examples/arms_race/arms_race.core:137 Internal compiler error: Invalid type was passed to the compound expression, should have been an array, struct or slice
result := String{data, filesize}
- [ ] Fix tuple being able to colapse into a single variable
Future features Future features
@@ -28,7 +32,6 @@ Future features
Probably need some UInt Int types and those should be default, target Probably need some UInt Int types and those should be default, target
decides the size of these decides the size of these
- [ ] String declaration in Language.core
- [ ] Way to import and force evaluate #import_lazy #import ? - [ ] Way to import and force evaluate #import_lazy #import ?
Redesign: Redesign:

View File

@@ -94,7 +94,7 @@ Raymarcher_Update :: ()
#import "Base.core" #import "Base.core"
#import "Arena.core" #import "Arena.core"
#import "Windows.core" #import "OS$OS.core"
#import "KERNEL32.core" #import "KERNEL32.core"
#import "GDI32.core" #import "GDI32.core"
#import "USER32.core" #import "USER32.core"

View File

@@ -1,4 +1,4 @@
OS :: #import "Windows.core" OS :: #import "OS$OS.core"
Base :: #import "Base.core" Base :: #import "Base.core"
ArenaDI: U64 ArenaDI: U64

View File

@@ -1,5 +1,5 @@
#import "Arena.core" #import "Arena.core"
OS :: #import "Windows.core" OS :: #import "OS$OS.core"
SizeU :: U64 SizeU :: U64
ClampTopSizeU :: (val: SizeU, max: SizeU): SizeU ClampTopSizeU :: (val: SizeU, max: SizeU): SizeU

View File

@@ -28,6 +28,8 @@ LONG :: S32 // @todo long
UINT :: U32 // @todo uint UINT :: U32 // @todo uint
ATOM :: WORD ATOM :: WORD
LARGE_INTEGER :: S64 LARGE_INTEGER :: S64
PLARGE_INTEGER :: *LARGE_INTEGER
LPOVERLAPPED :: *OVERLAPPED
MEM_COMMIT :: 0x00001000 MEM_COMMIT :: 0x00001000
MEM_RESERVE :: 0x00002000 MEM_RESERVE :: 0x00002000
@@ -64,3 +66,29 @@ QueryPerformanceFrequency :: #foreign (lpFrequency: *LARGE_INTEGER): BOOL
QueryPerformanceCounter :: #foreign (lpFrequency: *LARGE_INTEGER): BOOL QueryPerformanceCounter :: #foreign (lpFrequency: *LARGE_INTEGER): BOOL
Sleep :: #foreign (dwMilliseconds: DWORD) Sleep :: #foreign (dwMilliseconds: DWORD)
OutputDebugStringA :: #foreign (lpOutputString: LPCSTR) OutputDebugStringA :: #foreign (lpOutputString: LPCSTR)
CreateFileW :: #foreign (lpFileName: LPCWSTR, dwDesiredAccess: DWORD, dwShareMode: DWORD, lpSecurityAttributes: LPSECURITY_ATTRIBUTES, dwCreationDisposition: DWORD, dwFlagsAndAttributes: DWORD, hTemplateFile: HANDLE): HANDLE
ReadFile :: #foreign (hFile: HANDLE, lpBuffer: LPVOID, nNumberOfBytesToRead: DWORD, lpNumberOfBytesRead: LPDWORD, lpOverlapped: LPOVERLAPPED): BOOL
CloseHandle :: #foreign (hObject: HANDLE): BOOL
GetFileSizeEx :: #foreign (hFile: HANDLE, lpFileSize: PLARGE_INTEGER)
OVERLAPPED :: struct
Internal: ULONG_PTR
InternalHigh: ULONG_PTR
Pointer: PVOID
hEvent: HANDLE
GENERIC_READ :: 0x80000000
GENERIC_WRITE :: 0x40000000
GENERIC_EXECUTE :: 0x20000000
GENERIC_ALL :: 0x10000000
CREATE_NEW :: 1
CREATE_ALWAYS :: 2
OPEN_EXISTING :: 3
OPEN_ALWAYS :: 4
TRUNCATE_EXISTING :: 5
FILE_SHARE_READ :: 0x00000001
FILE_SHARE_WRITE :: 0x00000002
FILE_SHARE_DELETE :: 0x00000004

View File

@@ -1,65 +0,0 @@
#import "KERNEL32.core"
#import "Base.core"
PAGE_SIZE :: 4096
Memory :: struct
commit : SizeU
reserve: SizeU
data : *U8
ProcessHeap: HANDLE
Allocate :: (size: U64): *void
if ProcessHeap == 0
ProcessHeap = GetProcessHeap()
return HeapAlloc(ProcessHeap, 0, size)
Reserve :: (size: SizeU): Memory
result := Memory{reserve=AlignUp(size, PAGE_SIZE)}
result.data = VirtualAlloc(
flProtect = PAGE_READWRITE,
dwSize = result.reserve,
flAllocationType = MEM_RESERVE,
lpAddress = 0)->*U8
return result
Commit :: (m: *Memory, size: SizeU): Bool
commit_size := AlignUp(size, PAGE_SIZE)
total_commit := m.commit + commit_size
clamped_commit := ClampTopSizeU(total_commit, m.reserve)
adjusted_commit := clamped_commit - m.commit
if adjusted_commit != 0
result := VirtualAlloc(
lpAddress = (m.data + m.commit)->*void,
dwSize = adjusted_commit,
flAllocationType = MEM_COMMIT,
flProtect = PAGE_READWRITE,
)
Assert(result != 0)
m.commit += adjusted_commit
return true
return false
Release :: (m: *Memory)
result := VirtualFree(m.data->*void, 0, MEM_RELEASE)
if result != 0
m.data = 0
m.commit = 0
m.reserve = 0
WriteConsole :: (string: String16)
handle := GetStdHandle(STD_OUTPUT_HANDLE)
WriteConsoleW(handle, string.str->*void, string.len->DWORD, 0, 0)
PerformanceFrequency: F64
PerformanceFrequency_S64: S64
Time :: (): F64
query: LARGE_INTEGER
if PerformanceFrequency_S64 == 0
err := QueryPerformanceFrequency(&PerformanceFrequency_S64)
Assert(err != 0)
PerformanceFrequency = PerformanceFrequency_S64->F64
err := QueryPerformanceCounter(&query)
Assert(err != 0)
result := query->F64 / PerformanceFrequency
return result

View File

@@ -2,7 +2,7 @@
#import "GDI32.core" #import "GDI32.core"
#import "USER32.core" #import "USER32.core"
#import "WINMM.core" #import "WINMM.core"
#import "Windows.core" #import "OS$OS.core"
Platform :: struct Platform :: struct
bitmap: WIN32_Bitmap bitmap: WIN32_Bitmap