Browse Source

Imply `#no_capture` to all variadic parameters

gingerBill 1 year ago
parent
commit
8642d719f0

+ 4 - 4
base/runtime/core_builtin.odin

@@ -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

+ 2 - 2
base/runtime/core_builtin_soa.odin

@@ -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)
 }
 }
 
 

+ 2 - 2
base/runtime/print.odin

@@ -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

+ 1 - 1
core/container/small_array/small_array.odin

@@ -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
 }
 }

+ 3 - 3
core/encoding/xml/tokenizer.odin

@@ -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
core/fmt/fmt.odin

@@ -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
core/fmt/fmt_js.odin

@@ -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
core/fmt/fmt_os.odin

@@ -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
core/log/log.odin

@@ -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

+ 5 - 5
core/math/big/helpers.odin

@@ -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)
 	}
 	}

+ 4 - 4
core/math/big/internal.odin

@@ -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

+ 6 - 6
core/odin/parser/parser.odin

@@ -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)
-Error_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, 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)
 	}
 	}

+ 3 - 3
core/odin/tokenizer/tokenizer.odin

@@ -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)

+ 5 - 5
core/testing/testing.odin

@@ -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)
 	}
 	}

+ 1 - 1
core/text/scanner/scanner.odin

@@ -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))
 }
 }
 
 

+ 1 - 1
core/text/table/table.odin

@@ -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)
 }
 }

+ 1 - 1
core/unicode/tools/generate_entity_table.odin

@@ -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
src/check_type.cpp

@@ -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;
 				}
 				}
 			}
 			}
 
 

+ 0 - 1
src/llvm_backend.hpp

@@ -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
src/parser.hpp

@@ -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,
 
 
 
 

+ 1 - 1
tests/core/encoding/xml/test_core_xml.odin

@@ -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 = "",

+ 1 - 1
tests/core/fmt/test_core_fmt.odin

@@ -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)
 }
 }

+ 1 - 1
tests/documentation/documentation_tester.odin

@@ -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()

+ 1 - 1
vendor/OpenGL/wrappers.odin

@@ -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 {

+ 2 - 2
vendor/raylib/raylib.odin

@@ -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())
 }
 }