generate the %attr hash ourselves instead of with Data::Dumper since
authorTony Cook <tony@develop=help.com>
Sun, 18 Mar 2007 12:11:33 +0000 (12:11 +0000)
committerTony Cook <tony@develop=help.com>
Sun, 18 Mar 2007 12:11:33 +0000 (12:11 +0000)
not all of the facilities we use there are available on the older
perls we (try to) support

lib/Imager/Regops.pm
regops.perl

index bb365e4..8e0ade1 100644 (file)
@@ -61,372 +61,425 @@ use constant RBC_OP_COUNT => 51;
 
 @EXPORT = qw(RBC_ADD RBC_SUBTRACT RBC_MULT RBC_DIV RBC_MOD RBC_POW RBC_UMINUS RBC_MULTP RBC_ADDP RBC_SUBTRACTP RBC_SIN RBC_COS RBC_ATAN2 RBC_SQRT RBC_DISTANCE RBC_GETP1 RBC_GETP2 RBC_GETP3 RBC_VALUE RBC_HUE RBC_SAT RBC_HSV RBC_RED RBC_GREEN RBC_BLUE RBC_RGB RBC_INT RBC_IF RBC_IFP RBC_LE RBC_LT RBC_GE RBC_GT RBC_EQ RBC_NE RBC_AND RBC_OR RBC_NOT RBC_ABS RBC_RET RBC_JUMP RBC_JUMPZ RBC_JUMPNZ RBC_SET RBC_SETP RBC_PRINT RBC_RGBA RBC_HSVA RBC_ALPHA RBC_LOG RBC_EXP RBC_OP_COUNT);
 
-%Attr = (
-          'abs' => {
-                     'func' => 1,
-                     'opcode' => 38,
-                     'parms' => 1,
-                     'result' => 'r',
-                     'types' => 'r'
-                   },
-          'add' => {
-                     'func' => 0,
-                     'opcode' => 0,
-                     'parms' => 2,
-                     'result' => 'r',
-                     'types' => 'rr'
-                   },
-          'addp' => {
-                      'func' => 0,
-                      'opcode' => 8,
-                      'parms' => 2,
-                      'result' => 'p',
-                      'types' => 'pp'
-                    },
-          'alpha' => {
-                       'func' => 1,
-                       'opcode' => 48,
-                       'parms' => 1,
-                       'result' => 'r',
-                       'types' => 'p'
-                     },
-          'and' => {
-                     'func' => 0,
-                     'opcode' => 35,
-                     'parms' => 2,
-                     'result' => 'r',
-                     'types' => 'rr'
-                   },
-          'atan2' => {
-                       'func' => 1,
-                       'opcode' => 12,
-                       'parms' => 2,
-                       'result' => 'r',
-                       'types' => 'rr'
-                     },
-          'blue' => {
-                      'func' => 1,
-                      'opcode' => 24,
-                      'parms' => 1,
-                      'result' => 'r',
-                      'types' => 'p'
-                    },
-          'cos' => {
-                     'func' => 1,
-                     'opcode' => 11,
-                     'parms' => 1,
-                     'result' => 'r',
-                     'types' => 'r'
-                   },
-          'distance' => {
-                          'func' => 1,
-                          'opcode' => 14,
-                          'parms' => 4,
-                          'result' => 'r',
-                          'types' => 'rrrr'
-                        },
-          'div' => {
-                     'func' => 0,
-                     'opcode' => 3,
-                     'parms' => 2,
-                     'result' => 'r',
-                     'types' => 'rr'
-                   },
-          'eq' => {
-                    'func' => 0,
-                    'opcode' => 33,
-                    'parms' => 2,
-                    'result' => 'r',
-                    'types' => 'rr'
-                  },
-          'exp' => {
-                     'func' => 1,
-                     'opcode' => 50,
-                     'parms' => 1,
-                     'result' => 'r',
-                     'types' => 'r'
-                   },
-          'ge' => {
-                    'func' => 0,
-                    'opcode' => 31,
-                    'parms' => 2,
-                    'result' => 'r',
-                    'types' => 'rr'
-                  },
-          'getp1' => {
-                       'func' => 1,
-                       'opcode' => 15,
-                       'parms' => 2,
-                       'result' => 'p',
-                       'types' => 'rr'
-                     },
-          'getp2' => {
-                       'func' => 1,
-                       'opcode' => 16,
-                       'parms' => 2,
-                       'result' => 'p',
-                       'types' => 'rr'
-                     },
-          'getp3' => {
-                       'func' => 1,
-                       'opcode' => 17,
-                       'parms' => 2,
-                       'result' => 'p',
-                       'types' => 'rr'
-                     },
-          'green' => {
-                       'func' => 1,
-                       'opcode' => 23,
-                       'parms' => 1,
-                       'result' => 'r',
-                       'types' => 'p'
-                     },
-          'gt' => {
-                    'func' => 0,
-                    'opcode' => 32,
-                    'parms' => 2,
-                    'result' => 'r',
-                    'types' => 'rr'
-                  },
-          'hsv' => {
-                     'func' => 1,
-                     'opcode' => 21,
-                     'parms' => 3,
-                     'result' => 'p',
-                     'types' => 'rrr'
-                   },
-          'hsva' => {
-                      'func' => 1,
-                      'opcode' => 47,
-                      'parms' => 4,
-                      'result' => 'p',
-                      'types' => 'rrrr'
-                    },
-          'hue' => {
-                     'func' => 1,
-                     'opcode' => 19,
-                     'parms' => 1,
-                     'result' => 'r',
-                     'types' => 'p'
-                   },
-          'if' => {
-                    'func' => 1,
-                    'opcode' => 27,
-                    'parms' => 3,
-                    'result' => 'r',
-                    'types' => 'rrr'
-                  },
-          'ifp' => {
-                     'func' => 1,
-                     'opcode' => 28,
-                     'parms' => 3,
-                     'result' => 'p',
-                     'types' => 'rpp'
-                   },
-          'int' => {
-                     'func' => 1,
-                     'opcode' => 26,
-                     'parms' => 1,
-                     'result' => 'r',
-                     'types' => 'r'
-                   },
-          'jump' => {
-                      'func' => 0,
-                      'opcode' => 40,
-                      'parms' => 0,
-                      'result' => undef,
-                      'types' => ''
-                    },
-          'jumpnz' => {
-                        'func' => 0,
-                        'opcode' => 42,
-                        'parms' => 1,
-                        'result' => undef,
-                        'types' => 'r'
-                      },
-          'jumpz' => {
-                       'func' => 0,
-                       'opcode' => 41,
-                       'parms' => 1,
-                       'result' => undef,
-                       'types' => 'r'
-                     },
-          'le' => {
-                    'func' => 0,
-                    'opcode' => 29,
-                    'parms' => 2,
-                    'result' => 'r',
-                    'types' => 'rr'
-                  },
-          'log' => {
-                     'func' => 1,
-                     'opcode' => 49,
-                     'parms' => 1,
-                     'result' => 'r',
-                     'types' => 'r'
-                   },
-          'lt' => {
-                    'func' => 0,
-                    'opcode' => 30,
-                    'parms' => 2,
-                    'result' => 'r',
-                    'types' => 'rr'
-                  },
-          'mod' => {
-                     'func' => 0,
-                     'opcode' => 4,
-                     'parms' => 2,
-                     'result' => 'r',
-                     'types' => 'rr'
-                   },
-          'mult' => {
-                      'func' => 0,
-                      'opcode' => 2,
-                      'parms' => 2,
-                      'result' => 'r',
-                      'types' => 'rr'
-                    },
-          'multp' => {
-                       'func' => 0,
-                       'opcode' => 7,
-                       'parms' => 2,
-                       'result' => 'p',
-                       'types' => 'pr'
-                     },
-          'ne' => {
-                    'func' => 0,
-                    'opcode' => 34,
-                    'parms' => 2,
-                    'result' => 'r',
-                    'types' => 'rr'
-                  },
-          'not' => {
-                     'func' => 0,
-                     'opcode' => 37,
-                     'parms' => 1,
-                     'result' => 'r',
-                     'types' => 'r'
-                   },
-          'op_count' => {
-                          'func' => 0,
-                          'opcode' => 51,
-                          'parms' => 0,
-                          'result' => undef,
-                          'types' => ''
-                        },
-          'or' => {
-                    'func' => 0,
-                    'opcode' => 36,
-                    'parms' => 2,
-                    'result' => 'r',
-                    'types' => 'rr'
-                  },
-          'pow' => {
-                     'func' => 0,
-                     'opcode' => 5,
-                     'parms' => 2,
-                     'result' => 'r',
-                     'types' => 'rr'
-                   },
-          'print' => {
-                       'func' => 0,
-                       'opcode' => 45,
-                       'parms' => 1,
-                       'result' => undef,
-                       'types' => 'r'
-                     },
-          'red' => {
-                     'func' => 1,
-                     'opcode' => 22,
-                     'parms' => 1,
-                     'result' => 'r',
-                     'types' => 'p'
-                   },
-          'ret' => {
-                     'func' => 0,
-                     'opcode' => 39,
-                     'parms' => 1,
-                     'result' => undef,
-                     'types' => 'p'
-                   },
-          'rgb' => {
-                     'func' => 1,
-                     'opcode' => 25,
-                     'parms' => 3,
-                     'result' => 'p',
-                     'types' => 'rrr'
-                   },
-          'rgba' => {
-                      'func' => 1,
-                      'opcode' => 46,
-                      'parms' => 4,
-                      'result' => 'p',
-                      'types' => 'rrrr'
-                    },
-          'sat' => {
-                     'func' => 1,
-                     'opcode' => 20,
-                     'parms' => 1,
-                     'result' => 'r',
-                     'types' => 'p'
-                   },
-          'set' => {
-                     'func' => 0,
-                     'opcode' => 43,
-                     'parms' => 1,
-                     'result' => 'r',
-                     'types' => 'r'
-                   },
-          'setp' => {
-                      'func' => 0,
-                      'opcode' => 44,
-                      'parms' => 1,
-                      'result' => 'p',
-                      'types' => 'p'
-                    },
-          'sin' => {
-                     'func' => 1,
-                     'opcode' => 10,
-                     'parms' => 1,
-                     'result' => 'r',
-                     'types' => 'r'
-                   },
-          'sqrt' => {
-                      'func' => 1,
-                      'opcode' => 13,
-                      'parms' => 1,
-                      'result' => 'r',
-                      'types' => 'r'
-                    },
-          'subtract' => {
-                          'func' => 0,
-                          'opcode' => 1,
-                          'parms' => 2,
-                          'result' => 'r',
-                          'types' => 'rr'
-                        },
-          'subtractp' => {
-                           'func' => 0,
-                           'opcode' => 9,
-                           'parms' => 2,
-                           'result' => 'p',
-                           'types' => 'pp'
-                         },
-          'uminus' => {
-                        'func' => 0,
-                        'opcode' => 6,
-                        'parms' => 1,
-                        'result' => 'r',
-                        'types' => 'r'
-                      },
-          'value' => {
-                       'func' => 1,
-                       'opcode' => 18,
-                       'parms' => 1,
-                       'result' => 'r',
-                       'types' => 'p'
-                     }
-        );
+%Attr =
+  (
+  'abs' =>
+    {
+    'func' => 1,
+    'opcode' => 38,
+    'parms' => 1,
+    'result' => 'r',
+    'types' => 'r',
+    },
+  'add' =>
+    {
+    'func' => 0,
+    'opcode' => 0,
+    'parms' => 2,
+    'result' => 'r',
+    'types' => 'rr',
+    },
+  'addp' =>
+    {
+    'func' => 0,
+    'opcode' => 8,
+    'parms' => 2,
+    'result' => 'p',
+    'types' => 'pp',
+    },
+  'alpha' =>
+    {
+    'func' => 1,
+    'opcode' => 48,
+    'parms' => 1,
+    'result' => 'r',
+    'types' => 'p',
+    },
+  'and' =>
+    {
+    'func' => 0,
+    'opcode' => 35,
+    'parms' => 2,
+    'result' => 'r',
+    'types' => 'rr',
+    },
+  'atan2' =>
+    {
+    'func' => 1,
+    'opcode' => 12,
+    'parms' => 2,
+    'result' => 'r',
+    'types' => 'rr',
+    },
+  'blue' =>
+    {
+    'func' => 1,
+    'opcode' => 24,
+    'parms' => 1,
+    'result' => 'r',
+    'types' => 'p',
+    },
+  'cos' =>
+    {
+    'func' => 1,
+    'opcode' => 11,
+    'parms' => 1,
+    'result' => 'r',
+    'types' => 'r',
+    },
+  'distance' =>
+    {
+    'func' => 1,
+    'opcode' => 14,
+    'parms' => 4,
+    'result' => 'r',
+    'types' => 'rrrr',
+    },
+  'div' =>
+    {
+    'func' => 0,
+    'opcode' => 3,
+    'parms' => 2,
+    'result' => 'r',
+    'types' => 'rr',
+    },
+  'eq' =>
+    {
+    'func' => 0,
+    'opcode' => 33,
+    'parms' => 2,
+    'result' => 'r',
+    'types' => 'rr',
+    },
+  'exp' =>
+    {
+    'func' => 1,
+    'opcode' => 50,
+    'parms' => 1,
+    'result' => 'r',
+    'types' => 'r',
+    },
+  'ge' =>
+    {
+    'func' => 0,
+    'opcode' => 31,
+    'parms' => 2,
+    'result' => 'r',
+    'types' => 'rr',
+    },
+  'getp1' =>
+    {
+    'func' => 1,
+    'opcode' => 15,
+    'parms' => 2,
+    'result' => 'p',
+    'types' => 'rr',
+    },
+  'getp2' =>
+    {
+    'func' => 1,
+    'opcode' => 16,
+    'parms' => 2,
+    'result' => 'p',
+    'types' => 'rr',
+    },
+  'getp3' =>
+    {
+    'func' => 1,
+    'opcode' => 17,
+    'parms' => 2,
+    'result' => 'p',
+    'types' => 'rr',
+    },
+  'green' =>
+    {
+    'func' => 1,
+    'opcode' => 23,
+    'parms' => 1,
+    'result' => 'r',
+    'types' => 'p',
+    },
+  'gt' =>
+    {
+    'func' => 0,
+    'opcode' => 32,
+    'parms' => 2,
+    'result' => 'r',
+    'types' => 'rr',
+    },
+  'hsv' =>
+    {
+    'func' => 1,
+    'opcode' => 21,
+    'parms' => 3,
+    'result' => 'p',
+    'types' => 'rrr',
+    },
+  'hsva' =>
+    {
+    'func' => 1,
+    'opcode' => 47,
+    'parms' => 4,
+    'result' => 'p',
+    'types' => 'rrrr',
+    },
+  'hue' =>
+    {
+    'func' => 1,
+    'opcode' => 19,
+    'parms' => 1,
+    'result' => 'r',
+    'types' => 'p',
+    },
+  'if' =>
+    {
+    'func' => 1,
+    'opcode' => 27,
+    'parms' => 3,
+    'result' => 'r',
+    'types' => 'rrr',
+    },
+  'ifp' =>
+    {
+    'func' => 1,
+    'opcode' => 28,
+    'parms' => 3,
+    'result' => 'p',
+    'types' => 'rpp',
+    },
+  'int' =>
+    {
+    'func' => 1,
+    'opcode' => 26,
+    'parms' => 1,
+    'result' => 'r',
+    'types' => 'r',
+    },
+  'jump' =>
+    {
+    'func' => 0,
+    'opcode' => 40,
+    'parms' => 0,
+    'result' => undef,
+    'types' => '',
+    },
+  'jumpnz' =>
+    {
+    'func' => 0,
+    'opcode' => 42,
+    'parms' => 1,
+    'result' => undef,
+    'types' => 'r',
+    },
+  'jumpz' =>
+    {
+    'func' => 0,
+    'opcode' => 41,
+    'parms' => 1,
+    'result' => undef,
+    'types' => 'r',
+    },
+  'le' =>
+    {
+    'func' => 0,
+    'opcode' => 29,
+    'parms' => 2,
+    'result' => 'r',
+    'types' => 'rr',
+    },
+  'log' =>
+    {
+    'func' => 1,
+    'opcode' => 49,
+    'parms' => 1,
+    'result' => 'r',
+    'types' => 'r',
+    },
+  'lt' =>
+    {
+    'func' => 0,
+    'opcode' => 30,
+    'parms' => 2,
+    'result' => 'r',
+    'types' => 'rr',
+    },
+  'mod' =>
+    {
+    'func' => 0,
+    'opcode' => 4,
+    'parms' => 2,
+    'result' => 'r',
+    'types' => 'rr',
+    },
+  'mult' =>
+    {
+    'func' => 0,
+    'opcode' => 2,
+    'parms' => 2,
+    'result' => 'r',
+    'types' => 'rr',
+    },
+  'multp' =>
+    {
+    'func' => 0,
+    'opcode' => 7,
+    'parms' => 2,
+    'result' => 'p',
+    'types' => 'pr',
+    },
+  'ne' =>
+    {
+    'func' => 0,
+    'opcode' => 34,
+    'parms' => 2,
+    'result' => 'r',
+    'types' => 'rr',
+    },
+  'not' =>
+    {
+    'func' => 0,
+    'opcode' => 37,
+    'parms' => 1,
+    'result' => 'r',
+    'types' => 'r',
+    },
+  'op_count' =>
+    {
+    'func' => 0,
+    'opcode' => 51,
+    'parms' => 0,
+    'result' => undef,
+    'types' => '',
+    },
+  'or' =>
+    {
+    'func' => 0,
+    'opcode' => 36,
+    'parms' => 2,
+    'result' => 'r',
+    'types' => 'rr',
+    },
+  'pow' =>
+    {
+    'func' => 0,
+    'opcode' => 5,
+    'parms' => 2,
+    'result' => 'r',
+    'types' => 'rr',
+    },
+  'print' =>
+    {
+    'func' => 0,
+    'opcode' => 45,
+    'parms' => 1,
+    'result' => undef,
+    'types' => 'r',
+    },
+  'red' =>
+    {
+    'func' => 1,
+    'opcode' => 22,
+    'parms' => 1,
+    'result' => 'r',
+    'types' => 'p',
+    },
+  'ret' =>
+    {
+    'func' => 0,
+    'opcode' => 39,
+    'parms' => 1,
+    'result' => undef,
+    'types' => 'p',
+    },
+  'rgb' =>
+    {
+    'func' => 1,
+    'opcode' => 25,
+    'parms' => 3,
+    'result' => 'p',
+    'types' => 'rrr',
+    },
+  'rgba' =>
+    {
+    'func' => 1,
+    'opcode' => 46,
+    'parms' => 4,
+    'result' => 'p',
+    'types' => 'rrrr',
+    },
+  'sat' =>
+    {
+    'func' => 1,
+    'opcode' => 20,
+    'parms' => 1,
+    'result' => 'r',
+    'types' => 'p',
+    },
+  'set' =>
+    {
+    'func' => 0,
+    'opcode' => 43,
+    'parms' => 1,
+    'result' => 'r',
+    'types' => 'r',
+    },
+  'setp' =>
+    {
+    'func' => 0,
+    'opcode' => 44,
+    'parms' => 1,
+    'result' => 'p',
+    'types' => 'p',
+    },
+  'sin' =>
+    {
+    'func' => 1,
+    'opcode' => 10,
+    'parms' => 1,
+    'result' => 'r',
+    'types' => 'r',
+    },
+  'sqrt' =>
+    {
+    'func' => 1,
+    'opcode' => 13,
+    'parms' => 1,
+    'result' => 'r',
+    'types' => 'r',
+    },
+  'subtract' =>
+    {
+    'func' => 0,
+    'opcode' => 1,
+    'parms' => 2,
+    'result' => 'r',
+    'types' => 'rr',
+    },
+  'subtractp' =>
+    {
+    'func' => 0,
+    'opcode' => 9,
+    'parms' => 2,
+    'result' => 'p',
+    'types' => 'pp',
+    },
+  'uminus' =>
+    {
+    'func' => 0,
+    'opcode' => 6,
+    'parms' => 1,
+    'result' => 'r',
+    'types' => 'r',
+    },
+  'value' =>
+    {
+    'func' => 1,
+    'opcode' => 18,
+    'parms' => 1,
+    'result' => 'r',
+    'types' => 'p',
+    },
+  );
 $MaxOperands = 4;
 $PackCode = "i";
 1;
index dad2085..fd4f32e 100644 (file)
@@ -44,9 +44,34 @@ while (<IN>) {
   }
 }
 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';