From 13217d97b8ee66c5237763a311c654a8dd8a5ea5 Mon Sep 17 00:00:00 2001 From: Brendan Hansen Date: Sat, 22 Aug 2020 23:28:48 -0500 Subject: [PATCH] adding more core functionality and bugfixes --- core/string.onyx | 164 +++++++++++- core/wasi.onyx | 581 ++++++++++++++++++++++--------------------- docs/plan | 8 +- onyx | Bin 420696 -> 420952 bytes progs/wasi_test.onyx | 116 ++++++--- src/onyxparser.c | 10 + src/onyxutils.c | 1 + src/onyxwasm.c | 11 + 8 files changed, 576 insertions(+), 315 deletions(-) diff --git a/core/string.onyx b/core/string.onyx index 8f58d66b..4ff1f2fd 100644 --- a/core/string.onyx +++ b/core/string.onyx @@ -1,17 +1,18 @@ package core -use package builtin { string } +use package builtin { string, cstring } use package memory +use package wasi Buffer :: struct { data : rawptr = null; - length : u32 = 0; + len : u32 = 0; } -string_make :: proc #overloaded { string_make_from_u8 } +string_make :: proc #overloaded { string_make_from_cstring } #private -string_make_from_u8 :: proc (s: ^u8) -> string { +string_make_from_cstring :: proc (s: cstring) -> string { len :: string_length(s); return string.{ len = len, data = s }; @@ -51,3 +52,158 @@ string_concat :: proc (a: Allocator, s1: string, s2: string) -> string { string_free :: proc (a: Allocator, s: string) do free(a, s.data); +StringSplitResult :: struct { + tokens: ^string; + count: u32; +} + +string_split :: proc (a: Allocator, str: string, delim: u8) -> StringSplitResult { + delim_count := 0; + for i: 0, str.len do if str.data[i] == delim do delim_count += 1; + + strarr := cast(^string) alloc(a, sizeof string * (delim_count + 1)); + + curr_str := 0; + begin := str.data; + + for i: 0, str.len { + if str.data[i] == delim { + strarr[curr_str] = string.{ begin, cast(u32) ^str.data[i] - cast(u32) begin }; + begin = ^str.data[i + 1]; + curr_str += 1; + } + } + + strarr[curr_str] = string.{ begin, cast(u32) str.data + str.len - cast(u32) begin }; + + return StringSplitResult.{ strarr, delim_count + 1 }; +} + + + +StringBuilder :: struct { + // FIX(nested-structs): This should not be a pointer eventually. + // Currently nested structures cannot be passed as arguments or returned from procedures. + // When this issue is fixed, change this to Allocator. + alloc : ^Allocator; + + data : ^u8 = null; + len : u32 = 0; + cap : u32 = 0; +} + +string_builder_make :: proc (a: ^Allocator, initial_cap: u32) -> StringBuilder { + data: ^u8 = null; + + if initial_cap > 0 { + data = cast(^u8) alloc(*a, initial_cap); + } + + return StringBuilder.{ + alloc = a, + data = data, + cap = initial_cap, + }; +} + +string_builder_add_string :: proc (use sb: ^StringBuilder, str: string) -> ^StringBuilder { + len_total :: len + str.len; + + if cap >= len_total { + for i: 0, str.len do data[len + i] = str.data[i]; + len += str.len; + return sb; + } + + new_cap := cap; + while new_cap < len_total do new_cap <<= 1; + + new_data := cast(^u8) resize(*alloc, data, new_cap); + if new_data == null do return sb; + + data = new_data; + cap = new_cap; + + for i: 0, str.len do data[len + i] = str.data[i]; + len += str.len; + return sb; +} + +string_builder_add_cstring :: proc (use sb: ^StringBuilder, cstr: cstring) -> ^StringBuilder { + s := string_make(cstr); + return string_builder_add_string(sb, s); +} + +u64_to_string :: proc (n_: u64, base: u64, buf: Buffer) -> string { + n := n_; + + str :: cast(^u8) buf.data; + for i: 0, buf.len do str[i] = #char "\0"; + + c := cast(^u8) ^str[buf.len - 1]; + len := 0; + + s :: "0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz+/"; + + if n == 0l { + *c = #char "0"; + len += 1; + c -= 1; + } else { + while n > 0l { + m :: n % base; + + *c = s.data[cast(u32) m]; + len += 1; + c -= 1; + + n /= base; + } + } + + if base == 16l { + *c = #char "x"; + len += 1; + c -= 1; + *c = #char "0"; + len += 1; + c -= 1; + } + + if base == 2l { + *c = #char "b"; + len += 1; + c -= 1; + *c = #char "0"; + len += 1; + c -= 1; + } + + return string.{ data = c + 1, len = len }; +} + +string_builder_add_u64 :: proc (use sb: ^StringBuilder, n: u64) -> ^StringBuilder { + return string_builder_add_u64_with_base(sb, n, 10l); +} + +string_builder_add_u64_with_base :: proc (use sb: ^StringBuilder, n: u64, base: u64) -> ^StringBuilder { + buf : [256] u8; + s := u64_to_string(n, 10l, Buffer.{ cast(^u8) buf, 256 }); + return string_builder_add_string(sb, s); +} + +string_builder_append :: proc #overloaded { + string_builder_add_string, + string_builder_add_cstring, + string_builder_add_u64_with_base, + string_builder_add_u64, +} + +string_builder_to_string :: proc (use sb: ^StringBuilder) -> string { + return string.{ data, len }; +} + +string_builder_clear :: proc (use sb: ^StringBuilder) -> ^StringBuilder { + len = 0; + return sb; +} \ No newline at end of file diff --git a/core/wasi.onyx b/core/wasi.onyx index d26d9e96..c146415e 100644 --- a/core/wasi.onyx +++ b/core/wasi.onyx @@ -1,134 +1,138 @@ package wasi +use package main as main +use package builtin { string } +use package memory + Size :: #type u32; Filesize :: #type u64; Timestamp :: #type u64; ClockID :: enum (u32) { - Realtime :: 0x00; - Monotonic :: 0x01; - ProcessCPUTimeID :: 0x02; - ThreadCPUTimeID :: 0x03; + Realtime :: 0x00; + Monotonic :: 0x01; + ProcessCPUTimeID :: 0x02; + ThreadCPUTimeID :: 0x03; } Errno :: enum (u16) { - Success :: 0x00; - TooBig :: 0x01; - Access :: 0x02; - AddrInUse :: 0x03; - AddrNotAvail :: 0x04; - AFNoSupport :: 0x05; - Again :: 0x06; - Already :: 0x07; - BadFile :: 0x08; - BadMsg :: 0x09; - Busy :: 0x0a; - Canceled :: 0x0b; - Child :: 0x0c; - ConnAborted :: 0x0d; - ConnRefused :: 0x0e; - ConnReset :: 0x0f; - DeadLock :: 0x10; - DestAddrReq :: 0x11; - Domain :: 0x12; - DQUOT :: 0x13; - Exist :: 0x14; - Fault :: 0x15; - FileTooBig :: 0x16; - HostUnreach :: 0x17; - IdentRemoved :: 0x18; - IllegalSeq :: 0x19; - InProgress :: 0x1a; - Interrupt :: 0x1b; - Invalid :: 0x1c; - IO :: 0x1d; - IsConnection :: 0x1e; - IsDirectory :: 0x1f; - Loop :: 0x20; - MFile :: 0x21; - MLink :: 0x22; - MsgSize :: 0x23; - MultiHop :: 0x24; - NameTooLong :: 0x25; - NetDown :: 0x26; - NetReset :: 0x27; - NetUnreach :: 0x28; - NFile :: 0x29; - NoBufs :: 0x2a; - NoDev :: 0x2b; - NoEntry :: 0x2c; - NoExec :: 0x2d; - NoLock :: 0x2e; - NoLink :: 0x2f; - NoMemory :: 0x30; - NoMsg :: 0x31; - NoProtoOpt :: 0x32; - NoSpace :: 0x33; - NoSys :: 0x34; - NotConn :: 0x35; - NotDir :: 0x36; - NotEmpty :: 0x37; - NotRecover :: 0x38; - NotSock :: 0x39; - NotSupported :: 0x3a; - NoTTY :: 0x3b; - NXIO :: 0x3c; - Overflow :: 0x3d; - OwnerDead :: 0x3e; - Permission :: 0x3f; - Pipe :: 0x40; - Protocol :: 0x41; - ProtoNoSup :: 0x42; - Prototype :: 0x43; - Range :: 0x44; - ReadonlyFS :: 0x45; - SeekPipe :: 0x46; - Search :: 0x47; - Stale :: 0x48; - Timedout :: 0x49; - TextBusy :: 0x4a; - XDev :: 0x4b; - - NotCapable :: 0x4c; + Success :: 0x00; + TooBig :: 0x01; + Access :: 0x02; + AddrInUse :: 0x03; + AddrNotAvail :: 0x04; + AFNoSupport :: 0x05; + Again :: 0x06; + Already :: 0x07; + BadFile :: 0x08; + BadMsg :: 0x09; + Busy :: 0x0a; + Canceled :: 0x0b; + Child :: 0x0c; + ConnAborted :: 0x0d; + ConnRefused :: 0x0e; + ConnReset :: 0x0f; + DeadLock :: 0x10; + DestAddrReq :: 0x11; + Domain :: 0x12; + DQUOT :: 0x13; + Exist :: 0x14; + Fault :: 0x15; + FileTooBig :: 0x16; + HostUnreach :: 0x17; + IdentRemoved :: 0x18; + IllegalSeq :: 0x19; + InProgress :: 0x1a; + Interrupt :: 0x1b; + Invalid :: 0x1c; + IO :: 0x1d; + IsConnection :: 0x1e; + IsDirectory :: 0x1f; + Loop :: 0x20; + MFile :: 0x21; + MLink :: 0x22; + MsgSize :: 0x23; + MultiHop :: 0x24; + NameTooLong :: 0x25; + NetDown :: 0x26; + NetReset :: 0x27; + NetUnreach :: 0x28; + NFile :: 0x29; + NoBufs :: 0x2a; + NoDev :: 0x2b; + NoEntry :: 0x2c; + NoExec :: 0x2d; + NoLock :: 0x2e; + NoLink :: 0x2f; + NoMemory :: 0x30; + NoMsg :: 0x31; + NoProtoOpt :: 0x32; + NoSpace :: 0x33; + NoSys :: 0x34; + NotConn :: 0x35; + NotDir :: 0x36; + NotEmpty :: 0x37; + NotRecover :: 0x38; + NotSock :: 0x39; + NotSupported :: 0x3a; + NoTTY :: 0x3b; + NXIO :: 0x3c; + Overflow :: 0x3d; + OwnerDead :: 0x3e; + Permission :: 0x3f; + Pipe :: 0x40; + Protocol :: 0x41; + ProtoNoSup :: 0x42; + Prototype :: 0x43; + Range :: 0x44; + ReadonlyFS :: 0x45; + SeekPipe :: 0x46; + Search :: 0x47; + Stale :: 0x48; + Timedout :: 0x49; + TextBusy :: 0x4a; + XDev :: 0x4b; + + NotCapable :: 0x4c; } Rights :: enum #flags (u64) { - DataSync; - Read; - Seek; - FdStatSetFlags; - Sync; - Tell; - Write; - Advise; - Allocate; - PathCreateDirectory; - PathCreateFile; - PathLinkSource; - PathLinkTarget; - PathOpen; - ReadDir; - PathReadlink; - PathRenameSource; - PathRenameTarget; - PathFilestatGet; - PathFilestateSetSize; - PathFilestateSetTimes; - FilestatGet; - FilestatSetSize; - FilestatSetTimes; - PathSymlink; - PathRemoveDirectory; - PathUnlinkFile; - PollFDReadWrite; - SockShutdown; + DataSync; + Read; + Seek; + FdStatSetFlags; + Sync; + Tell; + Write; + Advise; + Allocate; + PathCreateDirectory; + PathCreateFile; + PathLinkSource; + PathLinkTarget; + PathOpen; + ReadDir; + PathReadlink; + PathRenameSource; + PathRenameTarget; + PathFilestatGet; + PathFilestateSetSize; + PathFilestateSetTimes; + FilestatGet; + FilestatSetSize; + FilestatSetTimes; + PathSymlink; + PathRemoveDirectory; + PathUnlinkFile; + PollFDReadWrite; + SockShutdown; } FileDescriptor :: #type i32; IOVec :: struct { - buf : ^u8; - len : u32; + buf : ^u8; + len : u32; } CIOVec :: #type IOVec; // Constant IOVec @@ -136,9 +140,9 @@ CIOVec :: #type IOVec; // Constant IOVec FileDelta :: #type i64; Whence :: enum (u8) { - Set :: 0x00; - Cur :: 0x01; - End :: 0x02; + Set :: 0x00; + Cur :: 0x01; + End :: 0x02; } DirCookie :: #type u64; @@ -146,205 +150,205 @@ DirNameLen :: #type u32; INode :: #type u64; Filetype :: enum (u8) { - Unknown :: 0x00; - BlockDevice :: 0x01; - CharDevice :: 0x02; - Directory :: 0x03; - RegularFile :: 0x04; - SocketDgram :: 0x05; - SocketStream :: 0x06; - SymLink :: 0x07; + Unknown :: 0x00; + BlockDevice :: 0x01; + CharDevice :: 0x02; + Directory :: 0x03; + RegularFile :: 0x04; + SocketDgram :: 0x05; + SocketStream :: 0x06; + SymLink :: 0x07; } DirEnt :: struct { - d_next : DirCookie; - d_ino : INode; - d_namlen : DirNameLen; - d_type : Filetype; + d_next : DirCookie; + d_ino : INode; + d_namlen : DirNameLen; + d_type : Filetype; } Advice :: enum (u8) { - Normal :: 0x00; - Sequential :: 0x01; - Random :: 0x02; - WillNeed :: 0x03; - DontNeed :: 0x04; - NoReuse :: 0x05; + Normal :: 0x00; + Sequential :: 0x01; + Random :: 0x02; + WillNeed :: 0x03; + DontNeed :: 0x04; + NoReuse :: 0x05; } FDFlags :: enum #flags (u16) { - Append; - DSync; - NonBlock; - RSync; - Sync; + Append; + DSync; + NonBlock; + RSync; + Sync; } FDStat :: struct { - fs_filetype : Filetype; - fs_flags : FDFlags; - fs_rights_base : Rights; - fs_rights_inheriting : Rights; + fs_filetype : Filetype; + fs_flags : FDFlags; + fs_rights_base : Rights; + fs_rights_inheriting : Rights; } Device :: #type u64; FSTFlags :: enum #flags (u16) { - ATIM; - ATIM_NOW; - MTIM; - MTIM_NOW; + ATIM; + ATIM_NOW; + MTIM; + MTIM_NOW; } LookupFlags :: enum #flags (u32) { - SymLinkFollow; + SymLinkFollow; } OFlags :: enum #flags (u16) { - Creat; - Directory; - FailIfExists; - Trunc; + Creat; + Directory; + FailIfExists; + Trunc; } LinkCount :: #type u64; FileStat :: struct { - dev : Device; - ino : INode; - filetype : Filetype; - nlink : LinkCount; - size : Filesize; - atim : Timestamp; - mtim : Timestamp; - ctim : Timestamp; + dev : Device; + ino : INode; + filetype : Filetype; + nlink : LinkCount; + size : Filesize; + atim : Timestamp; + mtim : Timestamp; + ctim : Timestamp; } Userdata :: #type u64; EventType :: enum (u8) { - Clock; - FDRead; - FDWrite; + Clock; + FDRead; + FDWrite; } EventRWFlags :: enum #flags (u16) { - ReadWriteHangUp; + ReadWriteHangUp; } EventFDReadWrite :: struct { - nbytes : Filesize; - flags : EventRWFlags; + nbytes : Filesize; + flags : EventRWFlags; } Event :: struct { - userdata : Userdata; - error : Errno; - type : EventType; - fd_readwrite : EventFDReadWrite; + userdata : Userdata; + error : Errno; + type : EventType; + fd_readwrite : EventFDReadWrite; } SubClockFlags :: enum #flags (u16) { - ClockAbsTime; + ClockAbsTime; } SubscriptionClock :: struct { - id : ClockID; - timeout : Timestamp; - precision : Timestamp; - flags : SubClockFlags; + id : ClockID; + timeout : Timestamp; + precision : Timestamp; + flags : SubClockFlags; } SubscriptionFDReadWrite :: struct { - file_descriptor : FileDescriptor; + file_descriptor : FileDescriptor; } SubscriptionTagged :: struct { - tag : EventType; + tag : EventType; - u : struct #union { - clock : SubscriptionClock; - fd_read : SubscriptionFDReadWrite; - fd_write : SubscriptionFDReadWrite; - }; + u : struct #union { + clock : SubscriptionClock; + fd_read : SubscriptionFDReadWrite; + fd_write : SubscriptionFDReadWrite; + }; } Subscription :: struct { - userdata : Userdata; + userdata : Userdata; - u : SubscriptionTagged; + u : SubscriptionTagged; } ExitCode :: #type u32; Signal :: enum (u8) { - None; - Hup; - Int; - Quit; - Ill; - Trap; - Abrt; - Bus; - Fpe; - Kill; - USR1; - Segv; - USR2; - Pipe; - Alrm; - Term; - Chld; - Stop; - Tstp; - Ttin; - Urg; - Xcpu; - Xfsz; - Vtalrm; - Prof; - Winch; - Poll; - Pwr; - Sys; + None; + Hup; + Int; + Quit; + Ill; + Trap; + Abrt; + Bus; + Fpe; + Kill; + USR1; + Segv; + USR2; + Pipe; + Alrm; + Term; + Chld; + Stop; + Tstp; + Ttin; + Urg; + Xcpu; + Xfsz; + Vtalrm; + Prof; + Winch; + Poll; + Pwr; + Sys; } RIFlags :: enum #flags (u16) { - RecvPeek; - RecvWaitAll; + RecvPeek; + RecvWaitAll; } ROFlags :: enum #flags (u16) { - RecvDataTruncated :: 1; + RecvDataTruncated :: 1; } SIFlags :: enum #flags (u16) { - None; + None; } SDFlags :: enum #flags (u16) { - RD; - WR; + RD; + WR; } PreopenType :: enum (u8) { - Dir :: 0x00; + Dir :: 0x00; } PrestatDir :: struct { - pr_name_len : Size; + pr_name_len : Size; } PrestatTagged :: struct { - tag : PreopenType; + tag : PreopenType; - u : struct #union { - dir : PrestatDir; - }; + u : struct #union { + dir : PrestatDir; + }; } IOVecArray :: struct { - iovs : ^IOVec; - iovs_len : Size; + iovs : ^IOVec; + iovs_len : Size; } @@ -369,74 +373,73 @@ fd_filestat_get :: proc #foreign "wasi_snapshot_preview1" "fd_filestat_get fd_filestat_set_size :: proc #foreign "wasi_snapshot_preview1" "fd_filestat_set_size" (fd: FileDescriptor, size: Filesize) -> Errno --- fd_filestat_set_times :: proc #foreign "wasi_snapshot_preview1" "fd_filestat_set_times" (fd: FileDescriptor, atim: Timestamp, mtim: Timestamp, fst_flags: FSTFlags) -> Errno --- fd_pread :: - proc #foreign "wasi_snapshot_preview1" "fd_pread" - (fd: FileDescriptor, iovs: IOVecArray, offset: Filesize, nread: ^Size) -> Errno --- + proc #foreign "wasi_snapshot_preview1" "fd_pread" + (fd: FileDescriptor, iovs: IOVecArray, offset: Filesize, nread: ^Size) -> Errno --- fd_prestat_get :: proc #foreign "wasi_snapshot_preview1" "fd_prestat_get" (fd: FileDescriptor, buf: ^PrestatTagged) -> Errno --- -fd_prestat_dir_name :: proc #foreign "wasi_snapshot_preview1" "fd_prestat_dir_name" (fd: FileDescriptor, path: ^u8, path_len: Size) -> Errno --- +fd_prestat_dir_name :: proc #foreign "wasi_snapshot_preview1" "fd_prestat_dir_name" (fd: FileDescriptor, path: string) -> Errno --- fd_pwrite :: - proc #foreign "wasi_snapshot_preview1" "fd_pwrite" - (fd: FileDescriptor, iovs: IOVecArray, offset: Filesize, nwritten: ^Size) -> Errno --- + proc #foreign "wasi_snapshot_preview1" "fd_pwrite" + (fd: FileDescriptor, iovs: IOVecArray, offset: Filesize, nwritten: ^Size) -> Errno --- fd_read :: - proc #foreign "wasi_snapshot_preview1" "fd_read" - (fd: FileDescriptor, iovs: IOVecArray, nread: ^Size) -> Errno --- + proc #foreign "wasi_snapshot_preview1" "fd_read" + (fd: FileDescriptor, iovs: IOVecArray, nread: ^Size) -> Errno --- fd_readdir :: - proc #foreign "wasi_snapshot_preview1" "fd_readdir" - (fd: FileDescriptor, buf: ^u8, buf_len: Size, cookie: DirCookie, bufused: ^Size) -> Errno --- + proc #foreign "wasi_snapshot_preview1" "fd_readdir" + (fd: FileDescriptor, buf: ^u8, buf_len: Size, cookie: DirCookie, bufused: ^Size) -> Errno --- fd_renumber :: - proc #foreign "wasi_snapshot_preview1" "fd_renumber" - (fd: FileDescriptor, to: FileDescriptor) -> Errno --- + proc #foreign "wasi_snapshot_preview1" "fd_renumber" + (fd: FileDescriptor, to: FileDescriptor) -> Errno --- fd_seek :: - proc #foreign "wasi_snapshot_preview1" "fd_seek" - (fd: FileDescriptor, offset: FileDelta, whence: Whence, newoffset: ^Filesize) -> Errno --- + proc #foreign "wasi_snapshot_preview1" "fd_seek" + (fd: FileDescriptor, offset: FileDelta, whence: Whence, newoffset: ^Filesize) -> Errno --- fd_sync :: proc #foreign "wasi_snapshot_preview1" "fd_sync" (fd: FileDescriptor) -> Errno --- fd_tell :: proc #foreign "wasi_snapshot_preview1" "fd_tell" (fd: FileDescriptor, offset: ^Filesize) -> Errno --- fd_write :: - proc #foreign "wasi_snapshot_preview1" "fd_write" - (fd: FileDescriptor, iovs: IOVecArray, nwritten: ^Size) -> Errno --- + proc #foreign "wasi_snapshot_preview1" "fd_write" + (fd: FileDescriptor, iovs: IOVecArray, nwritten: ^Size) -> Errno --- path_create_directory :: - proc #foreign "wasi_snapshot_preview1" "path_create_directory" - (fd: FileDescriptor, path: ^u8, path_len: Size) -> Errno --- + proc #foreign "wasi_snapshot_preview1" "path_create_directory" + (fd: FileDescriptor, path: string) -> Errno --- path_filestat_get :: - proc #foreign "wasi_snapshot_preview1" "path_filestat_get" - (fd: FileDescriptor, flags: LookupFlags, path: ^u8, path_len: Size, buf: ^FileStat) -> Errno --- + proc #foreign "wasi_snapshot_preview1" "path_filestat_get" + (fd: FileDescriptor, flags: LookupFlags, path: string, buf: ^FileStat) -> Errno --- path_filestat_set_times :: - proc #foreign "wasi_snapshot_preview1" "path_filestat_set_times" - (fd: FileDescriptor, flags: LookupFlags, path: ^u8, path_len: Size, atim: Timestamp, mtim: Timestamp, fst_flags: FSTFlags) -> Errno --- + proc #foreign "wasi_snapshot_preview1" "path_filestat_set_times" + (fd: FileDescriptor, flags: LookupFlags, path: string, atim: Timestamp, mtim: Timestamp, fst_flags: FSTFlags) -> Errno --- path_link :: - proc #foreign "wasi_snapshot_preview1" "path_link" - (fd: FileDescriptor, old_flags: LookupFlags, old_path: ^u8, old_path_len: Size, new_fd: FileDescriptor, new_path: ^u8, new_path_len: Size) -> Errno --- + proc #foreign "wasi_snapshot_preview1" "path_link" + (fd: FileDescriptor, old_flags: LookupFlags, old_path: string, new_fd: FileDescriptor, new_path: string) -> Errno --- path_open :: - proc #foreign "wasi_snapshot_preview1" "path_open" - ( fd: FileDescriptor - , dirflags: LookupFlags - , path: ^u8 - , path_len: Size - , oflags: OFlags - , fs_rights_base: Rights - , fs_rights_inherting: Rights - , fdflags: FDFlags - , opened_fd: ^FileDescriptor - ) -> Errno --- + proc #foreign "wasi_snapshot_preview1" "path_open" + ( fd: FileDescriptor + , dirflags: LookupFlags + , path: string + , oflags: OFlags + , fs_rights_base: Rights + , fs_rights_inherting: Rights + , fdflags: FDFlags + , opened_fd: ^FileDescriptor + ) -> Errno --- path_readlink :: - proc #foreign "wasi_snapshot_preview1" "path_readlink" - (fd: FileDescriptor, path: ^u8, path_len: Size, buf: ^u8, buf_len: Size, bufused: ^Size) -> Errno --- + proc #foreign "wasi_snapshot_preview1" "path_readlink" + (fd: FileDescriptor, path: string, buf: ^u8, buf_len: Size, bufused: ^Size) -> Errno --- path_remove_directory :: - proc #foreign "wasi_snapshot_preview1" "path_remove_directory" - (fd: FileDescriptor, path: ^u8, path_len: Size) -> Errno --- + proc #foreign "wasi_snapshot_preview1" "path_remove_directory" + (fd: FileDescriptor, path: string) -> Errno --- path_rename :: - proc #foreign "wasi_snapshot_preview1" "path_rename" - (fd: FileDescriptor, old_path: ^u8, old_path_len: Size, new_fd: FileDescriptor, new_path: ^u8, new_path_len: Size) -> Errno --- + proc #foreign "wasi_snapshot_preview1" "path_rename" + (fd: FileDescriptor, old_path: string, new_fd: FileDescriptor, new_path: string) -> Errno --- path_symlink :: - proc #foreign "wasi_snapshot_preview1" "path_symlink" - (old_path: ^u8, old_path_len: Size, fd: FileDescriptor, new_path: ^u8, new_path_len: Size) -> Errno --- + proc #foreign "wasi_snapshot_preview1" "path_symlink" + (old_path: ^u8, old_path_len: Size, fd: FileDescriptor, new_path: string) -> Errno --- path_unlink_file :: - proc #foreign "wasi_snapshot_preview1" "path_unlink_file" - (fd: FileDescriptor, path: ^u8, path_len: Size) -> Errno --- + proc #foreign "wasi_snapshot_preview1" "path_unlink_file" + (fd: FileDescriptor, path: string) -> Errno --- poll_oneoff :: - proc #foreign "wasi_snapshot_preview1" "poll_oneoff" - (in: ^Subscription, out: ^Event, nsubscriptions: Size, nevents: ^Size) -> Errno --- + proc #foreign "wasi_snapshot_preview1" "poll_oneoff" + (in: ^Subscription, out: ^Event, nsubscriptions: Size, nevents: ^Size) -> Errno --- proc_exit :: proc #foreign "wasi_snapshot_preview1" "proc_exit" (rval: ExitCode) --- proc_raise :: proc #foreign "wasi_snapshot_preview1" "proc_raise" (sig: Signal) -> Errno --- @@ -446,11 +449,31 @@ sched_yield :: proc #foreign "wasi_snapshot_preview1" "sched_yield" -> Errno --- random_get :: proc #foreign "wasi_snapshot_preview1" "random_get" (buf: ^u8, buf_len: Size) -> Errno --- sock_recv :: - proc #foreign "wasi_snapshot_preview1" "sock_recv" - (fd: FileDescriptor, ri_data: IOVecArray, ri_flags: RIFlags, ro_datalen: ^Size, ro_flags: ^ROFlags) -> Errno --- + proc #foreign "wasi_snapshot_preview1" "sock_recv" + (fd: FileDescriptor, ri_data: IOVecArray, ri_flags: RIFlags, ro_datalen: ^Size, ro_flags: ^ROFlags) -> Errno --- sock_send :: - proc #foreign "wasi_snapshot_preview1" "sock_send" - (fd: FileDescriptor, si_data: IOVecArray, si_flags: SIFlags, so_datalen: ^Size) -> Errno --- + proc #foreign "wasi_snapshot_preview1" "sock_send" + (fd: FileDescriptor, si_data: IOVecArray, si_flags: SIFlags, so_datalen: ^Size) -> Errno --- sock_shutdown :: - proc #foreign "wasi_snapshot_preview1" "sock_shutdown" - (fd: FileDescriptor, how: SDFlags) -> Errno --- + proc #foreign "wasi_snapshot_preview1" "sock_shutdown" + (fd: FileDescriptor, how: SDFlags) -> Errno --- + + + +// The builtin _start proc. +// Sets up everything needed for execution. +proc #export "_start" { + memory_init(); + + argc : Size; + argv_buf_size : Size; + + args_sizes_get(^argc, ^argv_buf_size); + + argv := cast(^^u8) malloc(sizeof ^u8 * argc); + argv_buf := cast(^u8) malloc(argv_buf_size); + + args_get(argv, argv_buf); + + main.main(argc, argv); +} diff --git a/docs/plan b/docs/plan index bdc1b957..a3e2cb00 100644 --- a/docs/plan +++ b/docs/plan @@ -187,6 +187,10 @@ HOW: [X] returning structs - This will put forward a lot of the work that will be done for multiple return values + [ ] implicit overloading + + [ ] 'use' enums and packages at an arbitrary scope + [ ] convert to using an 'atom' like table - All identifier tokens are given a unique atom ptr, up to string equality. - This means identifiers can be compared using ptr comparison, instead of string comparison @@ -208,14 +212,12 @@ HOW: - Arrays without a size - Converted to a struct that looks like: []T :: struct { - count : u32; data : ^T; + count : u32; } [ ] Variadic arguments - [ ] 'use' enums and packages at an arbitrary scope - [ ] 'when' statements - Compile time conditions - Only evalutate code blocks that evaluate to be true diff --git a/onyx b/onyx index 54e07f57d9affbbe60a5d45bcb1976b995835fe2..fc892e9a2dd75a61d07eeb80ed4ff661d685e5c0 100755 GIT binary patch delta 97225 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 delta 96364 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 Lt*CYncGUWRPsQIM diff --git a/progs/wasi_test.onyx b/progs/wasi_test.onyx index 9f4f7c36..d0fbf8da 100644 --- a/progs/wasi_test.onyx +++ b/progs/wasi_test.onyx @@ -10,7 +10,11 @@ package main #include_file "string" use package builtin + +// NOTE: Didn't realize this would work so easily +use package core { string_builder_append as sba } use package core + use package memory use package wasi use package intrinsics @@ -59,7 +63,7 @@ print_u64_with_base :: proc (n_: u64, base: u64) { print_string :: proc (s: string) { vec := IOVec.{ buf = s.data, len = s.len }; - tmp : Size; + tmp : Size; fd_write(1, IOVecArray.{ ^vec, 1 }, ^tmp); fd_datasync(1); } @@ -141,32 +145,63 @@ readdir :: proc (fd: FileDescriptor) { } } -main :: proc #export "_start" { - memory_init(); +timer_start :: proc -> Timestamp { + curr_time: Timestamp; + clock_time_get(ClockID.Realtime, cast(Timestamp) 1, ^curr_time); + return curr_time; +} +timer_end :: proc (start_time: Timestamp) -> Timestamp { curr_time: Timestamp; clock_time_get(ClockID.Realtime, cast(Timestamp) 1, ^curr_time); - print_u64_with_base(cast(u64) curr_time, 10l); - print("\n"); + return (curr_time - start_time) / 1000000l; +} - print("Hello World!\n"); - print_u64_with_base(cast(u64) 0x624abd, 16l); - print("\n"); - print_u64_with_base(cast(u64) __stack_top, 16l); - print("\n"); - print_u64_with_base(cast(u64) __heap_start, 16l); - print("\n"); +is_prime :: proc (n: u32) -> bool { + sqrt :: cast(i32) (sqrt_f32(cast(f32) n)); + for i: 2, sqrt + 1 do if n % i == 0 do return false; + return true; +} + +main :: proc (argc: u32, argv: ^cstring) { + sb := string_builder_make(^heap_allocator, 16); + + timer := timer_start(); + defer { + ^sb |> string_builder_clear() + |> sba("Time taken: ") + |> sba(cast(u64) timer_end(timer), 10l) + |> sba("ms\n") + |> string_builder_to_string() + |> print(); + } + + ^sb |> sba("\x01\x02\x03There are ") + |> sba(cast(u64) argc) + |> sba(" arguments.\n") + |> string_builder_to_string() + |> print(); + + string_builder_clear(^sb); + + for i: 0, argc do ^sb |> sba(argv[i]) |> sba(" "); + ^sb |> sba("\n") + |> string_builder_to_string() + |> print(); - fd : FileDescriptor; + fd: FileDescriptor = -1; err := path_open(3, LookupFlags.SymLinkFollow, - "./src/onyxmsgs.c".data, 16, + string_make(argv[1]), cast(OFlags) 0, Rights.DataSync | Rights.Write | Rights.Read | Rights.Tell | Rights.Seek | Rights.Advise | Rights.PathOpen | Rights.PathCreateFile, Rights.DataSync | Rights.Write | Rights.Read | Rights.Tell | Rights.Seek | Rights.Advise | Rights.PathOpen | Rights.PathCreateFile, FDFlags.Sync, ^fd); + defer if fd != -1 do fd_close(fd); + + if err != Errno.Success { print("Failed to open file\n"); print("Error code: "); @@ -184,19 +219,42 @@ main :: proc #export "_start" { } print("the size is: "); print_u64_with_base(cast(u64) filelen, 10l); + print("\n"); + + sum := 0l; + for i: 0, 20000 do if is_prime(i) do sum += cast(u64) i; + print("Sum of primes less than 20000 is: "); + print_u64_with_base(sum, 10l); + print("\n"); + - //buf : [128] u8; - //hello_vec := IOVec.{ buf = cast(^u8) buf, len = 128 }; - //nread : Size; - //if fd_read(fd, IOVecArray.{ ^hello_vec, 1 }, ^nread) != Errno.Success { - // print("Failed to read from file\n"); - // print("Error code: "); - // print_u64_with_base(cast(u64) err, 10l); - // proc_exit(1); - // return; - //} -// - //print(string.{ nread, cast(^u8) buf }); - - fd_close(fd); -} \ No newline at end of file + matches := string_split(heap_allocator, "This is a test string to test splitting. It surprisingly works very well.", #char " "); + defer free(heap_allocator, matches.tokens); + + string_builder_clear(^sb); + for i: 0, matches.count { + ^sb |> sba(matches.tokens[i]) + |> sba("\n"); + } + + ^sb |> string_builder_to_string() |> print(); + + program := "+ + * s - /"; + tokens := string_split(heap_allocator, program, #char " "); + defer free(heap_allocator, tokens.tokens); + + acc := 0; + for i: 0, tokens.count { + tok :: tokens.tokens[i].data[0]; + + if tok == #char "+" do acc += 1; + elseif tok == #char "-" do acc -= 1; + elseif tok == #char "*" do acc *= 2; + elseif tok == #char "/" do acc /= 2; + elseif tok == #char "s" do acc *= acc; + } + + string_builder_clear(^sb); + ^sb |> sba("The program evaluated to '") |> sba(cast(u64) acc) |> sba("'\n"); + ^sb |> string_builder_to_string() |> print(); +} diff --git a/src/onyxparser.c b/src/onyxparser.c index 2ae55a91..1794b7f0 100644 --- a/src/onyxparser.c +++ b/src/onyxparser.c @@ -440,6 +440,15 @@ static AstTyped* parse_factor(OnyxParser* parser) { case 'r': char_lit->value.i = '\r'; break; case 'v': char_lit->value.i = '\v'; break; case 'e': char_lit->value.i = '\e'; break; + case 'x': { + // HACK: This whole way of doing this + u8 buf[3]; + buf[0] = char_lit->token->text[2]; + buf[1] = char_lit->token->text[3]; + buf[2] = 0; + char_lit->value.i = strtol((const char *) buf, NULL, 16); + break; + } default: { onyx_message_add(Msg_Type_Literal, char_lit->token->pos, @@ -889,6 +898,7 @@ static AstNode* parse_statement(OnyxParser* parser) { case '-': case '!': case '*': + case '^': case Token_Type_Literal_Integer: case Token_Type_Literal_Float: case Token_Type_Literal_String: diff --git a/src/onyxutils.c b/src/onyxutils.c index 9733d625..8dbacf26 100644 --- a/src/onyxutils.c +++ b/src/onyxutils.c @@ -184,6 +184,7 @@ AstNode* symbol_resolve(Scope* start_scope, OnyxToken* tkn) { if (res == NULL) { onyx_message_add(Msg_Type_Unknown_Symbol, tkn->pos, tkn->text); + token_toggle_end(tkn); return &empty_node; } diff --git a/src/onyxwasm.c b/src/onyxwasm.c index 0eec5286..8133520a 100644 --- a/src/onyxwasm.c +++ b/src/onyxwasm.c @@ -1916,6 +1916,17 @@ static void compile_string_literal(OnyxWasmModule* mod, AstStrLit* strlit) { case 'r': *des++ = '\r'; break; case 'v': *des++ = '\v'; break; case 'e': *des++ = '\e'; break; + case 'x': { + // HACK: This whole way of doing this + i++; + u8 buf[3]; + buf[0] = src[i + 0]; + buf[1] = src[i + 1]; + buf[2] = 0; + *des++ = strtol((const char *) buf, NULL, 16); + i++; + break; + } default: *des++ = '\\'; *des++ = src[i]; } -- 2.25.1