$elif deprecated.

This commit is contained in:
Christoffer Lerno
2023-03-20 16:54:45 +01:00
parent 02d073675a
commit 9c145996b0
19 changed files with 197 additions and 142 deletions

View File

@@ -8,25 +8,26 @@
module std::collections::enumset<Enum>;
$if (Enum.elements > 128)
$switch
$case (Enum.elements > 128):
typedef EnumSetType @private = char[(Enum.elements + 7) / 8];
const IS_CHAR_ARRAY = true;
$elif (Enum.elements > 64)
$case (Enum.elements > 64):
typedef EnumSetType @private = uint128;
const IS_CHAR_ARRAY = false;
$elif (Enum.elements > 32 || $$C_INT_SIZE > 32)
$case (Enum.elements > 32 || $$C_INT_SIZE > 32):
typedef EnumSetType @private = ulong;
const IS_CHAR_ARRAY = false;
$elif (Enum.elements > 16 || $$C_INT_SIZE > 16)
$case (Enum.elements > 16 || $$C_INT_SIZE > 16):
typedef EnumSetType @private = uint;
const IS_CHAR_ARRAY = false;
$elif (Enum.elements > 8 || $$C_INT_SIZE > 8)
$case (Enum.elements > 8 || $$C_INT_SIZE > 8):
typedef EnumSetType @private = ushort;
const IS_CHAR_ARRAY = false;
$else
$default:
typedef EnumSetType @private = char;
const IS_CHAR_ARRAY = false;
$endif
$endswitch
typedef EnumSet = distinct EnumSetType;

View File

@@ -212,24 +212,27 @@ fn void Object.set_object(Object* o, String key, Object* new_object) @private
macro Object* object_from_value(value) @private
{
var $Type = $typeof(value);
$if (types::is_int($Type))
$switch
$case types::is_int($Type):
return new_int(value);
$elif (types::is_float($Type))
$case types::is_float($Type):
return new_float(value);
$elif ($Type.typeid == String.typeid)
$case $Type.typeid == String.typeid:
return new_string(value);
$elif ($Type.typeid == bool.typeid)
$case $Type.typeid == bool.typeid:
return new_bool(value);
$elif ($Type.typeid == Object*.typeid)
$case $Type.typeid == Object*.typeid:
return value;
$elif ($Type.typeid == void*.typeid)
$case $Type.typeid == void*.typeid:
assert(value == null);
return &NULL_OBJECT;
$elif ($checks(String s = value))
$case $checks(String s = value):
return new_string(value);
$else
$default:
$assert(false, "Unsupported object type.");
$endif
$endswitch
}
macro Object* Object.set(Object* o, String key, value)