cvsuser     02/07/18 00:28:19

  Modified:    languages/perl6/P6C TestCompiler.pm
  Log:
  Better error diagnostics.
  
  Revision  Changes    Path
  1.3       +29 -7     parrot/languages/perl6/P6C/TestCompiler.pm
  
  Index: TestCompiler.pm
  ===================================================================
  RCS file: /cvs/public/parrot/languages/perl6/P6C/TestCompiler.pm,v
  retrieving revision 1.2
  retrieving revision 1.3
  diff -u -w -r1.2 -r1.3
  --- TestCompiler.pm   18 Jul 2002 02:44:31 -0000      1.2
  +++ TestCompiler.pm   18 Jul 2002 07:28:19 -0000      1.3
  @@ -2,6 +2,23 @@
   
   my $PARROT = '../..';
   my $PERL = $ENV{PERL} || 'perl';
  +my $ERR = 'a.err';
  +my $testno = 0;
  +my $code;
  +
  +sub dumperr {
  +    open IN, $ERR;
  +    print STDERR <IN>;
  +    close IN;
  +    open O, ">test-$testno.p6";
  +    print O $code;
  +    close O;
  +    for my $ext (qw(pasm pbc imc err)) {
  +     rename "a.$ext", "test-$testno.$ext";
  +    }
  +    print STDERR "See test-$testno.{p6,imc,pasm,pbc} for output,",
  +     "and test-$testno.err for errors\n";
  +}
   
   sub import {
       my $pkg = caller;
  @@ -24,21 +41,26 @@
   }
   
   sub output_is {
  -    my ($code, $out, $desc) = @_;
  +    $code = shift;
  +    ++$testno;
  +    my ($out, $desc) = @_;
       unless ($desc) {
        (undef, my $file, my $line) = caller;
        $desc = "($file line $line)";
       }
  -    open(O, "| perl prd-perl6.pl --batch --imc > a.imc 2>/dev/null") or die $!;
  +    open(O, "| perl prd-perl6.pl --batch --imc > a.imc 2>$ERR") or die $!;
       print O $code;
       unless (close O) {
  -     ok(0, "$desc: parse: $!");
  +     ok(0, "$desc: compile error: $!");
  +     dumperr;
  +     return;
  +    }
  +    unless(mysystem("$PARROT/languages/imcc/imcc a.imc a.pasm 2>$ERR", $desc)
  +        && mysystem("$PERL $PARROT/assemble.pl a.pasm > a.pbc 2>$ERR",$desc)
  +        && mysystem("$PARROT/parrot a.pbc > a.output 2>$ERR", $desc)) {
  +     dumperr;
        return;
       }
  -    (mysystem("$PARROT/languages/imcc/imcc a.imc a.pasm 2>/dev/null", $desc)
  -     && mysystem("$PERL $PARROT/assemble.pl a.pasm > a.pbc", $desc)
  -     && mysystem("$PARROT/parrot a.pbc > a.output", $desc))
  -     or return 0;
       open(I, 'a.output');
       my $result = join '', <I>;
       ok($out eq $result, $desc);
  
  
  


Reply via email to