Commit 7a8f7dcb8c
Changed files (2)
test
behavior
bugs
test/behavior/bugs/7325.zig
@@ -0,0 +1,113 @@
+const std = @import("std");
+const builtin = @import("builtin");
+const testing = std.testing;
+
+const string = "hello world";
+
+const TempRef = struct {
+ index: usize,
+ is_weak: bool,
+};
+
+const BuiltinEnum = struct {
+ name: []const u8,
+};
+
+const ParamType = union(enum) {
+ boolean,
+ buffer,
+ one_of: BuiltinEnum,
+};
+
+const CallArg = struct {
+ value: Expression,
+};
+
+const Expression = union(enum) {
+ literal_boolean: bool,
+ literal_enum_value: EnumLiteral,
+};
+
+const EnumLiteral = struct {
+ label: []const u8,
+};
+
+const ExpressionResult = union(enum) {
+ temp_buffer: TempRef,
+ literal_boolean: bool,
+ literal_enum_value: []const u8,
+};
+
+fn commitCalleeParam(result: ExpressionResult, callee_param_type: ParamType) ExpressionResult {
+ switch (callee_param_type) {
+ .boolean => {
+ return result;
+ },
+ .buffer => {
+ return ExpressionResult{
+ .temp_buffer = .{ .index = 0, .is_weak = false },
+ };
+ },
+ .one_of => {
+ return result;
+ },
+ }
+}
+
+fn genExpression(expr: Expression) !ExpressionResult {
+ switch (expr) {
+ .literal_boolean => |value| {
+ return ExpressionResult{
+ .literal_boolean = value,
+ };
+ },
+ .literal_enum_value => |v| {
+ try testing.expectEqualStrings(string, v.label);
+ const result: ExpressionResult = .{
+ .literal_enum_value = v.label,
+ };
+ switch (result) {
+ .literal_enum_value => |w| {
+ try testing.expectEqualStrings(string, w);
+ },
+ else => {},
+ }
+ return result;
+ },
+ }
+}
+
+test {
+ if (builtin.zig_backend == .stage2_wasm) return error.SkipZigTest; // TODO
+ if (builtin.zig_backend == .stage2_x86_64) return error.SkipZigTest; // TODO
+ if (builtin.zig_backend == .stage2_x86) return error.SkipZigTest; // TODO
+ if (builtin.zig_backend == .stage2_aarch64) return error.SkipZigTest; // TODO
+ if (builtin.zig_backend == .stage2_arm) return error.SkipZigTest; // TODO
+
+ var param: ParamType = .{
+ .one_of = .{ .name = "name" },
+ };
+ var arg: CallArg = .{
+ .value = .{
+ .literal_enum_value = .{
+ .label = string,
+ },
+ },
+ };
+
+ const result = try genExpression(arg.value);
+ switch (result) {
+ .literal_enum_value => |w| {
+ try testing.expectEqualStrings(string, w);
+ },
+ else => {},
+ }
+
+ const derp = commitCalleeParam(result, param);
+ switch (derp) {
+ .literal_enum_value => |w| {
+ try testing.expectEqualStrings(string, w);
+ },
+ else => {},
+ }
+}
test/behavior.zig
@@ -68,6 +68,7 @@ test {
_ = @import("behavior/bugs/7003.zig");
_ = @import("behavior/bugs/7047.zig");
_ = @import("behavior/bugs/7187.zig");
+ _ = @import("behavior/bugs/7325.zig");
_ = @import("behavior/bugs/9584.zig");
_ = @import("behavior/bugs/10138.zig");
_ = @import("behavior/bugs/10147.zig");