# New Ticket Created by Mike Lambert # Please include the string: [perl #16741] # in the subject line of all future correspondence about this issue. # <URL: http://rt.perl.org/rt2/Ticket/Display.html?id=16741 >
The below patch fixes the languages/parrot_compiler/ code to work again with the new keyed syntax. It correctly compiles languages/parrot_compiler/sample.pasm and parrot executes it fine. The only change I'm unsure about it is the use of -e"" instead of -e'' to make activestate perl happy. ie, I'm not sure if it breaks other platforms. Thanks, Mike Lambert -- attachment 1 ------------------------------------------------------ url: http://rt.perl.org/rt2/attach/35605/28863/5e145e/fixup.diff
? pc.pasm ? pc.pbc ? sample.pbc ? fixup.diff Index: Makefile =================================================================== RCS file: /cvs/public/parrot/languages/parrot_compiler/Makefile,v retrieving revision 1.2 diff -u -r1.2 Makefile --- Makefile 16 May 2002 18:36:11 -0000 1.2 +++ Makefile 25 Aug 2002 07:02:08 -0000 @@ -1,7 +1,7 @@ PERL=perl all : - $(PERL) "-MFile::Copy=cp" -e 'cp q|parrot.pasm|, q|pc.pasm|' + $(PERL) "-MFile::Copy=cp" -e "cp q|parrot.pasm|, q|pc.pasm|" $(PERL) gentable.pl pc.pasm $(PERL) ../../assemble.pl pc.pasm > pc.pbc Index: gentable.pl =================================================================== RCS file: /cvs/public/parrot/languages/parrot_compiler/gentable.pl,v retrieving revision 1.3 diff -u -r1.3 gentable.pl --- gentable.pl 3 Jun 2002 20:25:07 -0000 1.3 +++ gentable.pl 25 Aug 2002 07:02:08 -0000 @@ -18,6 +18,7 @@ 's' => "REG", 'sc' => "STR", 'n' => "REG", 'nc' => "NUM", 'k' => "REG", 'kc' => "REG", + 'ki'=> "REG", 'kic'=> "REG", 'p' => "REG"); open FILE,">>",$ARGV[0]; @@ -27,9 +28,9 @@ $fix = undef; $size = scalar($op->size) - 1; print FILE uc($op->full_name) . ":\n"; - $load .= " set P2,\"" . $op->full_name . '",' . $opnum . "\n"; + $load .= " set P2[\"" . $op->full_name . '"],' . $opnum . "\n"; $load .= " set_addr I1," . uc($op->full_name) . "\n"; - $load .= " set P7," . $opnum++ . ",I1\n"; + $load .= " set P7[" . $opnum++ . "],I1\n"; if (($op->jump) && ($op->arg_type($size) eq 'ic')) { $size--; $fix = " bsr HANDLE_ARG_LABEL\n"; Index: parrot.pasm =================================================================== RCS file: /cvs/public/parrot/languages/parrot_compiler/parrot.pasm,v retrieving revision 1.3 diff -u -r1.3 parrot.pasm --- parrot.pasm 3 Jun 2002 20:25:07 -0000 1.3 +++ parrot.pasm 25 Aug 2002 07:02:09 -0000 @@ -43,18 +43,18 @@ new P6,.PerlHash new P7,.PerlArray new P31,.PerlHash - set P31,"a",0x7 - set P31,"n",0xa - set P31,"r",0xd - set P31,"t",0x9 - set P31,"\\",0x5c + set P31["a"],0x7 + set P31["n"],0xa + set P31["r"],0xd + set P31["t"],0x9 + set P31["\\"],0x5c bsr LOAD # Get the name of the input file - set S15,P0,1 + set S15,P0[1] open I20,S15 # Get the name of the output file - set S15,P0,2 + set S15,P0[2] open P1,S15,">" bsr READ end @@ -79,7 +79,7 @@ substr S1, S0, 0, I0 # set the label position length I30,S28 - set P6,S1,I30 + set P6[S1],I30 HANDLE_OPCODE: inc I0 @@ -88,12 +88,12 @@ substr S1, S0, I0, I1 add I0, I0, I1 inc I0 - set I3,P2,S1 + set I3,P2[S1] # pack the opcode number pack S28,I24,I3 set I22,4 # handle opcode arguments - set I3,P7,I3 + set I3,P7[I3] jsr I3 HANDLE_ARG_LABEL: @@ -106,13 +106,13 @@ # update the label count inc I31 # save the label - set P3,I31,S2 + set P3[I31],S2 length I30,S28 - dec I30,I22 + sub I30,I22 # save the address of the opcode - set P4,I31,I30 + set P4[I31],I30 # save the address of label - set P5,I31,I22 + set P5[I31],I22 # add a noop pack S28,I24,0 ret @@ -125,7 +125,7 @@ inc I0 set I4, S2 pack S28,I24,I4 - inc I22,I24 + add I22,I24 ret HANDLE_ARG_NUM: @@ -142,7 +142,7 @@ # size pack S30,I24,I23 pack S30,I23,N5 - inc I22,I24 + add I22,I24 ret HANDLE_ARG_STR: @@ -176,7 +176,7 @@ pack S30,I24,I5 # string pack S30,I8,S2 - inc I22,I24 + add I22,I24 ret ESCAPE: @@ -198,7 +198,7 @@ ESCAPE_IT: substr S12,S2,I7,1 - set I6, P31, S12 + set I6, P31[S12] pack S2,1,I6,I4 inc I4 substr S12,S2,0,I4 @@ -216,21 +216,21 @@ FIXUP: # get the last label found - set S11,P3,I31 + set S11,P3[I31] # if the length is 0 return length I15,S11 eq 0,I15,ENDFIXUP # get the address of the opcode to apply the fixup - set I15,P4,I31 + set I15,P4[I31] # get the address within the opcode to apply the fixup - set I16,P5,I31 + set I16,P5[I31] # get the position marked by the label - set I17,P6,S11 + set I17,P6[S11] # calculate the offset sub I18,I17,I15 div I18,I18,I24 # calculate the address to apply the fixup - inc I15,I16 + add I15,I16 pack S28,4,I18,I15 dec I31 if I31,FIXUP