Delete old code #55
776
src/compiler.bbb
776
src/compiler.bbb
File diff suppressed because it is too large
Load Diff
@ -999,7 +999,7 @@ fn Type* parse_type(Module* module, Scope* scope)
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
else if (start_character == '#')
|
else if (start_character == '@')
|
||||||
{
|
{
|
||||||
module->offset += 1;
|
module->offset += 1;
|
||||||
auto identifier = parse_identifier(module);
|
auto identifier = parse_identifier(module);
|
||||||
@ -1167,7 +1167,7 @@ fn Token tokenize(Module* module)
|
|||||||
.id = id,
|
.id = id,
|
||||||
};
|
};
|
||||||
} break;
|
} break;
|
||||||
case '#':
|
case '@':
|
||||||
{
|
{
|
||||||
module->offset += 1;
|
module->offset += 1;
|
||||||
if (is_identifier_start(module->content[module->offset]))
|
if (is_identifier_start(module->content[module->offset]))
|
||||||
@ -2631,7 +2631,7 @@ fn Statement* parse_statement(Module* module, Scope* scope)
|
|||||||
statement->local = local;
|
statement->local = local;
|
||||||
statement->id = StatementId::local;
|
statement->id = StatementId::local;
|
||||||
} break;
|
} break;
|
||||||
case '#':
|
case '@':
|
||||||
{
|
{
|
||||||
statement->expression = parse_value(module, scope, {});
|
statement->expression = parse_value(module, scope, {});
|
||||||
statement->id = StatementId::expression;
|
statement->id = StatementId::expression;
|
||||||
|
128
tests/tests.bbb
128
tests/tests.bbb
@ -2,7 +2,7 @@ require = fn (ok: u1) void
|
|||||||
{
|
{
|
||||||
if (!ok)
|
if (!ok)
|
||||||
{
|
{
|
||||||
#trap();
|
@trap();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -113,13 +113,13 @@ stack_sub = fn () s32
|
|||||||
extend = fn () s32
|
extend = fn () s32
|
||||||
{
|
{
|
||||||
>a: s8 = 0;
|
>a: s8 = 0;
|
||||||
return #extend(a);
|
return @extend(a);
|
||||||
}
|
}
|
||||||
|
|
||||||
integer_max = fn () s32
|
integer_max = fn () s32
|
||||||
{
|
{
|
||||||
>a = #integer_max(u64);
|
>a = @integer_max(u64);
|
||||||
return #truncate(a + 1);
|
return @truncate(a + 1);
|
||||||
}
|
}
|
||||||
|
|
||||||
integer_hex = fn () s32
|
integer_hex = fn () s32
|
||||||
@ -177,9 +177,9 @@ basic_enum = fn () s32
|
|||||||
>a: BasicEnum = .three;
|
>a: BasicEnum = .three;
|
||||||
>b: BasicEnum = .two;
|
>b: BasicEnum = .two;
|
||||||
>c: BasicEnum = .one;
|
>c: BasicEnum = .one;
|
||||||
>a_int: s32 = #extend(#int_from_enum(a));
|
>a_int: s32 = @extend(@int_from_enum(a));
|
||||||
>b_int: s32 = #extend(#int_from_enum(b));
|
>b_int: s32 = @extend(@int_from_enum(b));
|
||||||
>c_int: s32 = #extend(#int_from_enum(c));
|
>c_int: s32 = @extend(@int_from_enum(c));
|
||||||
|
|
||||||
return a_int - (b_int + c_int);
|
return a_int - (b_int + c_int);
|
||||||
}
|
}
|
||||||
@ -210,13 +210,13 @@ basic_varargs_function = fn [cc(c)] (first_arg: u32, ...) void
|
|||||||
{
|
{
|
||||||
require(first_arg == 123456789);
|
require(first_arg == 123456789);
|
||||||
|
|
||||||
>va = #va_start();
|
>va = @va_start();
|
||||||
|
|
||||||
>a = #va_arg(&va, u32);
|
>a = @va_arg(&va, u32);
|
||||||
|
|
||||||
require(a == 987654321);
|
require(a == 987654321);
|
||||||
|
|
||||||
>first_arg_b = #va_arg(&va, u32);
|
>first_arg_b = @va_arg(&va, u32);
|
||||||
require(first_arg == first_arg_b);
|
require(first_arg == first_arg_b);
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -236,7 +236,7 @@ c_string_length = fn (c_string: &u8) u64
|
|||||||
it = it + 1;
|
it = it + 1;
|
||||||
}
|
}
|
||||||
|
|
||||||
return #int_from_pointer(it) - #int_from_pointer(c_string);
|
return @int_from_pointer(it) - @int_from_pointer(c_string);
|
||||||
}
|
}
|
||||||
|
|
||||||
basic_while = fn (argc: s32, argv: &&u8) void
|
basic_while = fn (argc: s32, argv: &&u8) void
|
||||||
@ -261,14 +261,14 @@ pointer = fn () s32
|
|||||||
{
|
{
|
||||||
>value: s32 = 0;
|
>value: s32 = 0;
|
||||||
pointer_function(&value);
|
pointer_function(&value);
|
||||||
return #extend(value == 0);
|
return @extend(value == 0);
|
||||||
}
|
}
|
||||||
|
|
||||||
pointer_cast = fn () s32
|
pointer_cast = fn () s32
|
||||||
{
|
{
|
||||||
>result: u32 = 0;
|
>result: u32 = 0;
|
||||||
>p = &result;
|
>p = &result;
|
||||||
>signed_pointer: &s32 = #pointer_cast(p);
|
>signed_pointer: &s32 = @pointer_cast(p);
|
||||||
return signed_pointer.&;
|
return signed_pointer.&;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -281,7 +281,7 @@ u1_return_foo = fn () u1
|
|||||||
u1_return = fn () s32
|
u1_return = fn () s32
|
||||||
{
|
{
|
||||||
>result = u1_return_foo();
|
>result = u1_return_foo();
|
||||||
return #extend(result);
|
return @extend(result);
|
||||||
}
|
}
|
||||||
|
|
||||||
local_type_inference_foo = fn () s32
|
local_type_inference_foo = fn () s32
|
||||||
@ -324,19 +324,19 @@ basic_extern = fn () void
|
|||||||
|
|
||||||
basic_byte_size = fn () void
|
basic_byte_size = fn () void
|
||||||
{
|
{
|
||||||
>sizeofu8: u8 = #byte_size(u8);
|
>sizeofu8: u8 = @byte_size(u8);
|
||||||
require(sizeofu8 == 1);
|
require(sizeofu8 == 1);
|
||||||
>sizeofu16: u8 = #byte_size(u16);
|
>sizeofu16: u8 = @byte_size(u16);
|
||||||
require(sizeofu16 == 2);
|
require(sizeofu16 == 2);
|
||||||
>sizeofs32: s32 = #byte_size(s32);
|
>sizeofs32: s32 = @byte_size(s32);
|
||||||
require(sizeofs32 == 4);
|
require(sizeofs32 == 4);
|
||||||
>sizeofs64: s32 = #byte_size(s64);
|
>sizeofs64: s32 = @byte_size(s64);
|
||||||
require(sizeofs64 == 8);
|
require(sizeofs64 == 8);
|
||||||
}
|
}
|
||||||
|
|
||||||
unsigned_assignment_operators = fn(n: s32) s32
|
unsigned_assignment_operators = fn(n: s32) s32
|
||||||
{
|
{
|
||||||
>result: u32 = #extend(n);
|
>result: u32 = @extend(n);
|
||||||
result >>= 1;
|
result >>= 1;
|
||||||
result <<= 1;
|
result <<= 1;
|
||||||
result ^= 1;
|
result ^= 1;
|
||||||
@ -348,7 +348,7 @@ unsigned_assignment_operators = fn(n: s32) s32
|
|||||||
result %= 1;
|
result %= 1;
|
||||||
result *= 0;
|
result *= 0;
|
||||||
|
|
||||||
return #extend(result);
|
return @extend(result);
|
||||||
}
|
}
|
||||||
|
|
||||||
assignment_operators = fn () s32
|
assignment_operators = fn () s32
|
||||||
@ -375,7 +375,7 @@ not_pointer = fn () s32
|
|||||||
>a: s32 = 0;
|
>a: s32 = 0;
|
||||||
>ptr = &a;
|
>ptr = &a;
|
||||||
>b = !ptr;
|
>b = !ptr;
|
||||||
return #extend(b);
|
return @extend(b);
|
||||||
}
|
}
|
||||||
|
|
||||||
BasicBitField = bits u8
|
BasicBitField = bits u8
|
||||||
@ -514,7 +514,7 @@ if_no_else_void = fn () void
|
|||||||
>result: s32 = 0;
|
>result: s32 = 0;
|
||||||
if (result != 0)
|
if (result != 0)
|
||||||
{
|
{
|
||||||
#trap();
|
@trap();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -573,12 +573,12 @@ indirect_varargs_function = fn [cc(c)] (first_arg: u32, ...) void
|
|||||||
{
|
{
|
||||||
if (first_arg != 123456789)
|
if (first_arg != 123456789)
|
||||||
{
|
{
|
||||||
#trap();
|
@trap();
|
||||||
}
|
}
|
||||||
|
|
||||||
>va = #va_start();
|
>va = @va_start();
|
||||||
|
|
||||||
>s = #va_arg(&va, IndirectVarArgs);
|
>s = @va_arg(&va, IndirectVarArgs);
|
||||||
require(s.a == 9);
|
require(s.a == 9);
|
||||||
require(s.b == 8);
|
require(s.b == 8);
|
||||||
require(s.c == 7);
|
require(s.c == 7);
|
||||||
@ -611,7 +611,7 @@ indirect_varargs = fn () void
|
|||||||
|
|
||||||
return_type_builtin = fn () s32
|
return_type_builtin = fn () s32
|
||||||
{
|
{
|
||||||
>result: #ReturnType = 0;
|
>result: @ReturnType = 0;
|
||||||
return result;
|
return result;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -629,7 +629,7 @@ return_struct_u64_u64_function = fn [cc(c)] () Struct_u64_u64
|
|||||||
return_struct_u64_u64 = fn [cc(c)] () s32
|
return_struct_u64_u64 = fn [cc(c)] () s32
|
||||||
{
|
{
|
||||||
>r = return_struct_u64_u64_function();
|
>r = return_struct_u64_u64_function();
|
||||||
return #truncate(r.a + r.b - 3);
|
return @truncate(r.a + r.b - 3);
|
||||||
}
|
}
|
||||||
|
|
||||||
select = fn () s32
|
select = fn () s32
|
||||||
@ -637,7 +637,7 @@ select = fn () s32
|
|||||||
>boolean: u1 = 1;
|
>boolean: u1 = 1;
|
||||||
>left: s32 = 0;
|
>left: s32 = 0;
|
||||||
>right: s32 = 1;
|
>right: s32 = 1;
|
||||||
return #select(boolean, left, right);
|
return @select(boolean, left, right);
|
||||||
}
|
}
|
||||||
|
|
||||||
slice2 = fn (argc: s32, argv: &&u8) void
|
slice2 = fn (argc: s32, argv: &&u8) void
|
||||||
@ -752,12 +752,12 @@ S = struct
|
|||||||
|
|
||||||
va_arg_function = fn [cc(c)] (first_arg: u32, ...) void
|
va_arg_function = fn [cc(c)] (first_arg: u32, ...) void
|
||||||
{
|
{
|
||||||
>va = #va_start();
|
>va = @va_start();
|
||||||
|
|
||||||
>a = #va_arg(&va, u32);
|
>a = @va_arg(&va, u32);
|
||||||
>b = #va_arg(&va, S);
|
>b = @va_arg(&va, S);
|
||||||
>c = #va_arg(&va, s64);
|
>c = @va_arg(&va, s64);
|
||||||
>d = #va_arg(&va, s32);
|
>d = @va_arg(&va, s32);
|
||||||
|
|
||||||
require(first_arg == 123456789);
|
require(first_arg == 123456789);
|
||||||
require(a == 123);
|
require(a == 123);
|
||||||
@ -769,7 +769,7 @@ va_arg_function = fn [cc(c)] (first_arg: u32, ...) void
|
|||||||
require(b.d == 4);
|
require(b.d == 4);
|
||||||
require(b.e == 5);
|
require(b.e == 5);
|
||||||
|
|
||||||
#va_end(&va);
|
@va_end(&va);
|
||||||
}
|
}
|
||||||
|
|
||||||
S2 = struct
|
S2 = struct
|
||||||
@ -780,11 +780,11 @@ S2 = struct
|
|||||||
|
|
||||||
va_arg_function2 = fn [cc(c)] (...) void
|
va_arg_function2 = fn [cc(c)] (...) void
|
||||||
{
|
{
|
||||||
>va = #va_start();
|
>va = @va_start();
|
||||||
>s2 = #va_arg(&va, S2);
|
>s2 = @va_arg(&va, S2);
|
||||||
require(s2.a == 8);
|
require(s2.a == 8);
|
||||||
require(s2.b == 9);
|
require(s2.b == 9);
|
||||||
#va_end(&va);
|
@va_end(&va);
|
||||||
}
|
}
|
||||||
|
|
||||||
va_args = fn [cc(c)] () void
|
va_args = fn [cc(c)] () void
|
||||||
@ -1004,7 +1004,7 @@ ByVal = struct
|
|||||||
|
|
||||||
[export] bb_ptr = fn [cc(c)] (x: &u8) void
|
[export] bb_ptr = fn [cc(c)] (x: &u8) void
|
||||||
{
|
{
|
||||||
require(#int_from_pointer(x) == 0xdeadbeef);
|
require(@int_from_pointer(x) == 0xdeadbeef);
|
||||||
}
|
}
|
||||||
|
|
||||||
[export] bb_five_integers = fn [cc(c)] (a: s32, b: s32, c: s32, d: s32, e: s32) void
|
[export] bb_five_integers = fn [cc(c)] (a: s32, b: s32, c: s32, d: s32, e: s32) void
|
||||||
@ -1018,7 +1018,7 @@ ByVal = struct
|
|||||||
|
|
||||||
[export] bb_bool = fn [cc(c)] (x: u8) void
|
[export] bb_bool = fn [cc(c)] (x: u8) void
|
||||||
{
|
{
|
||||||
require(#truncate(x));
|
require(@truncate(x));
|
||||||
}
|
}
|
||||||
|
|
||||||
[export] bb_ret_struct_u64_u64 = fn [cc(c)] () Struct_u64_u64
|
[export] bb_ret_struct_u64_u64 = fn [cc(c)] () Struct_u64_u64
|
||||||
@ -1361,12 +1361,12 @@ S2Enum = enum
|
|||||||
string_to_enum = fn () s32
|
string_to_enum = fn () s32
|
||||||
{
|
{
|
||||||
>e = "dsa";
|
>e = "dsa";
|
||||||
>s2e = #string_to_enum(S2Enum, e);
|
>s2e = @string_to_enum(S2Enum, e);
|
||||||
>result: s32 = 1;
|
>result: s32 = 1;
|
||||||
|
|
||||||
if (s2e.is_valid)
|
if (s2e.is_valid)
|
||||||
{
|
{
|
||||||
result = #extend(s2e.enum_value != .dsa);
|
result = @extend(s2e.enum_value != .dsa);
|
||||||
}
|
}
|
||||||
|
|
||||||
return result;
|
return result;
|
||||||
@ -1552,7 +1552,7 @@ string_equal = fn (slice_a: []u8, slice_b: []u8) u1
|
|||||||
enum_name = fn () s32
|
enum_name = fn () s32
|
||||||
{
|
{
|
||||||
>some_enum: NameEnum = .my_expected_result;
|
>some_enum: NameEnum = .my_expected_result;
|
||||||
return #extend(!string_equal(#enum_name(some_enum), "my_expected_result"));
|
return @extend(!string_equal(@enum_name(some_enum), "my_expected_result"));
|
||||||
}
|
}
|
||||||
|
|
||||||
join = fn (slice: []u8, parts: [][]u8) void
|
join = fn (slice: []u8, parts: [][]u8) void
|
||||||
@ -1618,7 +1618,7 @@ bool_array = fn () s32
|
|||||||
|
|
||||||
for (s: signs)
|
for (s: signs)
|
||||||
{
|
{
|
||||||
accumulator += #extend(s);
|
accumulator += @extend(s);
|
||||||
}
|
}
|
||||||
|
|
||||||
return accumulator;
|
return accumulator;
|
||||||
@ -1686,7 +1686,7 @@ is_space = fn (ch: u8) u1
|
|||||||
|
|
||||||
concat_logical_or = fn () s32
|
concat_logical_or = fn () s32
|
||||||
{
|
{
|
||||||
return #extend(is_space('f'));
|
return @extend(is_space('f'));
|
||||||
}
|
}
|
||||||
|
|
||||||
strict_array_type = fn () s32
|
strict_array_type = fn () s32
|
||||||
@ -1729,7 +1729,7 @@ slice_array_literal_receiver = fn (slices: [][]u8) void
|
|||||||
slice_array_literal = fn () void
|
slice_array_literal = fn () void
|
||||||
{
|
{
|
||||||
>some_bool: u1 = 0;
|
>some_bool: u1 = 0;
|
||||||
slice_array_literal_receiver([ "abc", #select(some_bool, "bcd", "cbd"), "sas", ][..]);
|
slice_array_literal_receiver([ "abc", @select(some_bool, "bcd", "cbd"), "sas", ][..]);
|
||||||
}
|
}
|
||||||
|
|
||||||
slice_only_start = fn () void
|
slice_only_start = fn () void
|
||||||
@ -1761,12 +1761,12 @@ generic_macro = fn () s32
|
|||||||
{
|
{
|
||||||
>a = sub_generic[s32](1, 1);
|
>a = sub_generic[s32](1, 1);
|
||||||
>b = sub_generic[u8](2, 2);
|
>b = sub_generic[u8](2, 2);
|
||||||
return a + #extend(b);
|
return a + @extend(b);
|
||||||
}
|
}
|
||||||
|
|
||||||
pointer_macro = macro [T] (ptr: &u32) &T
|
pointer_macro = macro [T] (ptr: &u32) &T
|
||||||
{
|
{
|
||||||
return #pointer_cast(ptr);
|
return @pointer_cast(ptr);
|
||||||
}
|
}
|
||||||
|
|
||||||
A = struct
|
A = struct
|
||||||
@ -1811,22 +1811,22 @@ noreturn_macro = fn () void
|
|||||||
|
|
||||||
if (result != 64)
|
if (result != 64)
|
||||||
{
|
{
|
||||||
#trap();
|
@trap();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
generic_pointer_array_macro = macro[T](addr: &u64, count: u64) []T
|
generic_pointer_array_macro = macro[T](addr: &u64, count: u64) []T
|
||||||
{
|
{
|
||||||
>pointer: &T = #pointer_cast(addr);
|
>pointer: &T = @pointer_cast(addr);
|
||||||
return pointer[..count];
|
return pointer[..count];
|
||||||
}
|
}
|
||||||
|
|
||||||
generic_pointer_array = fn () void
|
generic_pointer_array = fn () void
|
||||||
{
|
{
|
||||||
>address_raw: u64 = 0xaaaaaaaaaaaaaaaa;
|
>address_raw: u64 = 0xaaaaaaaaaaaaaaaa;
|
||||||
>some_var: &u64 = #pointer_from_int(address_raw);
|
>some_var: &u64 = @pointer_from_int(address_raw);
|
||||||
>result: []&u8 = generic_pointer_array_macro[&u8](some_var, 1);
|
>result: []&u8 = generic_pointer_array_macro[&u8](some_var, 1);
|
||||||
require(#int_from_pointer(result.pointer) == address_raw);
|
require(@int_from_pointer(result.pointer) == address_raw);
|
||||||
require(result.length == 1);
|
require(result.length == 1);
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -1884,11 +1884,11 @@ basic_opaque = fn () s32
|
|||||||
{
|
{
|
||||||
>destination: s32 = 1;
|
>destination: s32 = 1;
|
||||||
>source: s32 = 0;
|
>source: s32 = 0;
|
||||||
>opaque_pointer = memcpy(&destination, &source, #byte_size(s32));
|
>opaque_pointer = memcpy(&destination, &source, @byte_size(s32));
|
||||||
>pointer: &s32 = #pointer_cast(opaque_pointer);
|
>pointer: &s32 = @pointer_cast(opaque_pointer);
|
||||||
if (pointer != &destination)
|
if (pointer != &destination)
|
||||||
{
|
{
|
||||||
#trap();
|
@trap();
|
||||||
}
|
}
|
||||||
return destination;
|
return destination;
|
||||||
}
|
}
|
||||||
@ -1999,8 +1999,8 @@ min_max = fn () void
|
|||||||
{
|
{
|
||||||
>a: u32 = 1;
|
>a: u32 = 1;
|
||||||
>b: u32 = 2;
|
>b: u32 = 2;
|
||||||
>min = #min(a, b);
|
>min = @min(a, b);
|
||||||
>max = #max(a, b);
|
>max = @max(a, b);
|
||||||
require(min == a);
|
require(min == a);
|
||||||
require(max == b);
|
require(max == b);
|
||||||
}
|
}
|
||||||
@ -2021,21 +2021,21 @@ field_parent_pointer = fn () void
|
|||||||
};
|
};
|
||||||
|
|
||||||
>p_a = &s.a;
|
>p_a = &s.a;
|
||||||
>p_a_struct: &FieldParentPointerStruct = #field_parent_pointer(p_a, "a");
|
>p_a_struct: &FieldParentPointerStruct = @field_parent_pointer(p_a, "a");
|
||||||
require(p_a_struct == &s);
|
require(p_a_struct == &s);
|
||||||
require(p_a_struct.a == s.a);
|
require(p_a_struct.a == s.a);
|
||||||
require(p_a_struct.b == s.b);
|
require(p_a_struct.b == s.b);
|
||||||
require(p_a_struct.c == s.c);
|
require(p_a_struct.c == s.c);
|
||||||
|
|
||||||
>p_b = &s.b;
|
>p_b = &s.b;
|
||||||
>p_b_struct: &FieldParentPointerStruct = #field_parent_pointer(p_b, "b");
|
>p_b_struct: &FieldParentPointerStruct = @field_parent_pointer(p_b, "b");
|
||||||
require(p_b_struct == &s);
|
require(p_b_struct == &s);
|
||||||
require(p_b_struct.a == s.a);
|
require(p_b_struct.a == s.a);
|
||||||
require(p_b_struct.b == s.b);
|
require(p_b_struct.b == s.b);
|
||||||
require(p_b_struct.c == s.c);
|
require(p_b_struct.c == s.c);
|
||||||
|
|
||||||
>p_c = &s.c;
|
>p_c = &s.c;
|
||||||
>p_c_struct: &FieldParentPointerStruct = #field_parent_pointer(p_c, "c");
|
>p_c_struct: &FieldParentPointerStruct = @field_parent_pointer(p_c, "c");
|
||||||
require(p_c_struct == &s);
|
require(p_c_struct == &s);
|
||||||
require(p_c_struct.a == s.a);
|
require(p_c_struct.a == s.a);
|
||||||
require(p_c_struct.b == s.b);
|
require(p_c_struct.b == s.b);
|
||||||
@ -2045,11 +2045,11 @@ field_parent_pointer = fn () void
|
|||||||
leading_trailing_zeroes = fn () void
|
leading_trailing_zeroes = fn () void
|
||||||
{
|
{
|
||||||
>a: u32 = 0b111;
|
>a: u32 = 0b111;
|
||||||
require(#leading_zeroes(a) == 29);
|
require(@leading_zeroes(a) == 29);
|
||||||
require(#trailing_zeroes(a) == 0);
|
require(@trailing_zeroes(a) == 0);
|
||||||
>b: u8 = 0b11010;
|
>b: u8 = 0b11010;
|
||||||
require(#leading_zeroes(b) == 3);
|
require(@leading_zeroes(b) == 3);
|
||||||
require(#trailing_zeroes(b) == 1);
|
require(@trailing_zeroes(b) == 1);
|
||||||
}
|
}
|
||||||
|
|
||||||
pointer_sub = fn () void
|
pointer_sub = fn () void
|
||||||
@ -2057,7 +2057,7 @@ pointer_sub = fn () void
|
|||||||
>a: [_]s32 = [ 3, 1 ];
|
>a: [_]s32 = [ 3, 1 ];
|
||||||
>p0 = &a[0];
|
>p0 = &a[0];
|
||||||
>p1 = p0 + 1;
|
>p1 = p0 + 1;
|
||||||
>sub: u32 = #truncate(p1 - p0);
|
>sub: u32 = @truncate(p1 - p0);
|
||||||
require(sub == 1);
|
require(sub == 1);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Loading…
x
Reference in New Issue
Block a user