Browse Source

build: restore compatibility support

Commit 0d56ba3 (build: restore the exercise chain) broke the
compatibility support for old compilers, due to the use of the
multi-object for loop syntax.

Use the normal for loop syntax; the change still keep the code readable.

Use the variable `n`, instead of `i`, when referring to the exercise
number; this will improve the readability.

Closes #227
Manlio Perillo 2 years ago
parent
commit
be782af7a3
1 changed files with 11 additions and 8 deletions
  1. 11 8
      build.zig

+ 11 - 8
build.zig

@@ -559,13 +559,13 @@ pub fn build(b: *Build) !void {
 
     const header_step = PrintStep.create(b, logo, std.io.getStdErr());
 
-    if (exno) |i| {
-        if (i == 0 or i > exercises.len - 1) {
-            print("unknown exercise number: {}\n", .{i});
+    if (exno) |n| {
+        if (n == 0 or n > exercises.len - 1) {
+            print("unknown exercise number: {}\n", .{n});
             std.os.exit(1);
         }
 
-        const ex = exercises[i - 1];
+        const ex = exercises[n - 1];
         const base_name = ex.baseName();
         const file_path = std.fs.path.join(b.allocator, &[_][]const u8{
             if (use_healed) "patches/healed" else "exercises", ex.main_file,
@@ -603,8 +603,8 @@ pub fn build(b: *Build) !void {
 
         var prev_step = verify_step;
         for (exercises) |exn| {
-            const n = exn.number();
-            if (n > i) {
+            const nth = exn.number();
+            if (nth > n) {
                 const verify_stepn = ZiglingStep.create(b, exn, use_healed);
                 verify_stepn.step.dependOn(&prev_step.step);
 
@@ -646,8 +646,11 @@ pub fn build(b: *Build) !void {
     ziglings_step.dependOn(&header_step.step);
     b.default_step = ziglings_step;
 
+    // Don't use the "multi-object for loop" syntax, in order to avoid a syntax
+    // error with old Zig compilers.
     var prev_step: *Step = undefined;
-    for (exercises, 0..) |ex, i| {
+    for (exercises) |ex| {
+        const n = ex.number();
         const base_name = ex.baseName();
         const file_path = std.fs.path.join(b.allocator, &[_][]const u8{
             "exercises", ex.main_file,
@@ -657,7 +660,7 @@ pub fn build(b: *Build) !void {
         build_step.install();
 
         const verify_stepn = ZiglingStep.create(b, ex, use_healed);
-        if (i == 0) {
+        if (n == 1) {
             prev_step = &verify_stepn.step;
         } else {
             verify_stepn.step.dependOn(prev_step);