@@ -36,6 +36,7 @@ const TagNull: Tag = 2;
3636const TagVoid : Tag = 3 ;
3737const TagObj : Tag = 4 ;
3838const TagError : Tag = 5 ;
39+ const TagSentinel : Tag = 6 ;
3940
4041/// Most significant bit.
4142const SignMask : u64 = 1 << 63 ;
@@ -55,6 +56,7 @@ const IntegerMask: u64 = TaggedValueMask | (@as(u64, TagInteger) << 49);
5556const NullMask : u64 = TaggedValueMask | (@as (u64 , TagNull ) << 32 );
5657const VoidMask : u64 = TaggedValueMask | (@as (u64 , TagVoid ) << 32 );
5758const ErrorMask : u64 = TaggedValueMask | (@as (u64 , TagError ) << 32 );
59+ const SentinelMask : u64 = TaggedValueMask | (@as (u64 , TagSentinel ) << 32 );
5860
5961const TagMask : u32 = (1 << 3 ) - 1 ;
6062const TaggedPrimitiveMask = TaggedValueMask | (@as (u64 , TagMask ) << 32 ) | IntegerMask ;
@@ -68,6 +70,7 @@ pub const Value = extern struct {
6870 pub const False = Value { .val = FalseMask };
6971 // We only need this so that an NativeFn can see the error returned by its raw function
7072 pub const Error = Value { .val = ErrorMask };
73+ pub const Sentinel = Value { .val = SentinelMask };
7174
7275 pub fn fromBoolean (val : bool ) Value {
7376 return if (val ) True else False ;
@@ -121,6 +124,10 @@ pub const Value = extern struct {
121124 return self .val == ErrorMask ;
122125 }
123126
127+ pub fn isSentinel (self : Value ) bool {
128+ return self .val == SentinelMask ;
129+ }
130+
124131 pub fn boolean (self : Value ) bool {
125132 return self .val == TrueMask ;
126133 }
0 commit comments