mirror of
https://github.com/odin-lang/Odin.git
synced 2025-12-30 09:54:45 +00:00
Disallow using on an enum declaration.
This commit is contained in:
@@ -474,10 +474,12 @@ foreign kernel32 {
|
||||
}
|
||||
|
||||
|
||||
using MEMORY_RESOURCE_NOTIFICATION_TYPE :: enum c_int {
|
||||
MEMORY_RESOURCE_NOTIFICATION_TYPE :: enum c_int {
|
||||
LowMemoryResourceNotification,
|
||||
HighMemoryResourceNotification,
|
||||
}
|
||||
LowMemoryResourceNotification :: MEMORY_RESOURCE_NOTIFICATION_TYPE.LowMemoryResourceNotification;
|
||||
HighMemoryResourceNotification :: MEMORY_RESOURCE_NOTIFICATION_TYPE.HighMemoryResourceNotification;
|
||||
|
||||
|
||||
foreign kernel32 {
|
||||
@@ -598,12 +600,16 @@ foreign kernel32 {
|
||||
) -> BOOL ---;
|
||||
}
|
||||
|
||||
using OFFER_PRIORITY :: enum c_int {
|
||||
OFFER_PRIORITY :: enum c_int {
|
||||
VmOfferPriorityVeryLow = 1,
|
||||
VmOfferPriorityLow,
|
||||
VmOfferPriorityBelowNormal,
|
||||
VmOfferPriorityNormal,
|
||||
}
|
||||
VmOfferPriorityVeryLow :: OFFER_PRIORITY.VmOfferPriorityVeryLow;
|
||||
VmOfferPriorityLow :: OFFER_PRIORITY.VmOfferPriorityLow;
|
||||
VmOfferPriorityBelowNormal :: OFFER_PRIORITY.VmOfferPriorityBelowNormal;
|
||||
VmOfferPriorityNormal :: OFFER_PRIORITY.VmOfferPriorityNormal;
|
||||
|
||||
foreign kernel32 {
|
||||
OfferVirtualMemory :: proc(
|
||||
@@ -638,9 +644,11 @@ foreign kernel32 {
|
||||
) -> HANDLE ---;
|
||||
}
|
||||
|
||||
using WIN32_MEMORY_INFORMATION_CLASS :: enum c_int {
|
||||
WIN32_MEMORY_INFORMATION_CLASS :: enum c_int {
|
||||
MemoryRegionInfo,
|
||||
}
|
||||
MemoryRegionInfo :: WIN32_MEMORY_INFORMATION_CLASS.MemoryRegionInfo;
|
||||
|
||||
WIN32_MEMORY_REGION_INFORMATION :: struct {
|
||||
AllocationBase: PVOID,
|
||||
AllocationProtect: ULONG,
|
||||
|
||||
@@ -778,16 +778,6 @@ using_statement :: proc() {
|
||||
|
||||
// Note: using’d fields can still be referred by name.
|
||||
}
|
||||
{ // using on an enum declaration
|
||||
|
||||
using Foo :: enum {A, B, C};
|
||||
|
||||
f0 := A;
|
||||
f1 := B;
|
||||
f2 := C;
|
||||
fmt.println(f0, f1, f2);
|
||||
fmt.println(len(Foo));
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -1337,7 +1327,7 @@ bit_set_type :: proc() {
|
||||
fmt.println("\n# bit_set type");
|
||||
|
||||
{
|
||||
using Day :: enum {
|
||||
Day :: enum {
|
||||
Sunday,
|
||||
Monday,
|
||||
Tuesday,
|
||||
@@ -1348,20 +1338,20 @@ bit_set_type :: proc() {
|
||||
};
|
||||
|
||||
Days :: distinct bit_set[Day];
|
||||
WEEKEND :: Days{Sunday, Saturday};
|
||||
WEEKEND :: Days{.Sunday, .Saturday};
|
||||
|
||||
d: Days;
|
||||
d = {Sunday, Monday};
|
||||
d = {.Sunday, .Monday};
|
||||
e := d + WEEKEND;
|
||||
e += {Monday};
|
||||
e += {.Monday};
|
||||
fmt.println(d, e);
|
||||
|
||||
ok := Saturday in e; // `in` is only allowed for `map` and `bit_set` types
|
||||
ok := .Saturday in e; // `in` is only allowed for `map` and `bit_set` types
|
||||
fmt.println(ok);
|
||||
if Saturday in e {
|
||||
if .Saturday in e {
|
||||
fmt.println("Saturday in", e);
|
||||
}
|
||||
X :: Saturday in WEEKEND; // Constant evaluation
|
||||
X :: .Saturday in WEEKEND; // Constant evaluation
|
||||
fmt.println(X);
|
||||
fmt.println("Cardinality:", card(e));
|
||||
}
|
||||
|
||||
@@ -294,6 +294,8 @@ void check_type_decl(CheckerContext *ctx, Entity *e, Ast *init_expr, Type *def)
|
||||
|
||||
// using decl
|
||||
if (decl->is_using) {
|
||||
warning(init_expr, "'using' an enum declaration is not allowed, prefer using implicit selector expressions e.g. '.A'");
|
||||
#if 0
|
||||
// NOTE(bill): Must be an enum declaration
|
||||
if (te->kind == Ast_EnumType) {
|
||||
Scope *parent = e->scope;
|
||||
@@ -317,6 +319,7 @@ void check_type_decl(CheckerContext *ctx, Entity *e, Ast *init_expr, Type *def)
|
||||
}
|
||||
}
|
||||
}
|
||||
#endif
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user