mirror of
https://github.com/Ed94/Odin.git
synced 2026-08-06 07:38:48 +00:00
Require parentheses for #align(N)
This commit is contained in:
@@ -63,4 +63,4 @@ foreign libc {
|
|||||||
// strictly conformant C implementation is 16 on the platforms we care about.
|
// strictly conformant C implementation is 16 on the platforms we care about.
|
||||||
// The choice of 4096 bytes for storage of this type is more than enough on all
|
// The choice of 4096 bytes for storage of this type is more than enough on all
|
||||||
// relevant platforms.
|
// relevant platforms.
|
||||||
jmp_buf :: struct #align 16 { _: [4096]char, }
|
jmp_buf :: struct #align(16) { _: [4096]char, }
|
||||||
|
|||||||
@@ -18,7 +18,7 @@ foreign _ {
|
|||||||
// strictly conformant C implementation is 16 on the platforms we care about.
|
// strictly conformant C implementation is 16 on the platforms we care about.
|
||||||
// The choice of 4096 bytes for storage of this type is more than enough on all
|
// The choice of 4096 bytes for storage of this type is more than enough on all
|
||||||
// relevant platforms.
|
// relevant platforms.
|
||||||
va_list :: struct #align 16 {
|
va_list :: struct #align(16) {
|
||||||
_: [4096]u8,
|
_: [4096]u8,
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -35,12 +35,12 @@ when ODIN_OS == .Windows {
|
|||||||
clock_t :: distinct long
|
clock_t :: distinct long
|
||||||
time_t :: distinct i64
|
time_t :: distinct i64
|
||||||
|
|
||||||
timespec :: struct #align 8 {
|
timespec :: struct #align(8) {
|
||||||
tv_sec: time_t,
|
tv_sec: time_t,
|
||||||
tv_nsec: long,
|
tv_nsec: long,
|
||||||
}
|
}
|
||||||
|
|
||||||
tm :: struct #align 8 {
|
tm :: struct #align(8) {
|
||||||
tm_sec, tm_min, tm_hour, tm_mday, tm_mon, tm_year, tm_wday, tm_yday, tm_isdst: int,
|
tm_sec, tm_min, tm_hour, tm_mday, tm_mon, tm_year, tm_wday, tm_yday, tm_isdst: int,
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -98,7 +98,7 @@ foreign libc {
|
|||||||
}
|
}
|
||||||
|
|
||||||
// Large enough and aligned enough for any wide-spread in-use libc.
|
// Large enough and aligned enough for any wide-spread in-use libc.
|
||||||
mbstate_t :: struct #align 16 { _: [32]char, }
|
mbstate_t :: struct #align(16) { _: [32]char, }
|
||||||
|
|
||||||
// Odin does not have default argument promotion so the need for a separate type
|
// Odin does not have default argument promotion so the need for a separate type
|
||||||
// here isn't necessary, though make it distinct just to be safe.
|
// here isn't necessary, though make it distinct just to be safe.
|
||||||
|
|||||||
@@ -124,7 +124,7 @@ Allocation_Header :: struct #raw_union {
|
|||||||
requested: u64,
|
requested: u64,
|
||||||
}
|
}
|
||||||
|
|
||||||
Region_Header :: struct #align 16 {
|
Region_Header :: struct #align(16) {
|
||||||
next_region: ^Region, // points to next region in global_heap (linked list)
|
next_region: ^Region, // points to next region in global_heap (linked list)
|
||||||
local_addr: ^^Region, // tracks region ownership via address of _local_region
|
local_addr: ^^Region, // tracks region ownership via address of _local_region
|
||||||
reset_addr: ^^Region, // tracks old local addr for reset
|
reset_addr: ^^Region, // tracks old local addr for reset
|
||||||
|
|||||||
@@ -580,9 +580,9 @@ write_type_writer :: proc(w: io.Writer, ti: ^Type_Info, n_written: ^int = nil) -
|
|||||||
if info.is_packed { io.write_string(w, "#packed ", &n) or_return }
|
if info.is_packed { io.write_string(w, "#packed ", &n) or_return }
|
||||||
if info.is_raw_union { io.write_string(w, "#raw_union ", &n) or_return }
|
if info.is_raw_union { io.write_string(w, "#raw_union ", &n) or_return }
|
||||||
if info.custom_align {
|
if info.custom_align {
|
||||||
io.write_string(w, "#align ", &n) or_return
|
io.write_string(w, "#align(", &n) or_return
|
||||||
io.write_i64(w, i64(ti.align), 10, &n) or_return
|
io.write_i64(w, i64(ti.align), 10, &n) or_return
|
||||||
io.write_byte(w, ' ', &n) or_return
|
io.write_string(w, ") ", &n) or_return
|
||||||
}
|
}
|
||||||
io.write_byte(w, '{', &n) or_return
|
io.write_byte(w, '{', &n) or_return
|
||||||
for name, i in info.names {
|
for name, i in info.names {
|
||||||
@@ -598,9 +598,9 @@ write_type_writer :: proc(w: io.Writer, ti: ^Type_Info, n_written: ^int = nil) -
|
|||||||
if info.no_nil { io.write_string(w, "#no_nil ", &n) or_return }
|
if info.no_nil { io.write_string(w, "#no_nil ", &n) or_return }
|
||||||
if info.shared_nil { io.write_string(w, "#shared_nil ", &n) or_return }
|
if info.shared_nil { io.write_string(w, "#shared_nil ", &n) or_return }
|
||||||
if info.custom_align {
|
if info.custom_align {
|
||||||
io.write_string(w, "#align ", &n) or_return
|
io.write_string(w, "#align(", &n) or_return
|
||||||
io.write_i64(w, i64(ti.align), 10, &n) or_return
|
io.write_i64(w, i64(ti.align), 10, &n) or_return
|
||||||
io.write_byte(w, ' ', &n) or_return
|
io.write_string(w, ") ", &n) or_return
|
||||||
}
|
}
|
||||||
io.write_byte(w, '{', &n) or_return
|
io.write_byte(w, '{', &n) or_return
|
||||||
for variant, i in info.variants {
|
for variant, i in info.variants {
|
||||||
|
|||||||
@@ -257,7 +257,7 @@ Typeid_Kind :: enum u8 {
|
|||||||
}
|
}
|
||||||
#assert(len(Typeid_Kind) < 32)
|
#assert(len(Typeid_Kind) < 32)
|
||||||
|
|
||||||
// Typeid_Bit_Field :: bit_field #align align_of(uintptr) {
|
// Typeid_Bit_Field :: bit_field #align(align_of(uintptr)) {
|
||||||
// index: 8*size_of(uintptr) - 8,
|
// index: 8*size_of(uintptr) - 8,
|
||||||
// kind: 5, // Typeid_Kind
|
// kind: 5, // Typeid_Kind
|
||||||
// named: 1,
|
// named: 1,
|
||||||
|
|||||||
@@ -87,7 +87,7 @@ MAP_CACHE_LINE_SIZE :: 1 << MAP_CACHE_LINE_LOG2
|
|||||||
//
|
//
|
||||||
// In the optimal case, len(Map_Cell(T){}.data) = 1 so the cell array can be treated
|
// In the optimal case, len(Map_Cell(T){}.data) = 1 so the cell array can be treated
|
||||||
// as a regular array of T, which is the case for hashes.
|
// as a regular array of T, which is the case for hashes.
|
||||||
Map_Cell :: struct($T: typeid) #align MAP_CACHE_LINE_SIZE {
|
Map_Cell :: struct($T: typeid) #align(MAP_CACHE_LINE_SIZE) {
|
||||||
data: [MAP_CACHE_LINE_SIZE / size_of(T) when 0 < size_of(T) && size_of(T) < MAP_CACHE_LINE_SIZE else 1]T,
|
data: [MAP_CACHE_LINE_SIZE / size_of(T) when 0 < size_of(T) && size_of(T) < MAP_CACHE_LINE_SIZE else 1]T,
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -398,9 +398,9 @@ print_type :: proc "contextless" (ti: ^Type_Info) {
|
|||||||
if info.is_packed { print_string("#packed ") }
|
if info.is_packed { print_string("#packed ") }
|
||||||
if info.is_raw_union { print_string("#raw_union ") }
|
if info.is_raw_union { print_string("#raw_union ") }
|
||||||
if info.custom_align {
|
if info.custom_align {
|
||||||
print_string("#align ")
|
print_string("#align(")
|
||||||
print_u64(u64(ti.align))
|
print_u64(u64(ti.align))
|
||||||
print_byte(' ')
|
print_string(") ")
|
||||||
}
|
}
|
||||||
print_byte('{')
|
print_byte('{')
|
||||||
for name, i in info.names {
|
for name, i in info.names {
|
||||||
@@ -414,8 +414,9 @@ print_type :: proc "contextless" (ti: ^Type_Info) {
|
|||||||
case Type_Info_Union:
|
case Type_Info_Union:
|
||||||
print_string("union ")
|
print_string("union ")
|
||||||
if info.custom_align {
|
if info.custom_align {
|
||||||
print_string("#align ")
|
print_string("#align(")
|
||||||
print_u64(u64(ti.align))
|
print_u64(u64(ti.align))
|
||||||
|
print_string(") ")
|
||||||
}
|
}
|
||||||
if info.no_nil {
|
if info.no_nil {
|
||||||
print_string("#no_nil ")
|
print_string("#no_nil ")
|
||||||
|
|||||||
@@ -17,42 +17,42 @@ PTHREAD_RWLOCKATTR_SIZE :: 16
|
|||||||
|
|
||||||
pthread_t :: distinct u64
|
pthread_t :: distinct u64
|
||||||
|
|
||||||
pthread_attr_t :: struct #align 16 {
|
pthread_attr_t :: struct #align(16) {
|
||||||
sig: c.long,
|
sig: c.long,
|
||||||
_: [PTHREAD_ATTR_SIZE] c.char,
|
_: [PTHREAD_ATTR_SIZE] c.char,
|
||||||
}
|
}
|
||||||
|
|
||||||
pthread_cond_t :: struct #align 16 {
|
pthread_cond_t :: struct #align(16) {
|
||||||
sig: c.long,
|
sig: c.long,
|
||||||
_: [PTHREAD_COND_SIZE] c.char,
|
_: [PTHREAD_COND_SIZE] c.char,
|
||||||
}
|
}
|
||||||
|
|
||||||
pthread_condattr_t :: struct #align 16 {
|
pthread_condattr_t :: struct #align(16) {
|
||||||
sig: c.long,
|
sig: c.long,
|
||||||
_: [PTHREAD_CONDATTR_SIZE] c.char,
|
_: [PTHREAD_CONDATTR_SIZE] c.char,
|
||||||
}
|
}
|
||||||
|
|
||||||
pthread_mutex_t :: struct #align 16 {
|
pthread_mutex_t :: struct #align(16) {
|
||||||
sig: c.long,
|
sig: c.long,
|
||||||
_: [PTHREAD_MUTEX_SIZE] c.char,
|
_: [PTHREAD_MUTEX_SIZE] c.char,
|
||||||
}
|
}
|
||||||
|
|
||||||
pthread_mutexattr_t :: struct #align 16 {
|
pthread_mutexattr_t :: struct #align(16) {
|
||||||
sig: c.long,
|
sig: c.long,
|
||||||
_: [PTHREAD_MUTEXATTR_SIZE] c.char,
|
_: [PTHREAD_MUTEXATTR_SIZE] c.char,
|
||||||
}
|
}
|
||||||
|
|
||||||
pthread_once_t :: struct #align 16 {
|
pthread_once_t :: struct #align(16) {
|
||||||
sig: c.long,
|
sig: c.long,
|
||||||
_: [PTHREAD_ONCE_SIZE] c.char,
|
_: [PTHREAD_ONCE_SIZE] c.char,
|
||||||
}
|
}
|
||||||
|
|
||||||
pthread_rwlock_t :: struct #align 16 {
|
pthread_rwlock_t :: struct #align(16) {
|
||||||
sig: c.long,
|
sig: c.long,
|
||||||
_: [PTHREAD_RWLOCK_SIZE] c.char,
|
_: [PTHREAD_RWLOCK_SIZE] c.char,
|
||||||
}
|
}
|
||||||
|
|
||||||
pthread_rwlockattr_t :: struct #align 16 {
|
pthread_rwlockattr_t :: struct #align(16) {
|
||||||
sig: c.long,
|
sig: c.long,
|
||||||
_: [PTHREAD_RWLOCKATTR_SIZE] c.char,
|
_: [PTHREAD_RWLOCKATTR_SIZE] c.char,
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -4,7 +4,7 @@ package unix
|
|||||||
import "core:c"
|
import "core:c"
|
||||||
|
|
||||||
pthread_t :: distinct u64
|
pthread_t :: distinct u64
|
||||||
// pthread_t :: struct #align 16 { x: u64 }
|
// pthread_t :: struct #align(16) { x: u64 }
|
||||||
|
|
||||||
PTHREAD_COND_T_SIZE :: 8
|
PTHREAD_COND_T_SIZE :: 8
|
||||||
|
|
||||||
@@ -27,32 +27,32 @@ when size_of(int) == 8 {
|
|||||||
PTHREAD_BARRIER_T_SIZE :: 20
|
PTHREAD_BARRIER_T_SIZE :: 20
|
||||||
}
|
}
|
||||||
|
|
||||||
pthread_cond_t :: struct #align 16 {
|
pthread_cond_t :: struct #align(16) {
|
||||||
_: [PTHREAD_COND_T_SIZE] c.char,
|
_: [PTHREAD_COND_T_SIZE] c.char,
|
||||||
}
|
}
|
||||||
pthread_mutex_t :: struct #align 16 {
|
pthread_mutex_t :: struct #align(16) {
|
||||||
_: [PTHREAD_MUTEX_T_SIZE] c.char,
|
_: [PTHREAD_MUTEX_T_SIZE] c.char,
|
||||||
}
|
}
|
||||||
pthread_rwlock_t :: struct #align 16 {
|
pthread_rwlock_t :: struct #align(16) {
|
||||||
_: [PTHREAD_RWLOCK_T_SIZE] c.char,
|
_: [PTHREAD_RWLOCK_T_SIZE] c.char,
|
||||||
}
|
}
|
||||||
pthread_barrier_t :: struct #align 16 {
|
pthread_barrier_t :: struct #align(16) {
|
||||||
_: [PTHREAD_BARRIER_T_SIZE] c.char,
|
_: [PTHREAD_BARRIER_T_SIZE] c.char,
|
||||||
}
|
}
|
||||||
|
|
||||||
pthread_attr_t :: struct #align 16 {
|
pthread_attr_t :: struct #align(16) {
|
||||||
_: [PTHREAD_ATTR_T_SIZE] c.char,
|
_: [PTHREAD_ATTR_T_SIZE] c.char,
|
||||||
}
|
}
|
||||||
pthread_condattr_t :: struct #align 16 {
|
pthread_condattr_t :: struct #align(16) {
|
||||||
_: [PTHREAD_CONDATTR_T_SIZE] c.char,
|
_: [PTHREAD_CONDATTR_T_SIZE] c.char,
|
||||||
}
|
}
|
||||||
pthread_mutexattr_t :: struct #align 16 {
|
pthread_mutexattr_t :: struct #align(16) {
|
||||||
_: [PTHREAD_MUTEXATTR_T_SIZE] c.char,
|
_: [PTHREAD_MUTEXATTR_T_SIZE] c.char,
|
||||||
}
|
}
|
||||||
pthread_rwlockattr_t :: struct #align 16 {
|
pthread_rwlockattr_t :: struct #align(16) {
|
||||||
_: [PTHREAD_RWLOCKATTR_T_SIZE] c.char,
|
_: [PTHREAD_RWLOCKATTR_T_SIZE] c.char,
|
||||||
}
|
}
|
||||||
pthread_barrierattr_t :: struct #align 16 {
|
pthread_barrierattr_t :: struct #align(16) {
|
||||||
_: [PTHREAD_BARRIERATTR_T_SIZE] c.char,
|
_: [PTHREAD_BARRIERATTR_T_SIZE] c.char,
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -8,7 +8,7 @@ import "core:c"
|
|||||||
// And at the time of writing there is a bug with putting it
|
// And at the time of writing there is a bug with putting it
|
||||||
// as the only field in a struct.
|
// as the only field in a struct.
|
||||||
pthread_t :: distinct u64
|
pthread_t :: distinct u64
|
||||||
// pthread_t :: struct #align 16 { x: u64 };
|
// pthread_t :: struct #align(16) { x: u64 };
|
||||||
|
|
||||||
// NOTE(tetra): Got all the size constants from pthreadtypes-arch.h on my
|
// NOTE(tetra): Got all the size constants from pthreadtypes-arch.h on my
|
||||||
// Linux machine.
|
// Linux machine.
|
||||||
@@ -34,32 +34,32 @@ when size_of(int) == 8 {
|
|||||||
PTHREAD_BARRIER_T_SIZE :: 20
|
PTHREAD_BARRIER_T_SIZE :: 20
|
||||||
}
|
}
|
||||||
|
|
||||||
pthread_cond_t :: struct #align 16 {
|
pthread_cond_t :: struct #align(16) {
|
||||||
_: [PTHREAD_COND_T_SIZE] c.char,
|
_: [PTHREAD_COND_T_SIZE] c.char,
|
||||||
}
|
}
|
||||||
pthread_mutex_t :: struct #align 16 {
|
pthread_mutex_t :: struct #align(16) {
|
||||||
_: [PTHREAD_MUTEX_T_SIZE] c.char,
|
_: [PTHREAD_MUTEX_T_SIZE] c.char,
|
||||||
}
|
}
|
||||||
pthread_rwlock_t :: struct #align 16 {
|
pthread_rwlock_t :: struct #align(16) {
|
||||||
_: [PTHREAD_RWLOCK_T_SIZE] c.char,
|
_: [PTHREAD_RWLOCK_T_SIZE] c.char,
|
||||||
}
|
}
|
||||||
pthread_barrier_t :: struct #align 16 {
|
pthread_barrier_t :: struct #align(16) {
|
||||||
_: [PTHREAD_BARRIER_T_SIZE] c.char,
|
_: [PTHREAD_BARRIER_T_SIZE] c.char,
|
||||||
}
|
}
|
||||||
|
|
||||||
pthread_attr_t :: struct #align 16 {
|
pthread_attr_t :: struct #align(16) {
|
||||||
_: [PTHREAD_ATTR_T_SIZE] c.char,
|
_: [PTHREAD_ATTR_T_SIZE] c.char,
|
||||||
}
|
}
|
||||||
pthread_condattr_t :: struct #align 16 {
|
pthread_condattr_t :: struct #align(16) {
|
||||||
_: [PTHREAD_CONDATTR_T_SIZE] c.char,
|
_: [PTHREAD_CONDATTR_T_SIZE] c.char,
|
||||||
}
|
}
|
||||||
pthread_mutexattr_t :: struct #align 16 {
|
pthread_mutexattr_t :: struct #align(16) {
|
||||||
_: [PTHREAD_MUTEXATTR_T_SIZE] c.char,
|
_: [PTHREAD_MUTEXATTR_T_SIZE] c.char,
|
||||||
}
|
}
|
||||||
pthread_rwlockattr_t :: struct #align 16 {
|
pthread_rwlockattr_t :: struct #align(16) {
|
||||||
_: [PTHREAD_RWLOCKATTR_T_SIZE] c.char,
|
_: [PTHREAD_RWLOCKATTR_T_SIZE] c.char,
|
||||||
}
|
}
|
||||||
pthread_barrierattr_t :: struct #align 16 {
|
pthread_barrierattr_t :: struct #align(16) {
|
||||||
_: [PTHREAD_BARRIERATTR_T_SIZE] c.char,
|
_: [PTHREAD_BARRIERATTR_T_SIZE] c.char,
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -84,7 +84,7 @@ sched_param :: struct {
|
|||||||
sched_priority: c.int,
|
sched_priority: c.int,
|
||||||
}
|
}
|
||||||
|
|
||||||
sem_t :: struct #align 16 {
|
sem_t :: struct #align(16) {
|
||||||
_: [SEM_T_SIZE] c.char,
|
_: [SEM_T_SIZE] c.char,
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -886,7 +886,7 @@ WIN32_MEMORY_REGION_INFORMATION_u_s :: struct {
|
|||||||
Bitfield: ULONG,
|
Bitfield: ULONG,
|
||||||
}
|
}
|
||||||
WIN32_MEMORY_REGION_INFORMATION_u_s_Bitfield :: distinct ULONG
|
WIN32_MEMORY_REGION_INFORMATION_u_s_Bitfield :: distinct ULONG
|
||||||
/*bit_field #align align_of(ULONG) {
|
/*bit_field #align(align_of(ULONG)) {
|
||||||
Private : 1-0,
|
Private : 1-0,
|
||||||
MappedDataFile : 2-1,
|
MappedDataFile : 2-1,
|
||||||
MappedImage : 3-2,
|
MappedImage : 3-2,
|
||||||
|
|||||||
@@ -10,7 +10,7 @@ CAS :: intrinsics.atomic_compare_exchange_strong
|
|||||||
|
|
||||||
// NOTE(tetra): Aligned here because of core/unix/pthread_linux.odin/pthread_t.
|
// NOTE(tetra): Aligned here because of core/unix/pthread_linux.odin/pthread_t.
|
||||||
// Also see core/sys/darwin/mach_darwin.odin/semaphore_t.
|
// Also see core/sys/darwin/mach_darwin.odin/semaphore_t.
|
||||||
Thread_Os_Specific :: struct #align 16 {
|
Thread_Os_Specific :: struct #align(16) {
|
||||||
unix_thread: unix.pthread_t, // NOTE: very large on Darwin, small on Linux.
|
unix_thread: unix.pthread_t, // NOTE: very large on Darwin, small on Linux.
|
||||||
cond: sync.Cond,
|
cond: sync.Cond,
|
||||||
mutex: sync.Mutex,
|
mutex: sync.Mutex,
|
||||||
|
|||||||
@@ -2485,6 +2485,13 @@ gb_internal Ast *parse_operand(AstFile *f, bool lhs) {
|
|||||||
syntax_error(tag, "Duplicate struct tag '#%.*s'", LIT(tag.string));
|
syntax_error(tag, "Duplicate struct tag '#%.*s'", LIT(tag.string));
|
||||||
}
|
}
|
||||||
align = parse_expr(f, true);
|
align = parse_expr(f, true);
|
||||||
|
if (align && align->kind != Ast_ParenExpr) {
|
||||||
|
ERROR_BLOCK();
|
||||||
|
gbString s = expr_to_string(align);
|
||||||
|
syntax_warning(tag, "#align requires parentheses around the expression");
|
||||||
|
error_line("\tSuggestion: #align(%s)", s);
|
||||||
|
gb_string_free(s);
|
||||||
|
}
|
||||||
} else if (tag.string == "raw_union") {
|
} else if (tag.string == "raw_union") {
|
||||||
if (is_raw_union) {
|
if (is_raw_union) {
|
||||||
syntax_error(tag, "Duplicate struct tag '#%.*s'", LIT(tag.string));
|
syntax_error(tag, "Duplicate struct tag '#%.*s'", LIT(tag.string));
|
||||||
@@ -2566,6 +2573,13 @@ gb_internal Ast *parse_operand(AstFile *f, bool lhs) {
|
|||||||
syntax_error(tag, "Duplicate union tag '#%.*s'", LIT(tag.string));
|
syntax_error(tag, "Duplicate union tag '#%.*s'", LIT(tag.string));
|
||||||
}
|
}
|
||||||
align = parse_expr(f, true);
|
align = parse_expr(f, true);
|
||||||
|
if (align && align->kind != Ast_ParenExpr) {
|
||||||
|
ERROR_BLOCK();
|
||||||
|
gbString s = expr_to_string(align);
|
||||||
|
syntax_warning(tag, "#align requires parentheses around the expression");
|
||||||
|
error_line("\tSuggestion: #align(%s)", s);
|
||||||
|
gb_string_free(s);
|
||||||
|
}
|
||||||
} else if (tag.string == "no_nil") {
|
} else if (tag.string == "no_nil") {
|
||||||
if (no_nil) {
|
if (no_nil) {
|
||||||
syntax_error(tag, "Duplicate union tag '#%.*s'", LIT(tag.string));
|
syntax_error(tag, "Duplicate union tag '#%.*s'", LIT(tag.string));
|
||||||
|
|||||||
Vendored
+1
-1
@@ -209,7 +209,7 @@ Event :: struct {
|
|||||||
is_composing: bool,
|
is_composing: bool,
|
||||||
is_trusted: bool,
|
is_trusted: bool,
|
||||||
|
|
||||||
using data: struct #raw_union #align 8 {
|
using data: struct #raw_union #align(8) {
|
||||||
scroll: struct {
|
scroll: struct {
|
||||||
delta: [2]f64,
|
delta: [2]f64,
|
||||||
},
|
},
|
||||||
|
|||||||
+1
-1
@@ -208,7 +208,7 @@ Event :: struct {
|
|||||||
is_composing: bool,
|
is_composing: bool,
|
||||||
is_trusted: bool,
|
is_trusted: bool,
|
||||||
|
|
||||||
using data: struct #raw_union #align 8 {
|
using data: struct #raw_union #align(8) {
|
||||||
scroll: struct {
|
scroll: struct {
|
||||||
delta: [2]f64,
|
delta: [2]f64,
|
||||||
},
|
},
|
||||||
|
|||||||
Reference in New Issue
Block a user