Skip to content

Commit b3763d4

Browse files
committed
Perl: declare _index variable in repeat: eos loops
1 parent 7ac0461 commit b3763d4

File tree

1 file changed

+8
-0
lines changed

1 file changed

+8
-0
lines changed

shared/src/main/scala/io/kaitai/struct/languages/PerlCompiler.scala

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -247,13 +247,21 @@ class PerlCompiler(typeProvider: ClassTypeProvider, config: RuntimeConfig)
247247
out.puts(s"${privateMemberName(id)} = [];")
248248

249249
override def condRepeatEosHeader(id: Identifier, io: String, dataType: DataType): Unit = {
250+
// Perl allows shadowing of variables, no need a scope to isolate them
251+
out.puts("my $i = 0;")
250252
out.puts(s"while (!$io->is_eof()) {")
251253
out.inc
252254
}
253255

254256
override def handleAssignmentRepeatEos(id: Identifier, expr: String): Unit =
255257
out.puts(s"push @{${privateMemberName(id)}}, $expr;")
256258

259+
override def condRepeatEosFooter: Unit = {
260+
out.puts("$i++;")
261+
out.dec
262+
out.puts("}")
263+
}
264+
257265
override def condRepeatExprHeader(countExpr: expr): Unit = {
258266
out.puts(s"for (my $$i = 0, $$_end = ${expression(countExpr)}; $$i < $$_end; ++$$i) {")
259267
out.inc

0 commit comments

Comments
 (0)