aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--src/Sema.zig6
-rw-r--r--src/Zir.zig3
-rw-r--r--src/main.zig3
-rw-r--r--src/type.zig46
-rw-r--r--src/value.zig4
5 files changed, 7 insertions, 55 deletions
diff --git a/src/Sema.zig b/src/Sema.zig
index d73411e7b7..2cbdb615f6 100644
--- a/src/Sema.zig
+++ b/src/Sema.zig
@@ -3319,8 +3319,6 @@ fn zirEnsureErrUnionPayloadVoid(sema: *Sema, block: *Block, inst: Zir.Inst.Index
operand_ty.childType()
else
operand_ty;
- // TODO this should be validated in a more generic instruction that is
- // emitted for all ifs and whiles with an error union condition.
if (err_union_ty.zigTypeTag() != .ErrorUnion) return;
const payload_ty = err_union_ty.errorUnionPayload().zigTypeTag();
if (payload_ty != .Void and payload_ty != .NoReturn) {
@@ -21596,7 +21594,7 @@ fn zirVarExtended(
.owner_decl = sema.owner_decl_index,
.init = init_val,
.is_extern = small.is_extern,
- .is_mutable = true, // TODO get rid of this unused field
+ .is_mutable = true,
.is_threadlocal = small.is_threadlocal,
.is_weak_linkage = false,
.lib_name = null,
@@ -22075,7 +22073,7 @@ fn zirBuiltinExtern(
.owner_decl = sema.owner_decl_index,
.init = Value.initTag(.unreachable_value),
.is_extern = true,
- .is_mutable = false, // TODO get rid of this unused field
+ .is_mutable = false,
.is_threadlocal = options.is_thread_local,
.is_weak_linkage = options.linkage == .Weak,
.lib_name = null,
diff --git a/src/Zir.zig b/src/Zir.zig
index ffe1f4c345..3f2e935050 100644
--- a/src/Zir.zig
+++ b/src/Zir.zig
@@ -100,8 +100,7 @@ pub fn nullTerminatedString(code: Zir, index: usize) [:0]const u8 {
pub fn refSlice(code: Zir, start: usize, len: usize) []Inst.Ref {
const raw_slice = code.extra[start..][0..len];
- // TODO we should be able to directly `@ptrCast` the slice to the other slice type.
- return @ptrCast([*]Inst.Ref, raw_slice.ptr)[0..len];
+ return @ptrCast([]Inst.Ref, raw_slice);
}
pub fn hasCompileErrors(code: Zir) bool {
diff --git a/src/main.zig b/src/main.zig
index 814e60f97a..592bae278d 100644
--- a/src/main.zig
+++ b/src/main.zig
@@ -3412,8 +3412,7 @@ fn runOrTest(
} else if (watch) {
warn("process exited with code {d}", .{code});
} else {
- // TODO https://github.com/ziglang/zig/issues/6342
- process.exit(1);
+ process.exit(code);
}
},
else => {
diff --git a/src/type.zig b/src/type.zig
index 632be95438..2481423cb0 100644
--- a/src/type.zig
+++ b/src/type.zig
@@ -1236,7 +1236,7 @@ pub const Type = extern union {
// we can't hash these based on tags because they wouldn't match the expanded version.
.type_info => unreachable, // needed to resolve the type before now
- .bound_fn => unreachable, // TODO delete from the language
+ .bound_fn => unreachable,
.var_args_param => unreachable, // can be any type
}
}
@@ -3272,7 +3272,7 @@ pub const Type = extern union {
.fn_ccc_void_no_args => unreachable, // represents machine code; not a pointer
.function => unreachable, // represents machine code; not a pointer
.@"opaque" => unreachable, // no size available
- .bound_fn => unreachable, // TODO remove from the language
+ .bound_fn => unreachable,
.noreturn => unreachable,
.inferred_alloc_const => unreachable,
.inferred_alloc_mut => unreachable,
@@ -4088,47 +4088,6 @@ pub const Type = extern union {
}
}
- /// Returns if type can be used for a runtime variable
- pub fn isValidVarType(self: Type, is_extern: bool) bool {
- var ty = self;
- while (true) switch (ty.zigTypeTag()) {
- .Bool,
- .Int,
- .Float,
- .ErrorSet,
- .Enum,
- .Frame,
- .AnyFrame,
- => return true,
-
- .Opaque => return is_extern,
- .ComptimeFloat,
- .ComptimeInt,
- .EnumLiteral,
- .NoReturn,
- .Type,
- .Void,
- .Undefined,
- .Null,
- => return false,
-
- .Optional => {
- var buf: Payload.ElemType = undefined;
- return ty.optionalChild(&buf).isValidVarType(is_extern);
- },
- .Pointer, .Array, .Vector => ty = ty.elemType(),
- .ErrorUnion => ty = ty.errorUnionPayload(),
-
- .Fn => @panic("TODO fn isValidVarType"),
- .Struct => {
- // TODO this is not always correct; introduce lazy value mechanism
- // and here we need to force a resolve of "type requires comptime".
- return true;
- },
- .Union => @panic("TODO union isValidVarType"),
- };
- }
-
/// For *[N]T, returns [N]T.
/// For *T, returns T.
/// For [*]T, returns T.
@@ -5434,7 +5393,6 @@ pub const Type = extern union {
}
/// Asserts the type is an enum or a union.
- /// TODO support unions
pub fn intTagType(ty: Type, buffer: *Payload.Bits) Type {
switch (ty.tag()) {
.enum_full, .enum_nonexhaustive => return ty.cast(Payload.EnumFull).?.data.tag_ty,
diff --git a/src/value.zig b/src/value.zig
index eeb1228ebc..45b2bfd341 100644
--- a/src/value.zig
+++ b/src/value.zig
@@ -814,7 +814,6 @@ pub const Value = extern union {
.float_80 => return out_stream.print("{}", .{val.castTag(.float_80).?.data}),
.float_128 => return out_stream.print("{}", .{val.castTag(.float_128).?.data}),
.@"error" => return out_stream.print("error.{s}", .{val.castTag(.@"error").?.data.name}),
- // TODO to print this it should be error{ Set, Items }!T(val), but we need the type for that
.eu_payload => {
try out_stream.writeAll("(eu_payload) ");
val = val.castTag(.eu_payload).?.data;
@@ -989,8 +988,7 @@ pub const Value = extern union {
switch (val.tag()) {
.enum_field_index => {
const field_index = val.castTag(.enum_field_index).?.data;
- // TODO should `@intToEnum` do this `@intCast` for you?
- return @intToEnum(E, @intCast(@typeInfo(E).Enum.tag_type, field_index));
+ return @intToEnum(E, field_index);
},
.the_only_possible_value => {
const fields = std.meta.fields(E);