- Const inline enums would not always implicitly get converted to the underlying type.

- Update to dstring.append_string to take any type converting to String.
This commit is contained in:
Christoffer Lerno
2026-02-05 13:04:57 +01:00
parent 1d0aef4522
commit d71aa10f62
5 changed files with 34 additions and 11 deletions

View File

@@ -331,14 +331,14 @@ fn Char32[] DString.copy_utf32(&self, Allocator allocator)
} }
<* <*
@require $typeof(str) == String || $typeof(str) == DString : "Expected string or DString" @require $defined(String s = str) ||| $typeof(str) == DString : "Expected string or DString"
*> *>
macro void DString.append_string(&self, str) macro void DString.append_string(&self, str)
{ {
$if $typeof(str) == String: $if $typeof(str) == DString:
self.append_bytes(str);
$else
self.append_string_deprecated(str); self.append_string_deprecated(str);
$else
self.append_bytes((String)str);
$endif $endif
} }

View File

@@ -159,7 +159,7 @@ fn void Streebog._final_private(&self) @local
usz index = self.index >> 3; usz index = self.index >> 3;
usz shift = (self.index & 0b111) * 8; usz shift = (self.index & 0b111) * 8;
unprocessed_bits_count[0] = self.index * 8; unprocessed_bits_count[0] = self.index * 8ul;
self.message[index] &= ~(ulong.max << shift); self.message[index] &= ~(ulong.max << shift);
self.message[index++] ^= 1ul << shift; self.message[index++] ^= 1ul << shift;
if (index < 8) self.message[index..] = {}; if (index < 8) self.message[index..] = {};

View File

@@ -16,6 +16,8 @@
- Compiler crash when using arrays of vectors in lists. #2889 - Compiler crash when using arrays of vectors in lists. #2889
- Fix `list[0].i = 5` when `list[0]` returns a pointer. #2888 - Fix `list[0].i = 5` when `list[0]` returns a pointer. #2888
- Shadowing not detected for generic declarations #2876 - Shadowing not detected for generic declarations #2876
- Const inline enums would not always implicitly get converted to the underlying type.
- Update to dstring.append_string to take any type converting to String.
## 0.7.9 Change list ## 0.7.9 Change list

View File

@@ -1640,18 +1640,18 @@ bool type_is_scalar(Type *type)
Type *type_find_parent_type(Type *type) Type *type_find_parent_type(Type *type)
{ {
ASSERT(type->canonical); ASSERT(type->canonical);
Decl *decl;
switch (type->type_kind) switch (type->type_kind)
{ {
case TYPE_CONST_ENUM:
decl = type->decl;
return decl->is_substruct ? decl->enums.type_info->type : NULL;
case TYPE_TYPEDEF: case TYPE_TYPEDEF:
{ decl = type->decl;
Decl *decl = type->decl;
return decl->is_substruct ? decl->distinct->type : NULL; return decl->is_substruct ? decl->distinct->type : NULL;
}
case TYPE_STRUCT: case TYPE_STRUCT:
{ decl = type->decl;
Decl *decl = type->decl;
return decl->is_substruct ? decl->strukt.members[0]->type : NULL; return decl->is_substruct ? decl->strukt.members[0]->type : NULL;
}
default: default:
return NULL; return NULL;
} }

View File

@@ -0,0 +1,21 @@
// #target: macos-x64
module test;
enum Foo : const inline String
{
HELO = "Helo"
}
fn int main()
{
Foo f = Foo.HELO;
bool b = $defined(String s = Foo.HELO);
bool c = $defined(String s = f);
bool d = $defined(int i = f);
return 0;
}
/* #expect: test.ll
store i8 1, ptr %b, align 1
store i8 1, ptr %c, align 1
store i8 0, ptr %d, align 1