aboutsummaryrefslogtreecommitdiff
path: root/src/analyze.cpp
diff options
context:
space:
mode:
authorAndrew Kelley <superjoe30@gmail.com>2017-02-12 17:22:35 -0500
committerAndrew Kelley <superjoe30@gmail.com>2017-02-12 17:35:51 -0500
commit6dba1f1c8eee5e2f037c7ef216bc64423aef8e00 (patch)
treef39a29e98b7e3404b114aaa08cd26d767a1666c1 /src/analyze.cpp
parentca180d3f02914d282505752a1d2fe08e175f9d99 (diff)
downloadzig-6dba1f1c8eee5e2f037c7ef216bc64423aef8e00.tar.gz
zig-6dba1f1c8eee5e2f037c7ef216bc64423aef8e00.zip
slice and array re-work plus some misc. changes
* `@truncate` builtin allows casting to the same size integer. It also performs two's complement casting between signed and unsigned integers. * The idiomatic way to convert between bytes and numbers is now `mem.readInt` and `mem.writeInt` instead of an unsafe cast. It works at compile time, is safer, and looks cleaner. * Implicitly casting an array to a slice is allowed only if the slice is const. * Constant pointer values know if their memory is from a compile- time constant value or a compile-time variable. * Cast from [N]u8 to []T no longer allowed, but [N]u8 to []const T still allowed. * Fix inability to pass a mutable pointer to comptime variable at compile-time to a function and have the function modify the memory pointed to by the pointer. * Add the `comptime T: type` parameter back to mem.eql. Prevents accidentally creating instantiations for arrays.
Diffstat (limited to 'src/analyze.cpp')
-rw-r--r--src/analyze.cpp15
1 files changed, 13 insertions, 2 deletions
diff --git a/src/analyze.cpp b/src/analyze.cpp
index 9a65479e49..1fa3d063bb 100644
--- a/src/analyze.cpp
+++ b/src/analyze.cpp
@@ -2833,7 +2833,18 @@ static uint32_t hash_const_val(ConstExprValue *const_val) {
const_val->data.x_arg_tuple.end_index * 2290442768;
case TypeTableEntryIdPointer:
{
- uint32_t hash_val = const_val->data.x_ptr.comptime_var_mem ? 2216297012 : 170810250;
+ uint32_t hash_val = 0;
+ switch (const_val->data.x_ptr.mut) {
+ case ConstPtrMutRuntimeVar:
+ hash_val += 3500721036;
+ break;
+ case ConstPtrMutComptimeConst:
+ hash_val += 4214318515;
+ break;
+ case ConstPtrMutComptimeVar:
+ hash_val += 1103195694;
+ break;
+ }
switch (const_val->data.x_ptr.special) {
case ConstPtrSpecialInvalid:
zig_unreachable();
@@ -3339,7 +3350,7 @@ bool const_values_equal(ConstExprValue *a, ConstExprValue *b) {
case TypeTableEntryIdPointer:
if (a->data.x_ptr.special != b->data.x_ptr.special)
return false;
- if (a->data.x_ptr.comptime_var_mem != b->data.x_ptr.comptime_var_mem)
+ if (a->data.x_ptr.mut != b->data.x_ptr.mut)
return false;
switch (a->data.x_ptr.special) {
case ConstPtrSpecialInvalid: