mirror of
https://github.com/Ed94/Odin.git
synced 2026-08-06 07:38:48 +00:00
Imply #no_capture to all variadic parameters
This commit is contained in:
@@ -524,12 +524,12 @@ _append_elems :: #force_inline proc(array: ^$T/[dynamic]$E, should_zero: bool, l
|
|||||||
}
|
}
|
||||||
|
|
||||||
@builtin
|
@builtin
|
||||||
append_elems :: proc(array: ^$T/[dynamic]$E, #no_broadcast #no_capture args: ..E, loc := #caller_location) -> (n: int, err: Allocator_Error) #optional_allocator_error {
|
append_elems :: proc(array: ^$T/[dynamic]$E, #no_broadcast args: ..E, loc := #caller_location) -> (n: int, err: Allocator_Error) #optional_allocator_error {
|
||||||
return _append_elems(array, true, loc, args)
|
return _append_elems(array, true, loc, args)
|
||||||
}
|
}
|
||||||
|
|
||||||
@builtin
|
@builtin
|
||||||
non_zero_append_elems :: proc(array: ^$T/[dynamic]$E, #no_broadcast #no_capture args: ..E, loc := #caller_location) -> (n: int, err: Allocator_Error) #optional_allocator_error {
|
non_zero_append_elems :: proc(array: ^$T/[dynamic]$E, #no_broadcast args: ..E, loc := #caller_location) -> (n: int, err: Allocator_Error) #optional_allocator_error {
|
||||||
return _append_elems(array, false, loc, args)
|
return _append_elems(array, false, loc, args)
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -617,7 +617,7 @@ inject_at_elem :: proc(array: ^$T/[dynamic]$E, index: int, #no_broadcast arg: E,
|
|||||||
}
|
}
|
||||||
|
|
||||||
@builtin
|
@builtin
|
||||||
inject_at_elems :: proc(array: ^$T/[dynamic]$E, index: int, #no_broadcast #no_capture args: ..E, loc := #caller_location) -> (ok: bool, err: Allocator_Error) #no_bounds_check #optional_allocator_error {
|
inject_at_elems :: proc(array: ^$T/[dynamic]$E, index: int, #no_broadcast args: ..E, loc := #caller_location) -> (ok: bool, err: Allocator_Error) #no_bounds_check #optional_allocator_error {
|
||||||
if array == nil {
|
if array == nil {
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
@@ -679,7 +679,7 @@ assign_at_elem :: proc(array: ^$T/[dynamic]$E, index: int, arg: E, loc := #calle
|
|||||||
|
|
||||||
|
|
||||||
@builtin
|
@builtin
|
||||||
assign_at_elems :: proc(array: ^$T/[dynamic]$E, index: int, #no_broadcast #no_capture args: ..E, loc := #caller_location) -> (ok: bool, err: Allocator_Error) #no_bounds_check #optional_allocator_error {
|
assign_at_elems :: proc(array: ^$T/[dynamic]$E, index: int, #no_broadcast args: ..E, loc := #caller_location) -> (ok: bool, err: Allocator_Error) #no_bounds_check #optional_allocator_error {
|
||||||
new_size := index + len(args)
|
new_size := index + len(args)
|
||||||
if len(args) == 0 {
|
if len(args) == 0 {
|
||||||
ok = true
|
ok = true
|
||||||
|
|||||||
@@ -342,12 +342,12 @@ _append_soa_elem :: proc(array: ^$T/#soa[dynamic]$E, zero_memory: bool, #no_broa
|
|||||||
}
|
}
|
||||||
|
|
||||||
@builtin
|
@builtin
|
||||||
append_soa_elems :: proc(array: ^$T/#soa[dynamic]$E, #no_broadcast #no_capture args: ..E, loc := #caller_location) -> (n: int, err: Allocator_Error) #optional_allocator_error {
|
append_soa_elems :: proc(array: ^$T/#soa[dynamic]$E, #no_broadcast args: ..E, loc := #caller_location) -> (n: int, err: Allocator_Error) #optional_allocator_error {
|
||||||
return _append_soa_elems(array, true, args=args, loc=loc)
|
return _append_soa_elems(array, true, args=args, loc=loc)
|
||||||
}
|
}
|
||||||
|
|
||||||
@builtin
|
@builtin
|
||||||
non_zero_append_soa_elems :: proc(array: ^$T/#soa[dynamic]$E, #no_broadcast #no_capture args: ..E, loc := #caller_location) -> (n: int, err: Allocator_Error) #optional_allocator_error {
|
non_zero_append_soa_elems :: proc(array: ^$T/#soa[dynamic]$E, #no_broadcast args: ..E, loc := #caller_location) -> (n: int, err: Allocator_Error) #optional_allocator_error {
|
||||||
return _append_soa_elems(array, false, args=args, loc=loc)
|
return _append_soa_elems(array, false, args=args, loc=loc)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -72,7 +72,7 @@ when !ODIN_NO_RTTI {
|
|||||||
print_string("<invalid-value>")
|
print_string("<invalid-value>")
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
println_any :: #force_no_inline proc "contextless" (#no_capture args: ..any) {
|
println_any :: #force_no_inline proc "contextless" (args: ..any) {
|
||||||
context = default_context()
|
context = default_context()
|
||||||
loop: for arg, i in args {
|
loop: for arg, i in args {
|
||||||
assert(arg.id != nil)
|
assert(arg.id != nil)
|
||||||
@@ -127,7 +127,7 @@ print_string :: #force_no_inline proc "contextless" (str: string) -> (n: int) {
|
|||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
print_strings :: #force_no_inline proc "contextless" (#no_capture args: ..string) -> (n: int) {
|
print_strings :: #force_no_inline proc "contextless" (args: ..string) -> (n: int) {
|
||||||
for str in args {
|
for str in args {
|
||||||
m, err := stderr_write(transmute([]byte)str)
|
m, err := stderr_write(transmute([]byte)str)
|
||||||
n += m
|
n += m
|
||||||
|
|||||||
@@ -139,7 +139,7 @@ clear :: proc "contextless" (a: ^$A/Small_Array($N, $T)) {
|
|||||||
resize(a, 0)
|
resize(a, 0)
|
||||||
}
|
}
|
||||||
|
|
||||||
push_back_elems :: proc "contextless" (a: ^$A/Small_Array($N, $T), #no_capture items: ..T) {
|
push_back_elems :: proc "contextless" (a: ^$A/Small_Array($N, $T), items: ..T) {
|
||||||
n := copy(a.data[a.len:], items[:])
|
n := copy(a.data[a.len:], items[:])
|
||||||
a.len += n
|
a.len += n
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -17,7 +17,7 @@ import "core:fmt"
|
|||||||
import "core:unicode"
|
import "core:unicode"
|
||||||
import "core:unicode/utf8"
|
import "core:unicode/utf8"
|
||||||
|
|
||||||
Error_Handler :: #type proc(pos: Pos, fmt: string, #no_capture args: ..any)
|
Error_Handler :: #type proc(pos: Pos, fmt: string, args: ..any)
|
||||||
|
|
||||||
Token :: struct {
|
Token :: struct {
|
||||||
kind: Token_Kind,
|
kind: Token_Kind,
|
||||||
@@ -112,13 +112,13 @@ offset_to_pos :: proc(t: ^Tokenizer, offset: int) -> Pos {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
default_error_handler :: proc(pos: Pos, msg: string, #no_capture args: ..any) {
|
default_error_handler :: proc(pos: Pos, msg: string, args: ..any) {
|
||||||
fmt.eprintf("%s(%d:%d) ", pos.file, pos.line, pos.column)
|
fmt.eprintf("%s(%d:%d) ", pos.file, pos.line, pos.column)
|
||||||
fmt.eprintf(msg, ..args)
|
fmt.eprintf(msg, ..args)
|
||||||
fmt.eprintf("\n")
|
fmt.eprintf("\n")
|
||||||
}
|
}
|
||||||
|
|
||||||
error :: proc(t: ^Tokenizer, offset: int, msg: string, #no_capture args: ..any) {
|
error :: proc(t: ^Tokenizer, offset: int, msg: string, args: ..any) {
|
||||||
pos := offset_to_pos(t, offset)
|
pos := offset_to_pos(t, offset)
|
||||||
if t.err != nil {
|
if t.err != nil {
|
||||||
t.err(pos, msg, ..args)
|
t.err(pos, msg, ..args)
|
||||||
|
|||||||
+29
-29
@@ -125,7 +125,7 @@ register_user_formatter :: proc(id: typeid, formatter: User_Formatter) -> Regist
|
|||||||
// Returns: A formatted string.
|
// Returns: A formatted string.
|
||||||
//
|
//
|
||||||
@(require_results)
|
@(require_results)
|
||||||
aprint :: proc(#no_capture args: ..any, sep := " ", allocator := context.allocator) -> string {
|
aprint :: proc(args: ..any, sep := " ", allocator := context.allocator) -> string {
|
||||||
str: strings.Builder
|
str: strings.Builder
|
||||||
strings.builder_init(&str, allocator)
|
strings.builder_init(&str, allocator)
|
||||||
return sbprint(&str, ..args, sep=sep)
|
return sbprint(&str, ..args, sep=sep)
|
||||||
@@ -141,7 +141,7 @@ aprint :: proc(#no_capture args: ..any, sep := " ", allocator := context.allocat
|
|||||||
// Returns: A formatted string with a newline character at the end.
|
// Returns: A formatted string with a newline character at the end.
|
||||||
//
|
//
|
||||||
@(require_results)
|
@(require_results)
|
||||||
aprintln :: proc(#no_capture args: ..any, sep := " ", allocator := context.allocator) -> string {
|
aprintln :: proc(args: ..any, sep := " ", allocator := context.allocator) -> string {
|
||||||
str: strings.Builder
|
str: strings.Builder
|
||||||
strings.builder_init(&str, allocator)
|
strings.builder_init(&str, allocator)
|
||||||
return sbprintln(&str, ..args, sep=sep)
|
return sbprintln(&str, ..args, sep=sep)
|
||||||
@@ -158,7 +158,7 @@ aprintln :: proc(#no_capture args: ..any, sep := " ", allocator := context.alloc
|
|||||||
// Returns: A formatted string. The returned string must be freed accordingly.
|
// Returns: A formatted string. The returned string must be freed accordingly.
|
||||||
//
|
//
|
||||||
@(require_results)
|
@(require_results)
|
||||||
aprintf :: proc(fmt: string, #no_capture args: ..any, allocator := context.allocator, newline := false) -> string {
|
aprintf :: proc(fmt: string, args: ..any, allocator := context.allocator, newline := false) -> string {
|
||||||
str: strings.Builder
|
str: strings.Builder
|
||||||
strings.builder_init(&str, allocator)
|
strings.builder_init(&str, allocator)
|
||||||
return sbprintf(&str, fmt, ..args, newline=newline)
|
return sbprintf(&str, fmt, ..args, newline=newline)
|
||||||
@@ -174,7 +174,7 @@ aprintf :: proc(fmt: string, #no_capture args: ..any, allocator := context.alloc
|
|||||||
// Returns: A formatted string. The returned string must be freed accordingly.
|
// Returns: A formatted string. The returned string must be freed accordingly.
|
||||||
//
|
//
|
||||||
@(require_results)
|
@(require_results)
|
||||||
aprintfln :: proc(fmt: string, #no_capture args: ..any, allocator := context.allocator) -> string {
|
aprintfln :: proc(fmt: string, args: ..any, allocator := context.allocator) -> string {
|
||||||
return aprintf(fmt, ..args, allocator=allocator, newline=true)
|
return aprintf(fmt, ..args, allocator=allocator, newline=true)
|
||||||
}
|
}
|
||||||
// Creates a formatted string
|
// Creates a formatted string
|
||||||
@@ -188,7 +188,7 @@ aprintfln :: proc(fmt: string, #no_capture args: ..any, allocator := context.all
|
|||||||
// Returns: A formatted string.
|
// Returns: A formatted string.
|
||||||
//
|
//
|
||||||
@(require_results)
|
@(require_results)
|
||||||
tprint :: proc(#no_capture args: ..any, sep := " ") -> string {
|
tprint :: proc(args: ..any, sep := " ") -> string {
|
||||||
str: strings.Builder
|
str: strings.Builder
|
||||||
strings.builder_init(&str, context.temp_allocator)
|
strings.builder_init(&str, context.temp_allocator)
|
||||||
return sbprint(&str, ..args, sep=sep)
|
return sbprint(&str, ..args, sep=sep)
|
||||||
@@ -204,7 +204,7 @@ tprint :: proc(#no_capture args: ..any, sep := " ") -> string {
|
|||||||
// Returns: A formatted string with a newline character at the end.
|
// Returns: A formatted string with a newline character at the end.
|
||||||
//
|
//
|
||||||
@(require_results)
|
@(require_results)
|
||||||
tprintln :: proc(#no_capture args: ..any, sep := " ") -> string {
|
tprintln :: proc(args: ..any, sep := " ") -> string {
|
||||||
str: strings.Builder
|
str: strings.Builder
|
||||||
strings.builder_init(&str, context.temp_allocator)
|
strings.builder_init(&str, context.temp_allocator)
|
||||||
return sbprintln(&str, ..args, sep=sep)
|
return sbprintln(&str, ..args, sep=sep)
|
||||||
@@ -221,7 +221,7 @@ tprintln :: proc(#no_capture args: ..any, sep := " ") -> string {
|
|||||||
// Returns: A formatted string.
|
// Returns: A formatted string.
|
||||||
//
|
//
|
||||||
@(require_results)
|
@(require_results)
|
||||||
tprintf :: proc(fmt: string, #no_capture args: ..any, newline := false) -> string {
|
tprintf :: proc(fmt: string, args: ..any, newline := false) -> string {
|
||||||
str: strings.Builder
|
str: strings.Builder
|
||||||
strings.builder_init(&str, context.temp_allocator)
|
strings.builder_init(&str, context.temp_allocator)
|
||||||
return sbprintf(&str, fmt, ..args, newline=newline)
|
return sbprintf(&str, fmt, ..args, newline=newline)
|
||||||
@@ -237,7 +237,7 @@ tprintf :: proc(fmt: string, #no_capture args: ..any, newline := false) -> strin
|
|||||||
// Returns: A formatted string.
|
// Returns: A formatted string.
|
||||||
//
|
//
|
||||||
@(require_results)
|
@(require_results)
|
||||||
tprintfln :: proc(fmt: string, #no_capture args: ..any) -> string {
|
tprintfln :: proc(fmt: string, args: ..any) -> string {
|
||||||
return tprintf(fmt, ..args, newline=true)
|
return tprintf(fmt, ..args, newline=true)
|
||||||
}
|
}
|
||||||
// Creates a formatted string using a supplied buffer as the backing array. Writes into the buffer.
|
// Creates a formatted string using a supplied buffer as the backing array. Writes into the buffer.
|
||||||
@@ -249,7 +249,7 @@ tprintfln :: proc(fmt: string, #no_capture args: ..any) -> string {
|
|||||||
//
|
//
|
||||||
// Returns: A formatted string
|
// Returns: A formatted string
|
||||||
//
|
//
|
||||||
bprint :: proc(buf: []byte, #no_capture args: ..any, sep := " ") -> string {
|
bprint :: proc(buf: []byte, args: ..any, sep := " ") -> string {
|
||||||
sb := strings.builder_from_bytes(buf)
|
sb := strings.builder_from_bytes(buf)
|
||||||
return sbprint(&sb, ..args, sep=sep)
|
return sbprint(&sb, ..args, sep=sep)
|
||||||
}
|
}
|
||||||
@@ -262,7 +262,7 @@ bprint :: proc(buf: []byte, #no_capture args: ..any, sep := " ") -> string {
|
|||||||
//
|
//
|
||||||
// Returns: A formatted string with a newline character at the end
|
// Returns: A formatted string with a newline character at the end
|
||||||
//
|
//
|
||||||
bprintln :: proc(buf: []byte, #no_capture args: ..any, sep := " ") -> string {
|
bprintln :: proc(buf: []byte, args: ..any, sep := " ") -> string {
|
||||||
sb := strings.builder_from_bytes(buf)
|
sb := strings.builder_from_bytes(buf)
|
||||||
return sbprintln(&sb, ..args, sep=sep)
|
return sbprintln(&sb, ..args, sep=sep)
|
||||||
}
|
}
|
||||||
@@ -276,7 +276,7 @@ bprintln :: proc(buf: []byte, #no_capture args: ..any, sep := " ") -> string {
|
|||||||
//
|
//
|
||||||
// Returns: A formatted string
|
// Returns: A formatted string
|
||||||
//
|
//
|
||||||
bprintf :: proc(buf: []byte, fmt: string, #no_capture args: ..any, newline := false) -> string {
|
bprintf :: proc(buf: []byte, fmt: string, args: ..any, newline := false) -> string {
|
||||||
sb := strings.builder_from_bytes(buf)
|
sb := strings.builder_from_bytes(buf)
|
||||||
return sbprintf(&sb, fmt, ..args, newline=newline)
|
return sbprintf(&sb, fmt, ..args, newline=newline)
|
||||||
}
|
}
|
||||||
@@ -289,7 +289,7 @@ bprintf :: proc(buf: []byte, fmt: string, #no_capture args: ..any, newline := fa
|
|||||||
//
|
//
|
||||||
// Returns: A formatted string
|
// Returns: A formatted string
|
||||||
//
|
//
|
||||||
bprintfln :: proc(buf: []byte, fmt: string, #no_capture args: ..any) -> string {
|
bprintfln :: proc(buf: []byte, fmt: string, args: ..any) -> string {
|
||||||
return bprintf(buf, fmt, ..args, newline=true)
|
return bprintf(buf, fmt, ..args, newline=true)
|
||||||
}
|
}
|
||||||
// Runtime assertion with a formatted message
|
// Runtime assertion with a formatted message
|
||||||
@@ -301,14 +301,14 @@ bprintfln :: proc(buf: []byte, fmt: string, #no_capture args: ..any) -> string {
|
|||||||
// - loc: The location of the caller
|
// - loc: The location of the caller
|
||||||
//
|
//
|
||||||
@(disabled=ODIN_DISABLE_ASSERT)
|
@(disabled=ODIN_DISABLE_ASSERT)
|
||||||
assertf :: proc(condition: bool, fmt: string, #no_capture args: ..any, loc := #caller_location) {
|
assertf :: proc(condition: bool, fmt: string, args: ..any, loc := #caller_location) {
|
||||||
if !condition {
|
if !condition {
|
||||||
// NOTE(dragos): We are using the same trick as in builtin.assert
|
// NOTE(dragos): We are using the same trick as in builtin.assert
|
||||||
// to improve performance to make the CPU not
|
// to improve performance to make the CPU not
|
||||||
// execute speculatively, making it about an order of
|
// execute speculatively, making it about an order of
|
||||||
// magnitude faster
|
// magnitude faster
|
||||||
@(cold)
|
@(cold)
|
||||||
internal :: proc(loc: runtime.Source_Code_Location, fmt: string, #no_capture args: ..any) {
|
internal :: proc(loc: runtime.Source_Code_Location, fmt: string, args: ..any) {
|
||||||
p := context.assertion_failure_proc
|
p := context.assertion_failure_proc
|
||||||
if p == nil {
|
if p == nil {
|
||||||
p = runtime.default_assertion_failure_proc
|
p = runtime.default_assertion_failure_proc
|
||||||
@@ -326,7 +326,7 @@ assertf :: proc(condition: bool, fmt: string, #no_capture args: ..any, loc := #c
|
|||||||
// - args: A variadic list of arguments to be formatted
|
// - args: A variadic list of arguments to be formatted
|
||||||
// - loc: The location of the caller
|
// - loc: The location of the caller
|
||||||
//
|
//
|
||||||
panicf :: proc(fmt: string, #no_capture args: ..any, loc := #caller_location) -> ! {
|
panicf :: proc(fmt: string, args: ..any, loc := #caller_location) -> ! {
|
||||||
p := context.assertion_failure_proc
|
p := context.assertion_failure_proc
|
||||||
if p == nil {
|
if p == nil {
|
||||||
p = runtime.default_assertion_failure_proc
|
p = runtime.default_assertion_failure_proc
|
||||||
@@ -346,7 +346,7 @@ panicf :: proc(fmt: string, #no_capture args: ..any, loc := #caller_location) ->
|
|||||||
// Returns: A formatted C string
|
// Returns: A formatted C string
|
||||||
//
|
//
|
||||||
@(require_results)
|
@(require_results)
|
||||||
caprintf :: proc(format: string, #no_capture args: ..any, newline := false) -> cstring {
|
caprintf :: proc(format: string, args: ..any, newline := false) -> cstring {
|
||||||
str: strings.Builder
|
str: strings.Builder
|
||||||
strings.builder_init(&str)
|
strings.builder_init(&str)
|
||||||
sbprintf(&str, format, ..args, newline=newline)
|
sbprintf(&str, format, ..args, newline=newline)
|
||||||
@@ -365,7 +365,7 @@ caprintf :: proc(format: string, #no_capture args: ..any, newline := false) -> c
|
|||||||
// Returns: A formatted C string
|
// Returns: A formatted C string
|
||||||
//
|
//
|
||||||
@(require_results)
|
@(require_results)
|
||||||
caprintfln :: proc(format: string, #no_capture args: ..any) -> cstring {
|
caprintfln :: proc(format: string, args: ..any) -> cstring {
|
||||||
return caprintf(format, ..args, newline=true)
|
return caprintf(format, ..args, newline=true)
|
||||||
}
|
}
|
||||||
// Creates a formatted C string
|
// Creates a formatted C string
|
||||||
@@ -379,7 +379,7 @@ caprintfln :: proc(format: string, #no_capture args: ..any) -> cstring {
|
|||||||
// Returns: A formatted C string.
|
// Returns: A formatted C string.
|
||||||
//
|
//
|
||||||
@(require_results)
|
@(require_results)
|
||||||
ctprint :: proc(#no_capture args: ..any, sep := " ") -> cstring {
|
ctprint :: proc(args: ..any, sep := " ") -> cstring {
|
||||||
str: strings.Builder
|
str: strings.Builder
|
||||||
strings.builder_init(&str, context.temp_allocator)
|
strings.builder_init(&str, context.temp_allocator)
|
||||||
sbprint(&str, ..args, sep=sep)
|
sbprint(&str, ..args, sep=sep)
|
||||||
@@ -399,7 +399,7 @@ ctprint :: proc(#no_capture args: ..any, sep := " ") -> cstring {
|
|||||||
// Returns: A formatted C string
|
// Returns: A formatted C string
|
||||||
//
|
//
|
||||||
@(require_results)
|
@(require_results)
|
||||||
ctprintf :: proc(format: string, #no_capture args: ..any, newline := false) -> cstring {
|
ctprintf :: proc(format: string, args: ..any, newline := false) -> cstring {
|
||||||
str: strings.Builder
|
str: strings.Builder
|
||||||
strings.builder_init(&str, context.temp_allocator)
|
strings.builder_init(&str, context.temp_allocator)
|
||||||
sbprintf(&str, format, ..args, newline=newline)
|
sbprintf(&str, format, ..args, newline=newline)
|
||||||
@@ -418,7 +418,7 @@ ctprintf :: proc(format: string, #no_capture args: ..any, newline := false) -> c
|
|||||||
// Returns: A formatted C string
|
// Returns: A formatted C string
|
||||||
//
|
//
|
||||||
@(require_results)
|
@(require_results)
|
||||||
ctprintfln :: proc(format: string, #no_capture args: ..any) -> cstring {
|
ctprintfln :: proc(format: string, args: ..any) -> cstring {
|
||||||
return ctprintf(format, ..args, newline=true)
|
return ctprintf(format, ..args, newline=true)
|
||||||
}
|
}
|
||||||
// Formats using the default print settings and writes to the given strings.Builder
|
// Formats using the default print settings and writes to the given strings.Builder
|
||||||
@@ -430,7 +430,7 @@ ctprintfln :: proc(format: string, #no_capture args: ..any) -> cstring {
|
|||||||
//
|
//
|
||||||
// Returns: A formatted string
|
// Returns: A formatted string
|
||||||
//
|
//
|
||||||
sbprint :: proc(buf: ^strings.Builder, #no_capture args: ..any, sep := " ") -> string {
|
sbprint :: proc(buf: ^strings.Builder, args: ..any, sep := " ") -> string {
|
||||||
wprint(strings.to_writer(buf), ..args, sep=sep, flush=true)
|
wprint(strings.to_writer(buf), ..args, sep=sep, flush=true)
|
||||||
return strings.to_string(buf^)
|
return strings.to_string(buf^)
|
||||||
}
|
}
|
||||||
@@ -443,7 +443,7 @@ sbprint :: proc(buf: ^strings.Builder, #no_capture args: ..any, sep := " ") -> s
|
|||||||
//
|
//
|
||||||
// Returns: The resulting formatted string
|
// Returns: The resulting formatted string
|
||||||
//
|
//
|
||||||
sbprintln :: proc(buf: ^strings.Builder, #no_capture args: ..any, sep := " ") -> string {
|
sbprintln :: proc(buf: ^strings.Builder, args: ..any, sep := " ") -> string {
|
||||||
wprintln(strings.to_writer(buf), ..args, sep=sep, flush=true)
|
wprintln(strings.to_writer(buf), ..args, sep=sep, flush=true)
|
||||||
return strings.to_string(buf^)
|
return strings.to_string(buf^)
|
||||||
}
|
}
|
||||||
@@ -457,7 +457,7 @@ sbprintln :: proc(buf: ^strings.Builder, #no_capture args: ..any, sep := " ") ->
|
|||||||
//
|
//
|
||||||
// Returns: The resulting formatted string
|
// Returns: The resulting formatted string
|
||||||
//
|
//
|
||||||
sbprintf :: proc(buf: ^strings.Builder, fmt: string, #no_capture args: ..any, newline := false) -> string {
|
sbprintf :: proc(buf: ^strings.Builder, fmt: string, args: ..any, newline := false) -> string {
|
||||||
wprintf(strings.to_writer(buf), fmt, ..args, flush=true, newline=newline)
|
wprintf(strings.to_writer(buf), fmt, ..args, flush=true, newline=newline)
|
||||||
return strings.to_string(buf^)
|
return strings.to_string(buf^)
|
||||||
}
|
}
|
||||||
@@ -469,7 +469,7 @@ sbprintf :: proc(buf: ^strings.Builder, fmt: string, #no_capture args: ..any, ne
|
|||||||
//
|
//
|
||||||
// Returns: A formatted string
|
// Returns: A formatted string
|
||||||
//
|
//
|
||||||
sbprintfln :: proc(buf: ^strings.Builder, format: string, #no_capture args: ..any) -> string {
|
sbprintfln :: proc(buf: ^strings.Builder, format: string, args: ..any) -> string {
|
||||||
return sbprintf(buf, format, ..args, newline=true)
|
return sbprintf(buf, format, ..args, newline=true)
|
||||||
}
|
}
|
||||||
// Formats and writes to an io.Writer using the default print settings
|
// Formats and writes to an io.Writer using the default print settings
|
||||||
@@ -481,7 +481,7 @@ sbprintfln :: proc(buf: ^strings.Builder, format: string, #no_capture args: ..an
|
|||||||
//
|
//
|
||||||
// Returns: The number of bytes written
|
// Returns: The number of bytes written
|
||||||
//
|
//
|
||||||
wprint :: proc(w: io.Writer, #no_capture args: ..any, sep := " ", flush := true) -> int {
|
wprint :: proc(w: io.Writer, args: ..any, sep := " ", flush := true) -> int {
|
||||||
fi: Info
|
fi: Info
|
||||||
fi.writer = w
|
fi.writer = w
|
||||||
|
|
||||||
@@ -522,7 +522,7 @@ wprint :: proc(w: io.Writer, #no_capture args: ..any, sep := " ", flush := true)
|
|||||||
//
|
//
|
||||||
// Returns: The number of bytes written
|
// Returns: The number of bytes written
|
||||||
//
|
//
|
||||||
wprintln :: proc(w: io.Writer, #no_capture args: ..any, sep := " ", flush := true) -> int {
|
wprintln :: proc(w: io.Writer, args: ..any, sep := " ", flush := true) -> int {
|
||||||
fi: Info
|
fi: Info
|
||||||
fi.writer = w
|
fi.writer = w
|
||||||
|
|
||||||
@@ -549,11 +549,11 @@ wprintln :: proc(w: io.Writer, #no_capture args: ..any, sep := " ", flush := tru
|
|||||||
//
|
//
|
||||||
// Returns: The number of bytes written
|
// Returns: The number of bytes written
|
||||||
//
|
//
|
||||||
wprintf :: proc(w: io.Writer, fmt: string, #no_capture args: ..any, flush := true, newline := false) -> int {
|
wprintf :: proc(w: io.Writer, fmt: string, args: ..any, flush := true, newline := false) -> int {
|
||||||
MAX_CHECKED_ARGS :: 64
|
MAX_CHECKED_ARGS :: 64
|
||||||
assert(len(args) <= MAX_CHECKED_ARGS, "number of args > 64 is unsupported")
|
assert(len(args) <= MAX_CHECKED_ARGS, "number of args > 64 is unsupported")
|
||||||
|
|
||||||
parse_options :: proc(fi: ^Info, fmt: string, index, end: int, unused_args: ^bit_set[0 ..< MAX_CHECKED_ARGS], #no_capture args: ..any) -> int {
|
parse_options :: proc(fi: ^Info, fmt: string, index, end: int, unused_args: ^bit_set[0 ..< MAX_CHECKED_ARGS], args: ..any) -> int {
|
||||||
i := index
|
i := index
|
||||||
|
|
||||||
// Prefix
|
// Prefix
|
||||||
@@ -809,7 +809,7 @@ wprintf :: proc(w: io.Writer, fmt: string, #no_capture args: ..any, flush := tru
|
|||||||
//
|
//
|
||||||
// Returns: The number of bytes written.
|
// Returns: The number of bytes written.
|
||||||
//
|
//
|
||||||
wprintfln :: proc(w: io.Writer, format: string, #no_capture args: ..any, flush := true) -> int {
|
wprintfln :: proc(w: io.Writer, format: string, args: ..any, flush := true) -> int {
|
||||||
return wprintf(w, format, ..args, flush=flush, newline=true)
|
return wprintf(w, format, ..args, flush=flush, newline=true)
|
||||||
}
|
}
|
||||||
// Writes a ^runtime.Type_Info value to an io.Writer
|
// Writes a ^runtime.Type_Info value to an io.Writer
|
||||||
|
|||||||
+12
-12
@@ -43,7 +43,7 @@ fd_to_writer :: proc(fd: os.Handle, loc := #caller_location) -> io.Writer {
|
|||||||
}
|
}
|
||||||
|
|
||||||
// fprint formats using the default print settings and writes to fd
|
// fprint formats using the default print settings and writes to fd
|
||||||
fprint :: proc(fd: os.Handle, #no_capture args: ..any, sep := " ", flush := true, loc := #caller_location) -> int {
|
fprint :: proc(fd: os.Handle, args: ..any, sep := " ", flush := true, loc := #caller_location) -> int {
|
||||||
buf: [1024]byte
|
buf: [1024]byte
|
||||||
b: bufio.Writer
|
b: bufio.Writer
|
||||||
defer bufio.writer_flush(&b)
|
defer bufio.writer_flush(&b)
|
||||||
@@ -54,7 +54,7 @@ fprint :: proc(fd: os.Handle, #no_capture args: ..any, sep := " ", flush := true
|
|||||||
}
|
}
|
||||||
|
|
||||||
// fprintln formats using the default print settings and writes to fd
|
// fprintln formats using the default print settings and writes to fd
|
||||||
fprintln :: proc(fd: os.Handle, #no_capture args: ..any, sep := " ", flush := true, loc := #caller_location) -> int {
|
fprintln :: proc(fd: os.Handle, args: ..any, sep := " ", flush := true, loc := #caller_location) -> int {
|
||||||
buf: [1024]byte
|
buf: [1024]byte
|
||||||
b: bufio.Writer
|
b: bufio.Writer
|
||||||
defer bufio.writer_flush(&b)
|
defer bufio.writer_flush(&b)
|
||||||
@@ -66,7 +66,7 @@ fprintln :: proc(fd: os.Handle, #no_capture args: ..any, sep := " ", flush := tr
|
|||||||
}
|
}
|
||||||
|
|
||||||
// fprintf formats according to the specified format string and writes to fd
|
// fprintf formats according to the specified format string and writes to fd
|
||||||
fprintf :: proc(fd: os.Handle, fmt: string, #no_capture args: ..any, flush := true, newline := false, loc := #caller_location) -> int {
|
fprintf :: proc(fd: os.Handle, fmt: string, args: ..any, flush := true, newline := false, loc := #caller_location) -> int {
|
||||||
buf: [1024]byte
|
buf: [1024]byte
|
||||||
b: bufio.Writer
|
b: bufio.Writer
|
||||||
defer bufio.writer_flush(&b)
|
defer bufio.writer_flush(&b)
|
||||||
@@ -78,24 +78,24 @@ fprintf :: proc(fd: os.Handle, fmt: string, #no_capture args: ..any, flush := tr
|
|||||||
}
|
}
|
||||||
|
|
||||||
// fprintfln formats according to the specified format string and writes to fd, followed by a newline.
|
// fprintfln formats according to the specified format string and writes to fd, followed by a newline.
|
||||||
fprintfln :: proc(fd: os.Handle, fmt: string, #no_capture args: ..any, flush := true, loc := #caller_location) -> int {
|
fprintfln :: proc(fd: os.Handle, fmt: string, args: ..any, flush := true, loc := #caller_location) -> int {
|
||||||
return fprintf(fd, fmt, ..args, flush=flush, newline=true, loc=loc)
|
return fprintf(fd, fmt, ..args, flush=flush, newline=true, loc=loc)
|
||||||
}
|
}
|
||||||
|
|
||||||
// print formats using the default print settings and writes to stdout
|
// print formats using the default print settings and writes to stdout
|
||||||
print :: proc(#no_capture args: ..any, sep := " ", flush := true) -> int { return wprint(w=stdout, args=args, sep=sep, flush=flush) }
|
print :: proc(args: ..any, sep := " ", flush := true) -> int { return wprint(w=stdout, args=args, sep=sep, flush=flush) }
|
||||||
// println formats using the default print settings and writes to stdout
|
// println formats using the default print settings and writes to stdout
|
||||||
println :: proc(#no_capture args: ..any, sep := " ", flush := true) -> int { return wprintln(w=stdout, args=args, sep=sep, flush=flush) }
|
println :: proc(args: ..any, sep := " ", flush := true) -> int { return wprintln(w=stdout, args=args, sep=sep, flush=flush) }
|
||||||
// printf formats according to the specififed format string and writes to stdout
|
// printf formats according to the specififed format string and writes to stdout
|
||||||
printf :: proc(fmt: string, #no_capture args: ..any, flush := true) -> int { return wprintf(stdout, fmt, ..args, flush=flush) }
|
printf :: proc(fmt: string, args: ..any, flush := true) -> int { return wprintf(stdout, fmt, ..args, flush=flush) }
|
||||||
// printfln formats according to the specified format string and writes to stdout, followed by a newline.
|
// printfln formats according to the specified format string and writes to stdout, followed by a newline.
|
||||||
printfln :: proc(fmt: string, #no_capture args: ..any, flush := true) -> int { return wprintf(stdout, fmt, ..args, flush=flush, newline=true) }
|
printfln :: proc(fmt: string, args: ..any, flush := true) -> int { return wprintf(stdout, fmt, ..args, flush=flush, newline=true) }
|
||||||
|
|
||||||
// eprint formats using the default print settings and writes to stderr
|
// eprint formats using the default print settings and writes to stderr
|
||||||
eprint :: proc(#no_capture args: ..any, sep := " ", flush := true) -> int { return wprint(w=stderr, args=args, sep=sep, flush=flush) }
|
eprint :: proc(args: ..any, sep := " ", flush := true) -> int { return wprint(w=stderr, args=args, sep=sep, flush=flush) }
|
||||||
// eprintln formats using the default print settings and writes to stderr
|
// eprintln formats using the default print settings and writes to stderr
|
||||||
eprintln :: proc(#no_capture args: ..any, sep := " ", flush := true) -> int { return wprintln(w=stderr, args=args, sep=sep, flush=flush) }
|
eprintln :: proc(args: ..any, sep := " ", flush := true) -> int { return wprintln(w=stderr, args=args, sep=sep, flush=flush) }
|
||||||
// eprintf formats according to the specififed format string and writes to stderr
|
// eprintf formats according to the specififed format string and writes to stderr
|
||||||
eprintf :: proc(fmt: string, #no_capture args: ..any, flush := true) -> int { return wprintf(stderr, fmt, ..args, flush=flush) }
|
eprintf :: proc(fmt: string, args: ..any, flush := true) -> int { return wprintf(stderr, fmt, ..args, flush=flush) }
|
||||||
// eprintfln formats according to the specified format string and writes to stderr, followed by a newline.
|
// eprintfln formats according to the specified format string and writes to stderr, followed by a newline.
|
||||||
eprintfln :: proc(fmt: string, #no_capture args: ..any, flush := true) -> int { return wprintf(stdout, fmt, ..args, flush=flush, newline=true) }
|
eprintfln :: proc(fmt: string, args: ..any, flush := true) -> int { return wprintf(stdout, fmt, ..args, flush=flush, newline=true) }
|
||||||
|
|||||||
+12
-12
@@ -9,7 +9,7 @@ import "core:io"
|
|||||||
import "core:bufio"
|
import "core:bufio"
|
||||||
|
|
||||||
// fprint formats using the default print settings and writes to fd
|
// fprint formats using the default print settings and writes to fd
|
||||||
fprint :: proc(fd: os.Handle, #no_capture args: ..any, sep := " ", flush := true) -> int {
|
fprint :: proc(fd: os.Handle, args: ..any, sep := " ", flush := true) -> int {
|
||||||
buf: [1024]byte
|
buf: [1024]byte
|
||||||
b: bufio.Writer
|
b: bufio.Writer
|
||||||
defer bufio.writer_flush(&b)
|
defer bufio.writer_flush(&b)
|
||||||
@@ -20,7 +20,7 @@ fprint :: proc(fd: os.Handle, #no_capture args: ..any, sep := " ", flush := true
|
|||||||
}
|
}
|
||||||
|
|
||||||
// fprintln formats using the default print settings and writes to fd
|
// fprintln formats using the default print settings and writes to fd
|
||||||
fprintln :: proc(fd: os.Handle, #no_capture args: ..any, sep := " ", flush := true) -> int {
|
fprintln :: proc(fd: os.Handle, args: ..any, sep := " ", flush := true) -> int {
|
||||||
buf: [1024]byte
|
buf: [1024]byte
|
||||||
b: bufio.Writer
|
b: bufio.Writer
|
||||||
defer bufio.writer_flush(&b)
|
defer bufio.writer_flush(&b)
|
||||||
@@ -31,7 +31,7 @@ fprintln :: proc(fd: os.Handle, #no_capture args: ..any, sep := " ", flush := tr
|
|||||||
return wprintln(w, ..args, sep=sep, flush=flush)
|
return wprintln(w, ..args, sep=sep, flush=flush)
|
||||||
}
|
}
|
||||||
// fprintf formats according to the specified format string and writes to fd
|
// fprintf formats according to the specified format string and writes to fd
|
||||||
fprintf :: proc(fd: os.Handle, fmt: string, #no_capture args: ..any, flush := true, newline := false) -> int {
|
fprintf :: proc(fd: os.Handle, fmt: string, args: ..any, flush := true, newline := false) -> int {
|
||||||
buf: [1024]byte
|
buf: [1024]byte
|
||||||
b: bufio.Writer
|
b: bufio.Writer
|
||||||
defer bufio.writer_flush(&b)
|
defer bufio.writer_flush(&b)
|
||||||
@@ -42,7 +42,7 @@ fprintf :: proc(fd: os.Handle, fmt: string, #no_capture args: ..any, flush := tr
|
|||||||
return wprintf(w, fmt, ..args, flush=flush, newline=newline)
|
return wprintf(w, fmt, ..args, flush=flush, newline=newline)
|
||||||
}
|
}
|
||||||
// fprintfln formats according to the specified format string and writes to fd, followed by a newline.
|
// fprintfln formats according to the specified format string and writes to fd, followed by a newline.
|
||||||
fprintfln :: proc(fd: os.Handle, fmt: string, #no_capture args: ..any, flush := true) -> int {
|
fprintfln :: proc(fd: os.Handle, fmt: string, args: ..any, flush := true) -> int {
|
||||||
return fprintf(fd, fmt, ..args, flush=flush, newline=true)
|
return fprintf(fd, fmt, ..args, flush=flush, newline=true)
|
||||||
}
|
}
|
||||||
fprint_type :: proc(fd: os.Handle, info: ^runtime.Type_Info, flush := true) -> (n: int, err: io.Error) {
|
fprint_type :: proc(fd: os.Handle, info: ^runtime.Type_Info, flush := true) -> (n: int, err: io.Error) {
|
||||||
@@ -67,19 +67,19 @@ fprint_typeid :: proc(fd: os.Handle, id: typeid, flush := true) -> (n: int, err:
|
|||||||
}
|
}
|
||||||
|
|
||||||
// print formats using the default print settings and writes to os.stdout
|
// print formats using the default print settings and writes to os.stdout
|
||||||
print :: proc(#no_capture args: ..any, sep := " ", flush := true) -> int { return fprint(os.stdout, ..args, sep=sep, flush=flush) }
|
print :: proc(args: ..any, sep := " ", flush := true) -> int { return fprint(os.stdout, ..args, sep=sep, flush=flush) }
|
||||||
// println formats using the default print settings and writes to os.stdout
|
// println formats using the default print settings and writes to os.stdout
|
||||||
println :: proc(#no_capture args: ..any, sep := " ", flush := true) -> int { return fprintln(os.stdout, ..args, sep=sep, flush=flush) }
|
println :: proc(args: ..any, sep := " ", flush := true) -> int { return fprintln(os.stdout, ..args, sep=sep, flush=flush) }
|
||||||
// printf formats according to the specified format string and writes to os.stdout
|
// printf formats according to the specified format string and writes to os.stdout
|
||||||
printf :: proc(fmt: string, #no_capture args: ..any, flush := true) -> int { return fprintf(os.stdout, fmt, ..args, flush=flush) }
|
printf :: proc(fmt: string, args: ..any, flush := true) -> int { return fprintf(os.stdout, fmt, ..args, flush=flush) }
|
||||||
// printfln formats according to the specified format string and writes to os.stdout, followed by a newline.
|
// printfln formats according to the specified format string and writes to os.stdout, followed by a newline.
|
||||||
printfln :: proc(fmt: string, #no_capture args: ..any, flush := true) -> int { return fprintf(os.stdout, fmt, ..args, flush=flush, newline=true) }
|
printfln :: proc(fmt: string, args: ..any, flush := true) -> int { return fprintf(os.stdout, fmt, ..args, flush=flush, newline=true) }
|
||||||
|
|
||||||
// eprint formats using the default print settings and writes to os.stderr
|
// eprint formats using the default print settings and writes to os.stderr
|
||||||
eprint :: proc(#no_capture args: ..any, sep := " ", flush := true) -> int { return fprint(os.stderr, ..args, sep=sep, flush=flush) }
|
eprint :: proc(args: ..any, sep := " ", flush := true) -> int { return fprint(os.stderr, ..args, sep=sep, flush=flush) }
|
||||||
// eprintln formats using the default print settings and writes to os.stderr
|
// eprintln formats using the default print settings and writes to os.stderr
|
||||||
eprintln :: proc(#no_capture args: ..any, sep := " ", flush := true) -> int { return fprintln(os.stderr, ..args, sep=sep, flush=flush) }
|
eprintln :: proc(args: ..any, sep := " ", flush := true) -> int { return fprintln(os.stderr, ..args, sep=sep, flush=flush) }
|
||||||
// eprintf formats according to the specified format string and writes to os.stderr
|
// eprintf formats according to the specified format string and writes to os.stderr
|
||||||
eprintf :: proc(fmt: string, #no_capture args: ..any, flush := true) -> int { return fprintf(os.stderr, fmt, ..args, flush=flush) }
|
eprintf :: proc(fmt: string, args: ..any, flush := true) -> int { return fprintf(os.stderr, fmt, ..args, flush=flush) }
|
||||||
// eprintfln formats according to the specified format string and writes to os.stderr, followed by a newline.
|
// eprintfln formats according to the specified format string and writes to os.stderr, followed by a newline.
|
||||||
eprintfln :: proc(fmt: string, #no_capture args: ..any, flush := true) -> int { return fprintf(os.stderr, fmt, ..args, flush=flush, newline=true) }
|
eprintfln :: proc(fmt: string, args: ..any, flush := true) -> int { return fprintf(os.stderr, fmt, ..args, flush=flush, newline=true) }
|
||||||
|
|||||||
+16
-16
@@ -75,43 +75,43 @@ nil_logger :: proc() -> Logger {
|
|||||||
return Logger{nil_logger_proc, nil, Level.Debug, nil}
|
return Logger{nil_logger_proc, nil, Level.Debug, nil}
|
||||||
}
|
}
|
||||||
|
|
||||||
debugf :: proc(fmt_str: string, #no_capture args: ..any, location := #caller_location) {
|
debugf :: proc(fmt_str: string, args: ..any, location := #caller_location) {
|
||||||
logf(.Debug, fmt_str, ..args, location=location)
|
logf(.Debug, fmt_str, ..args, location=location)
|
||||||
}
|
}
|
||||||
infof :: proc(fmt_str: string, #no_capture args: ..any, location := #caller_location) {
|
infof :: proc(fmt_str: string, args: ..any, location := #caller_location) {
|
||||||
logf(.Info, fmt_str, ..args, location=location)
|
logf(.Info, fmt_str, ..args, location=location)
|
||||||
}
|
}
|
||||||
warnf :: proc(fmt_str: string, #no_capture args: ..any, location := #caller_location) {
|
warnf :: proc(fmt_str: string, args: ..any, location := #caller_location) {
|
||||||
logf(.Warning, fmt_str, ..args, location=location)
|
logf(.Warning, fmt_str, ..args, location=location)
|
||||||
}
|
}
|
||||||
errorf :: proc(fmt_str: string, #no_capture args: ..any, location := #caller_location) {
|
errorf :: proc(fmt_str: string, args: ..any, location := #caller_location) {
|
||||||
logf(.Error, fmt_str, ..args, location=location)
|
logf(.Error, fmt_str, ..args, location=location)
|
||||||
}
|
}
|
||||||
fatalf :: proc(fmt_str: string, #no_capture args: ..any, location := #caller_location) {
|
fatalf :: proc(fmt_str: string, args: ..any, location := #caller_location) {
|
||||||
logf(.Fatal, fmt_str, ..args, location=location)
|
logf(.Fatal, fmt_str, ..args, location=location)
|
||||||
}
|
}
|
||||||
|
|
||||||
debug :: proc(#no_capture args: ..any, sep := " ", location := #caller_location) {
|
debug :: proc(args: ..any, sep := " ", location := #caller_location) {
|
||||||
log(.Debug, ..args, sep=sep, location=location)
|
log(.Debug, ..args, sep=sep, location=location)
|
||||||
}
|
}
|
||||||
info :: proc(#no_capture args: ..any, sep := " ", location := #caller_location) {
|
info :: proc(args: ..any, sep := " ", location := #caller_location) {
|
||||||
log(.Info, ..args, sep=sep, location=location)
|
log(.Info, ..args, sep=sep, location=location)
|
||||||
}
|
}
|
||||||
warn :: proc(#no_capture args: ..any, sep := " ", location := #caller_location) {
|
warn :: proc(args: ..any, sep := " ", location := #caller_location) {
|
||||||
log(.Warning, ..args, sep=sep, location=location)
|
log(.Warning, ..args, sep=sep, location=location)
|
||||||
}
|
}
|
||||||
error :: proc(#no_capture args: ..any, sep := " ", location := #caller_location) {
|
error :: proc(args: ..any, sep := " ", location := #caller_location) {
|
||||||
log(.Error, ..args, sep=sep, location=location)
|
log(.Error, ..args, sep=sep, location=location)
|
||||||
}
|
}
|
||||||
fatal :: proc(#no_capture args: ..any, sep := " ", location := #caller_location) {
|
fatal :: proc(args: ..any, sep := " ", location := #caller_location) {
|
||||||
log(.Fatal, ..args, sep=sep, location=location)
|
log(.Fatal, ..args, sep=sep, location=location)
|
||||||
}
|
}
|
||||||
|
|
||||||
panic :: proc(#no_capture args: ..any, location := #caller_location) -> ! {
|
panic :: proc(args: ..any, location := #caller_location) -> ! {
|
||||||
log(.Fatal, ..args, location=location)
|
log(.Fatal, ..args, location=location)
|
||||||
runtime.panic("log.panic", location)
|
runtime.panic("log.panic", location)
|
||||||
}
|
}
|
||||||
panicf :: proc(fmt_str: string, #no_capture args: ..any, location := #caller_location) -> ! {
|
panicf :: proc(fmt_str: string, args: ..any, location := #caller_location) -> ! {
|
||||||
logf(.Fatal, fmt_str, ..args, location=location)
|
logf(.Fatal, fmt_str, ..args, location=location)
|
||||||
runtime.panic("log.panicf", location)
|
runtime.panic("log.panicf", location)
|
||||||
}
|
}
|
||||||
@@ -133,14 +133,14 @@ assert :: proc(condition: bool, message := "", loc := #caller_location) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
@(disabled=ODIN_DISABLE_ASSERT)
|
@(disabled=ODIN_DISABLE_ASSERT)
|
||||||
assertf :: proc(condition: bool, fmt_str: string, #no_capture args: ..any, loc := #caller_location) {
|
assertf :: proc(condition: bool, fmt_str: string, args: ..any, loc := #caller_location) {
|
||||||
if !condition {
|
if !condition {
|
||||||
// NOTE(dragos): We are using the same trick as in builtin.assert
|
// NOTE(dragos): We are using the same trick as in builtin.assert
|
||||||
// to improve performance to make the CPU not
|
// to improve performance to make the CPU not
|
||||||
// execute speculatively, making it about an order of
|
// execute speculatively, making it about an order of
|
||||||
// magnitude faster
|
// magnitude faster
|
||||||
@(cold)
|
@(cold)
|
||||||
internal :: proc(loc: runtime.Source_Code_Location, fmt_str: string, #no_capture args: ..any) {
|
internal :: proc(loc: runtime.Source_Code_Location, fmt_str: string, args: ..any) {
|
||||||
p := context.assertion_failure_proc
|
p := context.assertion_failure_proc
|
||||||
if p == nil {
|
if p == nil {
|
||||||
p = runtime.default_assertion_failure_proc
|
p = runtime.default_assertion_failure_proc
|
||||||
@@ -155,7 +155,7 @@ assertf :: proc(condition: bool, fmt_str: string, #no_capture args: ..any, loc :
|
|||||||
|
|
||||||
|
|
||||||
|
|
||||||
log :: proc(level: Level, #no_capture args: ..any, sep := " ", location := #caller_location) {
|
log :: proc(level: Level, args: ..any, sep := " ", location := #caller_location) {
|
||||||
logger := context.logger
|
logger := context.logger
|
||||||
if logger.procedure == nil {
|
if logger.procedure == nil {
|
||||||
return
|
return
|
||||||
@@ -167,7 +167,7 @@ log :: proc(level: Level, #no_capture args: ..any, sep := " ", location := #call
|
|||||||
logger.procedure(logger.data, level, str, logger.options, location)
|
logger.procedure(logger.data, level, str, logger.options, location)
|
||||||
}
|
}
|
||||||
|
|
||||||
logf :: proc(level: Level, fmt_str: string, #no_capture args: ..any, location := #caller_location) {
|
logf :: proc(level: Level, fmt_str: string, args: ..any, location := #caller_location) {
|
||||||
logger := context.logger
|
logger := context.logger
|
||||||
if logger.procedure == nil {
|
if logger.procedure == nil {
|
||||||
return
|
return
|
||||||
|
|||||||
@@ -404,7 +404,7 @@ clear_if_uninitialized_single :: proc(arg: ^Int, allocator := context.allocator)
|
|||||||
return #force_inline internal_clear_if_uninitialized_single(arg, allocator)
|
return #force_inline internal_clear_if_uninitialized_single(arg, allocator)
|
||||||
}
|
}
|
||||||
|
|
||||||
clear_if_uninitialized_multi :: proc(#no_capture args: ..^Int, allocator := context.allocator) -> (err: Error) {
|
clear_if_uninitialized_multi :: proc(args: ..^Int, allocator := context.allocator) -> (err: Error) {
|
||||||
args := args
|
args := args
|
||||||
assert_if_nil(..args)
|
assert_if_nil(..args)
|
||||||
|
|
||||||
@@ -420,7 +420,7 @@ error_if_immutable_single :: proc(arg: ^Int) -> (err: Error) {
|
|||||||
return nil
|
return nil
|
||||||
}
|
}
|
||||||
|
|
||||||
error_if_immutable_multi :: proc(#no_capture args: ..^Int) -> (err: Error) {
|
error_if_immutable_multi :: proc(args: ..^Int) -> (err: Error) {
|
||||||
for i in args {
|
for i in args {
|
||||||
if i != nil && .Immutable in i.flags { return .Assignment_To_Immutable }
|
if i != nil && .Immutable in i.flags { return .Assignment_To_Immutable }
|
||||||
}
|
}
|
||||||
@@ -431,7 +431,7 @@ error_if_immutable :: proc {error_if_immutable_single, error_if_immutable_multi,
|
|||||||
/*
|
/*
|
||||||
Allocates several `Int`s at once.
|
Allocates several `Int`s at once.
|
||||||
*/
|
*/
|
||||||
int_init_multi :: proc(#no_capture integers: ..^Int, allocator := context.allocator) -> (err: Error) {
|
int_init_multi :: proc(integers: ..^Int, allocator := context.allocator) -> (err: Error) {
|
||||||
assert_if_nil(..integers)
|
assert_if_nil(..integers)
|
||||||
|
|
||||||
integers := integers
|
integers := integers
|
||||||
@@ -812,13 +812,13 @@ assert_if_nil :: proc{
|
|||||||
assert_if_nil_rat,
|
assert_if_nil_rat,
|
||||||
}
|
}
|
||||||
|
|
||||||
assert_if_nil_int :: #force_inline proc(#no_capture integers: ..^Int, loc := #caller_location) {
|
assert_if_nil_int :: #force_inline proc(integers: ..^Int, loc := #caller_location) {
|
||||||
for i in integers {
|
for i in integers {
|
||||||
assert(i != nil, "(nil)", loc)
|
assert(i != nil, "(nil)", loc)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
assert_if_nil_rat :: #force_inline proc(#no_capture rationals: ..^Rat, loc := #caller_location) {
|
assert_if_nil_rat :: #force_inline proc(rationals: ..^Rat, loc := #caller_location) {
|
||||||
for r in rationals {
|
for r in rationals {
|
||||||
assert(r != nil, "(nil)", loc)
|
assert(r != nil, "(nil)", loc)
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1844,7 +1844,7 @@ internal_root_n :: proc { internal_int_root_n, }
|
|||||||
Deallocates the backing memory of one or more `Int`s.
|
Deallocates the backing memory of one or more `Int`s.
|
||||||
Asssumes none of the `integers` to be a `nil`.
|
Asssumes none of the `integers` to be a `nil`.
|
||||||
*/
|
*/
|
||||||
internal_int_destroy :: proc(#no_capture integers: ..^Int) {
|
internal_int_destroy :: proc(integers: ..^Int) {
|
||||||
integers := integers
|
integers := integers
|
||||||
|
|
||||||
for &a in integers {
|
for &a in integers {
|
||||||
@@ -2872,7 +2872,7 @@ internal_clear_if_uninitialized_single :: proc(arg: ^Int, allocator := context.a
|
|||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
|
|
||||||
internal_clear_if_uninitialized_multi :: proc(#no_capture args: ..^Int, allocator := context.allocator) -> (err: Error) {
|
internal_clear_if_uninitialized_multi :: proc(args: ..^Int, allocator := context.allocator) -> (err: Error) {
|
||||||
context.allocator = allocator
|
context.allocator = allocator
|
||||||
|
|
||||||
for i in args {
|
for i in args {
|
||||||
@@ -2890,7 +2890,7 @@ internal_error_if_immutable_single :: proc(arg: ^Int) -> (err: Error) {
|
|||||||
return nil
|
return nil
|
||||||
}
|
}
|
||||||
|
|
||||||
internal_error_if_immutable_multi :: proc(#no_capture args: ..^Int) -> (err: Error) {
|
internal_error_if_immutable_multi :: proc(args: ..^Int) -> (err: Error) {
|
||||||
for i in args {
|
for i in args {
|
||||||
if i != nil && .Immutable in i.flags { return .Assignment_To_Immutable }
|
if i != nil && .Immutable in i.flags { return .Assignment_To_Immutable }
|
||||||
}
|
}
|
||||||
@@ -2901,7 +2901,7 @@ internal_error_if_immutable :: proc {internal_error_if_immutable_single, interna
|
|||||||
/*
|
/*
|
||||||
Allocates several `Int`s at once.
|
Allocates several `Int`s at once.
|
||||||
*/
|
*/
|
||||||
internal_int_init_multi :: proc(#no_capture integers: ..^Int, allocator := context.allocator) -> (err: Error) {
|
internal_int_init_multi :: proc(integers: ..^Int, allocator := context.allocator) -> (err: Error) {
|
||||||
context.allocator = allocator
|
context.allocator = allocator
|
||||||
|
|
||||||
integers := integers
|
integers := integers
|
||||||
|
|||||||
@@ -5,8 +5,8 @@ import "core:odin/tokenizer"
|
|||||||
|
|
||||||
import "core:fmt"
|
import "core:fmt"
|
||||||
|
|
||||||
Warning_Handler :: #type proc(pos: tokenizer.Pos, fmt: string, #no_capture args: ..any)
|
Warning_Handler :: #type proc(pos: tokenizer.Pos, fmt: string, args: ..any)
|
||||||
Error_Handler :: #type proc(pos: tokenizer.Pos, fmt: string, #no_capture args: ..any)
|
Error_Handler :: #type proc(pos: tokenizer.Pos, fmt: string, args: ..any)
|
||||||
|
|
||||||
Flag :: enum u32 {
|
Flag :: enum u32 {
|
||||||
Optional_Semicolons,
|
Optional_Semicolons,
|
||||||
@@ -67,25 +67,25 @@ Import_Decl_Kind :: enum {
|
|||||||
|
|
||||||
|
|
||||||
|
|
||||||
default_warning_handler :: proc(pos: tokenizer.Pos, msg: string, #no_capture args: ..any) {
|
default_warning_handler :: proc(pos: tokenizer.Pos, msg: string, args: ..any) {
|
||||||
fmt.eprintf("%s(%d:%d): Warning: ", pos.file, pos.line, pos.column)
|
fmt.eprintf("%s(%d:%d): Warning: ", pos.file, pos.line, pos.column)
|
||||||
fmt.eprintf(msg, ..args)
|
fmt.eprintf(msg, ..args)
|
||||||
fmt.eprintf("\n")
|
fmt.eprintf("\n")
|
||||||
}
|
}
|
||||||
default_error_handler :: proc(pos: tokenizer.Pos, msg: string, #no_capture args: ..any) {
|
default_error_handler :: proc(pos: tokenizer.Pos, msg: string, args: ..any) {
|
||||||
fmt.eprintf("%s(%d:%d): ", pos.file, pos.line, pos.column)
|
fmt.eprintf("%s(%d:%d): ", pos.file, pos.line, pos.column)
|
||||||
fmt.eprintf(msg, ..args)
|
fmt.eprintf(msg, ..args)
|
||||||
fmt.eprintf("\n")
|
fmt.eprintf("\n")
|
||||||
}
|
}
|
||||||
|
|
||||||
warn :: proc(p: ^Parser, pos: tokenizer.Pos, msg: string, #no_capture args: ..any) {
|
warn :: proc(p: ^Parser, pos: tokenizer.Pos, msg: string, args: ..any) {
|
||||||
if p.warn != nil {
|
if p.warn != nil {
|
||||||
p.warn(pos, msg, ..args)
|
p.warn(pos, msg, ..args)
|
||||||
}
|
}
|
||||||
p.file.syntax_warning_count += 1
|
p.file.syntax_warning_count += 1
|
||||||
}
|
}
|
||||||
|
|
||||||
error :: proc(p: ^Parser, pos: tokenizer.Pos, msg: string, #no_capture args: ..any) {
|
error :: proc(p: ^Parser, pos: tokenizer.Pos, msg: string, args: ..any) {
|
||||||
if p.err != nil {
|
if p.err != nil {
|
||||||
p.err(pos, msg, ..args)
|
p.err(pos, msg, ..args)
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -4,7 +4,7 @@ import "core:fmt"
|
|||||||
import "core:unicode"
|
import "core:unicode"
|
||||||
import "core:unicode/utf8"
|
import "core:unicode/utf8"
|
||||||
|
|
||||||
Error_Handler :: #type proc(pos: Pos, fmt: string, #no_capture args: ..any)
|
Error_Handler :: #type proc(pos: Pos, fmt: string, args: ..any)
|
||||||
|
|
||||||
Flag :: enum {
|
Flag :: enum {
|
||||||
Insert_Semicolon,
|
Insert_Semicolon,
|
||||||
@@ -62,13 +62,13 @@ offset_to_pos :: proc(t: ^Tokenizer, offset: int) -> Pos {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
default_error_handler :: proc(pos: Pos, msg: string, #no_capture args: ..any) {
|
default_error_handler :: proc(pos: Pos, msg: string, args: ..any) {
|
||||||
fmt.eprintf("%s(%d:%d) ", pos.file, pos.line, pos.column)
|
fmt.eprintf("%s(%d:%d) ", pos.file, pos.line, pos.column)
|
||||||
fmt.eprintf(msg, ..args)
|
fmt.eprintf(msg, ..args)
|
||||||
fmt.eprintf("\n")
|
fmt.eprintf("\n")
|
||||||
}
|
}
|
||||||
|
|
||||||
error :: proc(t: ^Tokenizer, offset: int, msg: string, #no_capture args: ..any) {
|
error :: proc(t: ^Tokenizer, offset: int, msg: string, args: ..any) {
|
||||||
pos := offset_to_pos(t, offset)
|
pos := offset_to_pos(t, offset)
|
||||||
if t.err != nil {
|
if t.err != nil {
|
||||||
t.err(pos, msg, ..args)
|
t.err(pos, msg, ..args)
|
||||||
|
|||||||
@@ -53,12 +53,12 @@ T :: struct {
|
|||||||
|
|
||||||
|
|
||||||
@(deprecated="prefer `log.error`")
|
@(deprecated="prefer `log.error`")
|
||||||
error :: proc(t: ^T, #no_capture args: ..any, loc := #caller_location) {
|
error :: proc(t: ^T, args: ..any, loc := #caller_location) {
|
||||||
pkg_log.error(..args, location = loc)
|
pkg_log.error(..args, location = loc)
|
||||||
}
|
}
|
||||||
|
|
||||||
@(deprecated="prefer `log.errorf`")
|
@(deprecated="prefer `log.errorf`")
|
||||||
errorf :: proc(t: ^T, format: string, #no_capture args: ..any, loc := #caller_location) {
|
errorf :: proc(t: ^T, format: string, args: ..any, loc := #caller_location) {
|
||||||
pkg_log.errorf(format, ..args, location = loc)
|
pkg_log.errorf(format, ..args, location = loc)
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -87,12 +87,12 @@ failed :: proc(t: ^T) -> bool {
|
|||||||
}
|
}
|
||||||
|
|
||||||
@(deprecated="prefer `log.info`")
|
@(deprecated="prefer `log.info`")
|
||||||
log :: proc(t: ^T, #no_capture args: ..any, loc := #caller_location) {
|
log :: proc(t: ^T, args: ..any, loc := #caller_location) {
|
||||||
pkg_log.info(..args, location = loc)
|
pkg_log.info(..args, location = loc)
|
||||||
}
|
}
|
||||||
|
|
||||||
@(deprecated="prefer `log.infof`")
|
@(deprecated="prefer `log.infof`")
|
||||||
logf :: proc(t: ^T, format: string, #no_capture args: ..any, loc := #caller_location) {
|
logf :: proc(t: ^T, format: string, args: ..any, loc := #caller_location) {
|
||||||
pkg_log.infof(format, ..args, location = loc)
|
pkg_log.infof(format, ..args, location = loc)
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -121,7 +121,7 @@ expect :: proc(t: ^T, ok: bool, msg: string = "", loc := #caller_location) -> bo
|
|||||||
return ok
|
return ok
|
||||||
}
|
}
|
||||||
|
|
||||||
expectf :: proc(t: ^T, ok: bool, format: string, #no_capture args: ..any, loc := #caller_location) -> bool {
|
expectf :: proc(t: ^T, ok: bool, format: string, args: ..any, loc := #caller_location) -> bool {
|
||||||
if !ok {
|
if !ok {
|
||||||
pkg_log.errorf(format, ..args, location=loc)
|
pkg_log.errorf(format, ..args, location=loc)
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -250,7 +250,7 @@ error :: proc(s: ^Scanner, msg: string) {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
errorf :: proc(s: ^Scanner, format: string, #no_capture args: ..any) {
|
errorf :: proc(s: ^Scanner, format: string, args: ..any) {
|
||||||
error(s, fmt.tprintf(format, ..args))
|
error(s, fmt.tprintf(format, ..args))
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -145,7 +145,7 @@ set_cell_value_and_alignment :: proc(tbl: ^Table, row, col: int, value: any, ali
|
|||||||
cell.alignment = alignment
|
cell.alignment = alignment
|
||||||
}
|
}
|
||||||
|
|
||||||
format :: proc(tbl: ^Table, _fmt: string, #no_capture args: ..any) -> string {
|
format :: proc(tbl: ^Table, _fmt: string, args: ..any) -> string {
|
||||||
context.allocator = tbl.format_allocator
|
context.allocator = tbl.format_allocator
|
||||||
return fmt.aprintf(_fmt, ..args)
|
return fmt.aprintf(_fmt, ..args)
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -12,7 +12,7 @@ import "core:fmt"
|
|||||||
/*
|
/*
|
||||||
Silent error handler for the parser.
|
Silent error handler for the parser.
|
||||||
*/
|
*/
|
||||||
Error_Handler :: proc(pos: xml.Pos, fmt: string, #no_capture args: ..any) {}
|
Error_Handler :: proc(pos: xml.Pos, fmt: string, args: ..any) {}
|
||||||
|
|
||||||
OPTIONS :: xml.Options{ flags = { .Ignore_Unsupported, }, expected_doctype = "unicode", }
|
OPTIONS :: xml.Options{ flags = { .Ignore_Unsupported, }, expected_doctype = "unicode", }
|
||||||
|
|
||||||
|
|||||||
+9
-1
@@ -2065,9 +2065,10 @@ gb_internal Type *check_get_params(CheckerContext *ctx, Scope *scope, Ast *_para
|
|||||||
} else if (p->flags & FieldFlag_c_vararg) {
|
} else if (p->flags & FieldFlag_c_vararg) {
|
||||||
error(name, "'#no_capture' cannot be applied to a #c_vararg parameter");
|
error(name, "'#no_capture' cannot be applied to a #c_vararg parameter");
|
||||||
p->flags &= ~FieldFlag_no_capture;
|
p->flags &= ~FieldFlag_no_capture;
|
||||||
|
} else {
|
||||||
|
error(name, "'#no_capture' is already implied on all variadic parameter");
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if (is_poly_name) {
|
if (is_poly_name) {
|
||||||
if (p->flags&FieldFlag_no_alias) {
|
if (p->flags&FieldFlag_no_alias) {
|
||||||
error(name, "'#no_alias' can only be applied to non constant values");
|
error(name, "'#no_alias' can only be applied to non constant values");
|
||||||
@@ -2085,6 +2086,11 @@ gb_internal Type *check_get_params(CheckerContext *ctx, Scope *scope, Ast *_para
|
|||||||
error(name, "'#by_ptr' can only be applied to variable fields");
|
error(name, "'#by_ptr' can only be applied to variable fields");
|
||||||
p->flags &= ~FieldFlag_by_ptr;
|
p->flags &= ~FieldFlag_by_ptr;
|
||||||
}
|
}
|
||||||
|
if (p->flags&FieldFlag_no_capture) {
|
||||||
|
error(name, "'#no_capture' can only be applied to variable fields");
|
||||||
|
p->flags &= ~FieldFlag_no_capture;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
if (!is_type_polymorphic(type) && check_constant_parameter_value(type, params[i])) {
|
if (!is_type_polymorphic(type) && check_constant_parameter_value(type, params[i])) {
|
||||||
// failed
|
// failed
|
||||||
@@ -2104,6 +2110,8 @@ gb_internal Type *check_get_params(CheckerContext *ctx, Scope *scope, Ast *_para
|
|||||||
param->flags |= EntityFlag_Ellipsis;
|
param->flags |= EntityFlag_Ellipsis;
|
||||||
if (is_c_vararg) {
|
if (is_c_vararg) {
|
||||||
param->flags |= EntityFlag_CVarArg;
|
param->flags |= EntityFlag_CVarArg;
|
||||||
|
} else {
|
||||||
|
param->flags |= EntityFlag_NoCapture;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -344,7 +344,6 @@ struct lbProcedure {
|
|||||||
Array<lbNoCaptureData> no_captures;
|
Array<lbNoCaptureData> no_captures;
|
||||||
|
|
||||||
LLVMValueRef temp_callee_return_struct_memory;
|
LLVMValueRef temp_callee_return_struct_memory;
|
||||||
|
|
||||||
Ast *curr_stmt;
|
Ast *curr_stmt;
|
||||||
|
|
||||||
Array<Scope *> scope_stack;
|
Array<Scope *> scope_stack;
|
||||||
|
|||||||
+3
-2
@@ -330,10 +330,11 @@ enum FieldFlag : u32 {
|
|||||||
FieldFlag_subtype = 1<<7,
|
FieldFlag_subtype = 1<<7,
|
||||||
FieldFlag_by_ptr = 1<<8,
|
FieldFlag_by_ptr = 1<<8,
|
||||||
FieldFlag_no_broadcast = 1<<9, // disallow array programming
|
FieldFlag_no_broadcast = 1<<9, // disallow array programming
|
||||||
FieldFlag_no_capture = 1<<10,
|
|
||||||
|
FieldFlag_no_capture = 1<<11,
|
||||||
|
|
||||||
// Internal use by the parser only
|
// Internal use by the parser only
|
||||||
FieldFlag_Tags = 1<<11,
|
FieldFlag_Tags = 1<<15,
|
||||||
FieldFlag_Results = 1<<16,
|
FieldFlag_Results = 1<<16,
|
||||||
|
|
||||||
|
|
||||||
|
|||||||
@@ -8,7 +8,7 @@ import "core:fmt"
|
|||||||
import "core:log"
|
import "core:log"
|
||||||
import "core:hash"
|
import "core:hash"
|
||||||
|
|
||||||
Silent :: proc(pos: xml.Pos, format: string, #no_capture args: ..any) {}
|
Silent :: proc(pos: xml.Pos, format: string, args: ..any) {}
|
||||||
|
|
||||||
OPTIONS :: xml.Options{ flags = { .Ignore_Unsupported, .Intern_Comments, },
|
OPTIONS :: xml.Options{ flags = { .Ignore_Unsupported, .Intern_Comments, },
|
||||||
expected_doctype = "",
|
expected_doctype = "",
|
||||||
|
|||||||
@@ -373,7 +373,7 @@ test_odin_value_export :: proc(t: ^testing.T) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
@(private)
|
@(private)
|
||||||
check :: proc(t: ^testing.T, exp: string, format: string, #no_capture args: ..any, loc := #caller_location) {
|
check :: proc(t: ^testing.T, exp: string, format: string, args: ..any, loc := #caller_location) {
|
||||||
got := fmt.tprintf(format, ..args)
|
got := fmt.tprintf(format, ..args)
|
||||||
testing.expectf(t, got == exp, "(%q, %v): %q != %q", format, args, got, exp, loc = loc)
|
testing.expectf(t, got == exp, "(%q, %v): %q != %q", format, args, got, exp, loc = loc)
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -51,7 +51,7 @@ common_prefix :: proc(strs: []string) -> string {
|
|||||||
return prefix
|
return prefix
|
||||||
}
|
}
|
||||||
|
|
||||||
errorf :: proc(format: string, #no_capture args: ..any) -> ! {
|
errorf :: proc(format: string, args: ..any) -> ! {
|
||||||
fmt.eprintf("%s ", os.args[0])
|
fmt.eprintf("%s ", os.args[0])
|
||||||
fmt.eprintf(format, ..args)
|
fmt.eprintf(format, ..args)
|
||||||
fmt.eprintln()
|
fmt.eprintln()
|
||||||
|
|||||||
Vendored
+1
-1
@@ -754,7 +754,7 @@ when !GL_DEBUG {
|
|||||||
MultiDrawElementsIndirectCount :: proc "c" (mode: i32, type: i32, indirect: [^]DrawElementsIndirectCommand, drawcount: i32, maxdrawcount, stride: i32) { impl_MultiDrawElementsIndirectCount(mode, type, indirect, drawcount, maxdrawcount, stride) }
|
MultiDrawElementsIndirectCount :: proc "c" (mode: i32, type: i32, indirect: [^]DrawElementsIndirectCommand, drawcount: i32, maxdrawcount, stride: i32) { impl_MultiDrawElementsIndirectCount(mode, type, indirect, drawcount, maxdrawcount, stride) }
|
||||||
PolygonOffsetClamp :: proc "c" (factor, units, clamp: f32) { impl_PolygonOffsetClamp(factor, units, clamp) }
|
PolygonOffsetClamp :: proc "c" (factor, units, clamp: f32) { impl_PolygonOffsetClamp(factor, units, clamp) }
|
||||||
} else {
|
} else {
|
||||||
debug_helper :: proc"c"(from_loc: runtime.Source_Code_Location, num_ret: int, #no_capture args: ..any, loc := #caller_location) {
|
debug_helper :: proc"c"(from_loc: runtime.Source_Code_Location, num_ret: int, args: ..any, loc := #caller_location) {
|
||||||
context = runtime.default_context()
|
context = runtime.default_context()
|
||||||
|
|
||||||
Error_Enum :: enum {
|
Error_Enum :: enum {
|
||||||
|
|||||||
Vendored
+2
-2
@@ -1667,7 +1667,7 @@ IsGestureDetected :: proc "c" (gesture: Gesture) -> bool {
|
|||||||
|
|
||||||
|
|
||||||
// Text formatting with variables (sprintf style)
|
// Text formatting with variables (sprintf style)
|
||||||
TextFormat :: proc(text: cstring, #no_capture args: ..any) -> cstring {
|
TextFormat :: proc(text: cstring, args: ..any) -> cstring {
|
||||||
@static buffers: [MAX_TEXTFORMAT_BUFFERS][MAX_TEXT_BUFFER_LENGTH]byte
|
@static buffers: [MAX_TEXTFORMAT_BUFFERS][MAX_TEXT_BUFFER_LENGTH]byte
|
||||||
@static index: u32
|
@static index: u32
|
||||||
|
|
||||||
@@ -1683,7 +1683,7 @@ TextFormat :: proc(text: cstring, #no_capture args: ..any) -> cstring {
|
|||||||
}
|
}
|
||||||
|
|
||||||
// Text formatting with variables (sprintf style) and allocates (must be freed with 'MemFree')
|
// Text formatting with variables (sprintf style) and allocates (must be freed with 'MemFree')
|
||||||
TextFormatAlloc :: proc(text: cstring, #no_capture args: ..any) -> cstring {
|
TextFormatAlloc :: proc(text: cstring, args: ..any) -> cstring {
|
||||||
str := fmt.tprintf(string(text), ..args)
|
str := fmt.tprintf(string(text), ..args)
|
||||||
return strings.clone_to_cstring(str, MemAllocator())
|
return strings.clone_to_cstring(str, MemAllocator())
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user