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
This commit is contained in:
Manlio Perillo 2023-04-10 18:14:58 +02:00
parent 647a24afae
commit be782af7a3

View file

@ -559,13 +559,13 @@ pub fn build(b: *Build) !void {
const header_step = PrintStep.create(b, logo, std.io.getStdErr()); const header_step = PrintStep.create(b, logo, std.io.getStdErr());
if (exno) |i| { if (exno) |n| {
if (i == 0 or i > exercises.len - 1) { if (n == 0 or n > exercises.len - 1) {
print("unknown exercise number: {}\n", .{i}); print("unknown exercise number: {}\n", .{n});
std.os.exit(1); std.os.exit(1);
} }
const ex = exercises[i - 1]; const ex = exercises[n - 1];
const base_name = ex.baseName(); const base_name = ex.baseName();
const file_path = std.fs.path.join(b.allocator, &[_][]const u8{ const file_path = std.fs.path.join(b.allocator, &[_][]const u8{
if (use_healed) "patches/healed" else "exercises", ex.main_file, 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; var prev_step = verify_step;
for (exercises) |exn| { for (exercises) |exn| {
const n = exn.number(); const nth = exn.number();
if (n > i) { if (nth > n) {
const verify_stepn = ZiglingStep.create(b, exn, use_healed); const verify_stepn = ZiglingStep.create(b, exn, use_healed);
verify_stepn.step.dependOn(&prev_step.step); verify_stepn.step.dependOn(&prev_step.step);
@ -646,8 +646,11 @@ pub fn build(b: *Build) !void {
ziglings_step.dependOn(&header_step.step); ziglings_step.dependOn(&header_step.step);
b.default_step = ziglings_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; var prev_step: *Step = undefined;
for (exercises, 0..) |ex, i| { for (exercises) |ex| {
const n = ex.number();
const base_name = ex.baseName(); const base_name = ex.baseName();
const file_path = std.fs.path.join(b.allocator, &[_][]const u8{ const file_path = std.fs.path.join(b.allocator, &[_][]const u8{
"exercises", ex.main_file, "exercises", ex.main_file,
@ -657,7 +660,7 @@ pub fn build(b: *Build) !void {
build_step.install(); build_step.install();
const verify_stepn = ZiglingStep.create(b, ex, use_healed); const verify_stepn = ZiglingStep.create(b, ex, use_healed);
if (i == 0) { if (n == 1) {
prev_step = &verify_stepn.step; prev_step = &verify_stepn.step;
} else { } else {
verify_stepn.step.dependOn(prev_step); verify_stepn.step.dependOn(prev_step);