}
}
print OUT "\n\@EXPORT = qw(@ops);\n\n";
-my $dumper = Data::Dumper->new([\%attr],["*Attr"]);
-$dumper->Sortkeys(1);
-print OUT $dumper->Dump;
+# previously we used Data::Dumper, with Sortkeys()
+# to make sure the generated code only changed when the data
+# changed. Unfortunately Sortkeys isn't supported in some versions of
+# perl we try to support, so we now generate this manually
+print OUT "%Attr =\n (\n";
+for my $opname (sort keys %attr) {
+ my $op = $attr{$opname};
+ print OUT " '$opname' =>\n {\n";
+ for my $attrname (sort keys %$op) {
+ my $attr = $op->{$attrname};
+ print OUT " '$attrname' => ";
+ if (defined $attr) {
+ if ($attr =~ /^\d+$/) {
+ print OUT $attr;
+ }
+ else {
+ print OUT "'$attr'";
+ }
+ }
+ else {
+ print OUT "undef";
+ }
+
+ print OUT ",\n";
+ }
+ print OUT " },\n";
+}
+print OUT " );\n";
print OUT "\$MaxOperands = $max_opr;\n";
print OUT qq/\$PackCode = "$reg_pack";\n/;
print OUT <<'EOS';
=head1 NAME
-Imager::Regops - generated information about the register based VM
+Imager::Regops - generated information about the register based virtual machine
=head1 SYNOPSIS
=head1 DESCRIPTION
-This module is generated automatically from regmach.h so we don't need to
+This module is generated automatically from F<regmach.h> so we don't need to
maintain the same information in at least one extra place.
At least that's the idea.