}
}
+ // Pointers promote to multi-pointers
+ // &u8 -> [&] u8
+ if (t2->kind == Type_Kind_MultiPointer) {
+ if (!recurse_pointers) return 1;
+
+ if (types_are_compatible(t1->Pointer.elem, t2->Pointer.elem)) return 1;
+ }
+
+ // Pointer decays to rawptr
if (t2->kind == Type_Kind_Basic && t2->Basic.kind == Basic_Kind_Rawptr) return 1;
break;
from_stack :: macro (size: u32) -> rawptr {
// This should do something about the alignment...
// Everything so far has assume that the stack is aligned to 16 bytes.
- defer __stack_top = ~~(cast([&]u8) __stack_top + size);
+ defer __stack_top = cast([&]u8, __stack_top) + size;
return __stack_top;
}
array_from_stack :: macro ($T: type_expr, size: u32) -> [] T {
- defer __stack_top = ~~(cast([&]u8) __stack_top + size * sizeof T);
+ defer __stack_top = cast([&]u8, __stack_top) + size * sizeof T;
return (cast([&]T) __stack_top)[0 .. size];
}
n = -n;
}
- c: [&] u8 = ~~&buf[buf.count - 1];
+ c: [&] u8 = &buf[buf.count - 1];
len := 0;
BASE64_MAP := "0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz+/";
// Converts an unsigned number into a string using the buffer provided.
// Behaves like i64_to_str.
u64_to_str :: (n: u64, base: u64, buf: [] u8, min_length := 0, prefix := false) -> str {
- c: [&] u8 = ~~&buf[buf.count - 1];
+ c: [&] u8 = &buf[buf.count - 1];
len := 0;
BASE64_MAP := "0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz+/";
flush=.{ buffer, flush_to_dyn_str }
};
- final := format_va(&output, format, ~~va);
+ final := format_va(&output, format, va);
string.concat(buffer, final);
return *buffer;
}
i += 1;
}
- formatting.minimum_width = ~~digits;
+ formatting.minimum_width = digits;
}
case #char "!" {
format.quote_strings = true;
output->write("Some(");
- format_any(output, &format, .{ ~~(cast([&] u8) v.data + s.members[1].offset), s.members[1].type });
+ format_any(output, &format, .{ cast([&] u8) v.data + s.members[1].offset, s.members[1].type });
output->write(")");
} else {
output->write(member.name);
output->write(" = ");
- format_any(output, &format, .{ ~~(cast([&] u8) v.data + member.offset), member.type });
+ format_any(output, &format, .{ cast([&] u8) v.data + member.offset, member.type });
}
}
for _: format.indentation do output->write(#char " ");
}
- format_any(output, &format, .{ ~~(cast([&] u8) data + get_type_info(a.of).size * i), a.of });
+ format_any(output, &format, .{ cast([&] u8) data + get_type_info(a.of).size * i, a.of });
}
for i: a.count {
if i != 0 do output->write(", ");
- format_any(output, formatting, .{ ~~(cast([&] u8) data + get_type_info(a.of).size * i), a.of });
+ format_any(output, formatting, .{ cast([&] u8) data + get_type_info(a.of).size * i, a.of });
}
output->write(" ]");
case f64 {
dest := cast(&f64) target;
- *dest = ~~ str_to_f64(to_parse);
+ *dest = str_to_f64(to_parse);
return true;
}
write_byte = (use fs: &os.File, byte: u8) -> io.Error {
b := byte;
bytes_wrote: u64;
- error := __file_write(data, .{ ~~&b, 1 }, &bytes_wrote);
+ error := __file_write(data, .{ &b, 1 }, &bytes_wrote);
return error;
},
#match as_str from_cstr
from_cstr :: (s: cstr) -> str {
- return .{ data = ~~s, count = length(s) };
+ return .{ data = s, count = length(s) };
}