Browse Source

Add ex079 quoted identifiers

Dave Gauer 4 years ago
parent
commit
34ac5f6742
4 changed files with 48 additions and 0 deletions
  1. 1 0
      README.md
  2. 5 0
      build.zig
  3. 30 0
      exercises/079_quoted_identifiers.zig
  4. 12 0
      patches/patches/079_quoted_identifiers.patch

+ 1 - 0
README.md

@@ -147,6 +147,7 @@ Core Language
 * [x] Inline loops
 * [x] Comptime
 * [x] Sentinel termination
+* [x] Quoted identifiers @""
 * [ ] Anonymous structs
 * [ ] Suspend / Resume
 * [ ] Async / Await

+ 5 - 0
build.zig

@@ -391,6 +391,11 @@ const exercises = [_]Exercise{
         .main_file = "078_sentinels3.zig",
         .output = "Weird Data!",
     },
+    .{
+        .main_file = "079_quoted_identifiers.zig",
+        .output = "Sweet freedom: 55, false.",
+        .hint = "Help us, Zig Programmer, you're our only hope!",
+    },
 };
 
 /// Check the zig version to make sure it can compile the examples properly.

+ 30 - 0
exercises/079_quoted_identifiers.zig

@@ -0,0 +1,30 @@
+//
+// Sometimes you need to create an identifier that will not, for
+// whatever reason, play by the naming rules:
+//
+//     const 55_cows: i32 = 55; // ILLEGAL: starts with a number
+//     const isn't true: bool = false; // ILLEGAL: what even?!
+//
+// If you try to create either of these under normal
+// circumstances, a special Program Identifier Syntax Security
+// Team (PISST) will come to your house and take you away.
+//
+// Thankfully, Zig has a way to sneak these wacky identifiers
+// past the authorities: the @"" identifier quoting syntax.
+//
+//     @"foo"
+//     
+// Please help us safely smuggle these fugitive identifiers into
+// our program:
+//
+const print = @import("std").debug.print;
+
+pub fn main() void {
+    const 55_cows: i32 = 55;
+    const isn't true: bool = false;
+    
+    print("Sweet freedom: {}, {}.\n", .{
+        55_cows,
+        isn't true,
+    });
+}

+ 12 - 0
patches/patches/079_quoted_identifiers.patch

@@ -0,0 +1,12 @@
+23,24c23,24
+<     const 55_cows: i32 = 55;
+<     const isn't true: bool = false;
+---
+>     const @"55_cows": i32 = 55;
+>     const @"isn't true": bool = false;
+27,28c27,28
+<         55_cows,
+<         isn't true,
+---
+>         @"55_cows",
+>         @"isn't true",