@@ -464,105 +464,239 @@ test Options {
464
464
bar ,
465
465
};
466
466
467
+ const NormalUnion = union (NormalEnum ) {
468
+ foo : []const u8 ,
469
+ bar : u32 align (8 ),
470
+ };
471
+
472
+ const NonExhaustiveEnum = enum (u8 ) {
473
+ one ,
474
+ two ,
475
+ three ,
476
+ _ ,
477
+ };
478
+
467
479
const nested_array = [2 ][2 ]u16 {
468
480
[2 ]u16 { 300 , 200 },
469
481
[2 ]u16 { 300 , 200 },
470
482
};
471
483
const nested_slice : []const []const u16 = &[_ ][]const u16 { & nested_array [0 ], & nested_array [1 ] };
472
484
485
+ const Empty = struct {};
486
+
473
487
const NormalStruct = struct {
474
488
hello : ? []const u8 ,
475
489
world : bool = true ,
476
490
};
477
491
492
+ const PackedStruct = packed struct {
493
+ age : u32 ,
494
+ height : u32 ,
495
+ _ : u32 = 0 ,
496
+ };
497
+
498
+ const ExternStruct = extern struct {
499
+ age : u32 ,
500
+ height : u32 ,
501
+ };
502
+
478
503
const NestedStruct = struct {
479
- normal_struct : NormalStruct ,
504
+ normal_struct : NormalStruct align ( 1 ) ,
480
505
normal_enum : NormalEnum = .foo ,
481
506
};
482
507
508
+ const Tuple = struct { []const u8 , []const u8 };
509
+ const ComptimeTuple = struct { comptime u32 = 100 };
510
+
483
511
options .addOption (usize , "option1" , 1 );
484
512
options .addOption (? usize , "option2" , null );
485
513
options .addOption (? usize , "option3" , 3 );
486
514
options .addOption (comptime_int , "option4" , 4 );
515
+ options .addOption (comptime_float , "option5" , std .math .pi );
487
516
options .addOption ([]const u8 , "string" , "zigisthebest" );
517
+ options .addOption ([:0 ]const u8 , "string2" , "zigisthebest" );
488
518
options .addOption (? []const u8 , "optional_string" , null );
519
+ options .addOption (? [:0 ]const u8 , "optional_string2" , null );
489
520
options .addOption ([2 ][2 ]u16 , "nested_array" , nested_array );
490
521
options .addOption ([]const []const u16 , "nested_slice" , nested_slice );
491
522
options .addOption (KeywordEnum , "keyword_enum" , .@"0.8.1" );
492
523
options .addOption (std .SemanticVersion , "semantic_version" , try std .SemanticVersion .parse ("0.1.2-foo+bar" ));
493
524
options .addOption (NormalEnum , "normal1_enum" , NormalEnum .foo );
494
525
options .addOption (NormalEnum , "normal2_enum" , NormalEnum .bar );
526
+ options .addOption ([]const NormalEnum , "normal_enum_array" , &[_ ]NormalEnum { .foo , .bar , .foo });
527
+ options .addOption (NormalUnion , "normal_union" , NormalUnion { .bar = 64 });
528
+ options .addOption (NonExhaustiveEnum , "non_exhaustive_enum1" , .one );
529
+ options .addOption (NonExhaustiveEnum , "non_exhaustive_enum2" , @enumFromInt (20 ));
530
+ options .addOption ([]const Empty , "empty" , &[_ ]Empty {.{}});
495
531
options .addOption (NormalStruct , "normal1_struct" , NormalStruct {
496
532
.hello = "foo" ,
497
533
});
498
534
options .addOption (NormalStruct , "normal2_struct" , NormalStruct {
499
535
.hello = null ,
500
536
.world = false ,
501
537
});
538
+ options .addOption (ExternStruct , "extern_struct" , .{ .age = 100 , .height = 100 });
539
+ options .addOption ([2 :.{ .age = 10 , .height = 1000 }]PackedStruct , "packed_struct_array_with_sentinel" , .{
540
+ .{ .age = 45 , .height = 0 },
541
+ .{ .age = 100 , .height = 100 },
542
+ });
502
543
options .addOption (NestedStruct , "nested_struct" , NestedStruct {
503
544
.normal_struct = .{ .hello = "bar" },
504
545
});
546
+ options .addOption (Tuple , "tuple" , .{ "foo" , "bar" });
547
+ options .addOption ([]const Tuple , "tuple_slice" , &.{
548
+ .{ "foo" , "bar" },
549
+ .{ "abc" , "def" },
550
+ });
551
+ options .addOption (ComptimeTuple , "comptime_tuple" , .{100 });
505
552
506
553
try std .testing .expectEqualStrings (
507
554
\\pub const option1: usize = 1;
555
+ \\
508
556
\\pub const option2: ?usize = null;
557
+ \\
509
558
\\pub const option3: ?usize = 3;
559
+ \\
510
560
\\pub const option4: comptime_int = 4;
561
+ \\
562
+ \\pub const option5: comptime_float = 3.1415926535897932384626433832795028e0;
563
+ \\
511
564
\\pub const string: []const u8 = "zigisthebest";
565
+ \\
566
+ \\pub const string2: [:0]const u8 = "zigisthebest";
567
+ \\
512
568
\\pub const optional_string: ?[]const u8 = null;
513
- \\pub const nested_array: [2][2]u16 = [2][2]u16 {
514
- \\ [2]u16 {
569
+ \\
570
+ \\pub const optional_string2: ?[:0]const u8 = null;
571
+ \\
572
+ \\pub const nested_array: [2][2]u16 = .{
573
+ \\ .{
515
574
\\ 300,
516
575
\\ 200,
517
576
\\ },
518
- \\ [2]u16 {
577
+ \\ . {
519
578
\\ 300,
520
579
\\ 200,
521
580
\\ },
522
581
\\};
523
- \\pub const nested_slice: []const []const u16 = &[_][]const u16 {
524
- \\ &[_]u16 {
582
+ \\
583
+ \\pub const nested_slice: []const []const u16 = &.{
584
+ \\ &.{
525
585
\\ 300,
526
586
\\ 200,
527
587
\\ },
528
- \\ &[_]u16 {
588
+ \\ &. {
529
589
\\ 300,
530
590
\\ 200,
531
591
\\ },
532
592
\\};
533
- \\pub const @"Build.Step.Options.decltest.Options.KeywordEnum" = enum (u0) {
593
+ \\
594
+ \\pub const @"Build.Step.Options.decltest.Options.KeywordEnum" = enum(u0) {
534
595
\\ @"0.8.1" = 0,
535
596
\\};
597
+ \\
536
598
\\pub const keyword_enum: @"Build.Step.Options.decltest.Options.KeywordEnum" = .@"0.8.1";
599
+ \\
537
600
\\pub const semantic_version: @import("std").SemanticVersion = .{
538
601
\\ .major = 0,
539
602
\\ .minor = 1,
540
603
\\ .patch = 2,
541
604
\\ .pre = "foo",
542
605
\\ .build = "bar",
543
606
\\};
544
- \\pub const @"Build.Step.Options.decltest.Options.NormalEnum" = enum (u1) {
607
+ \\
608
+ \\pub const @"Build.Step.Options.decltest.Options.NormalEnum" = enum(u1) {
545
609
\\ foo = 0,
546
610
\\ bar = 1,
547
611
\\};
612
+ \\
548
613
\\pub const normal1_enum: @"Build.Step.Options.decltest.Options.NormalEnum" = .foo;
614
+ \\
549
615
\\pub const normal2_enum: @"Build.Step.Options.decltest.Options.NormalEnum" = .bar;
616
+ \\
617
+ \\pub const normal_enum_array: []const @"Build.Step.Options.decltest.Options.NormalEnum" = &.{
618
+ \\ .foo,
619
+ \\ .bar,
620
+ \\ .foo,
621
+ \\};
622
+ \\
623
+ \\pub const @"Build.Step.Options.decltest.Options.NormalUnion" = union(@"Build.Step.Options.decltest.Options.NormalEnum") {
624
+ \\ foo: []const u8,
625
+ \\ bar: u32 align(8),
626
+ \\};
627
+ \\
628
+ \\pub const normal_union: @"Build.Step.Options.decltest.Options.NormalUnion" = .{ .bar = 64 };
629
+ \\
630
+ \\pub const @"Build.Step.Options.decltest.Options.NonExhaustiveEnum" = enum(u8) {
631
+ \\ one = 0,
632
+ \\ two = 1,
633
+ \\ three = 2,
634
+ \\ _,
635
+ \\};
636
+ \\
637
+ \\pub const non_exhaustive_enum1: @"Build.Step.Options.decltest.Options.NonExhaustiveEnum" = .one;
638
+ \\
639
+ \\pub const non_exhaustive_enum2: @"Build.Step.Options.decltest.Options.NonExhaustiveEnum" = @enumFromInt(20);
640
+ \\
641
+ \\pub const @"Build.Step.Options.decltest.Options.Empty" = struct {};
642
+ \\
643
+ \\pub const empty: []const @"Build.Step.Options.decltest.Options.Empty" = &.{
644
+ \\ .{},
645
+ \\};
646
+ \\
550
647
\\pub const @"Build.Step.Options.decltest.Options.NormalStruct" = struct {
551
648
\\ hello: ?[]const u8,
552
649
\\ world: bool = true,
553
650
\\};
651
+ \\
554
652
\\pub const normal1_struct: @"Build.Step.Options.decltest.Options.NormalStruct" = .{
555
653
\\ .hello = "foo",
556
654
\\ .world = true,
557
655
\\};
656
+ \\
558
657
\\pub const normal2_struct: @"Build.Step.Options.decltest.Options.NormalStruct" = .{
559
658
\\ .hello = null,
560
659
\\ .world = false,
561
660
\\};
661
+ \\
662
+ \\pub const @"Build.Step.Options.decltest.Options.ExternStruct" = extern struct {
663
+ \\ age: u32,
664
+ \\ height: u32,
665
+ \\};
666
+ \\
667
+ \\pub const extern_struct: @"Build.Step.Options.decltest.Options.ExternStruct" = .{
668
+ \\ .age = 100,
669
+ \\ .height = 100,
670
+ \\};
671
+ \\
672
+ \\pub const @"Build.Step.Options.decltest.Options.PackedStruct" = packed struct(u96) {
673
+ \\ age: u32,
674
+ \\ height: u32,
675
+ \\ _: u32 = 0,
676
+ \\};
677
+ \\
678
+ \\pub const packed_struct_array_with_sentinel: [2:.{
679
+ \\ .age = 10,
680
+ \\ .height = 1000,
681
+ \\ ._ = 0,
682
+ \\}]@"Build.Step.Options.decltest.Options.PackedStruct" = .{
683
+ \\ .{
684
+ \\ .age = 45,
685
+ \\ .height = 0,
686
+ \\ ._ = 0,
687
+ \\ },
688
+ \\ .{
689
+ \\ .age = 100,
690
+ \\ .height = 100,
691
+ \\ ._ = 0,
692
+ \\ },
693
+ \\};
694
+ \\
562
695
\\pub const @"Build.Step.Options.decltest.Options.NestedStruct" = struct {
563
- \\ normal_struct: @"Build.Step.Options.decltest.Options.NormalStruct",
696
+ \\ normal_struct: @"Build.Step.Options.decltest.Options.NormalStruct" align(1) ,
564
697
\\ normal_enum: @"Build.Step.Options.decltest.Options.NormalEnum" = .foo,
565
698
\\};
699
+ \\
566
700
\\pub const nested_struct: @"Build.Step.Options.decltest.Options.NestedStruct" = .{
567
701
\\ .normal_struct = .{
568
702
\\ .hello = "bar",
@@ -571,6 +705,35 @@ test Options {
571
705
\\ .normal_enum = .foo,
572
706
\\};
573
707
\\
708
+ \\pub const tuple: struct {
709
+ \\ []const u8,
710
+ \\ []const u8,
711
+ \\} = .{
712
+ \\ "foo",
713
+ \\ "bar",
714
+ \\};
715
+ \\
716
+ \\pub const tuple_slice: []const struct {
717
+ \\ []const u8,
718
+ \\ []const u8,
719
+ \\} = &.{
720
+ \\ .{
721
+ \\ "foo",
722
+ \\ "bar",
723
+ \\ },
724
+ \\ .{
725
+ \\ "abc",
726
+ \\ "def",
727
+ \\ },
728
+ \\};
729
+ \\
730
+ \\pub const comptime_tuple: struct {
731
+ \\ comptime u32 = 100,
732
+ \\} = .{
733
+ \\ 100,
734
+ \\};
735
+ \\
736
+ \\
574
737
, options .contents .items );
575
738
576
739
_ = try std .zig .Ast .parse (arena .allocator (), try options .contents .toOwnedSliceSentinel (0 ), .zig );
0 commit comments