anchor.diff:  
     Parrot_ext_call(interp, code, 'SS->P', create_string(hll), create_string(hllcode), @result);
   
  -  //writeln('h');
  -
   end;
   
   function TDrvParrot.genTree(inNode: PParseNode): Parrot_PMC;
  
positive.code: begin
    r := new_pmc('Hash');
  
    //writeln('-');
    // exec
    //writeln(assigned(r));
    writeln('Before Parrot_PMC_set_pmc_keyed_str');
    Parrot_PMC_set_pmc_keyed_str(interp, r, create_string('exec'), genParrot(join(inNode.point.macros)) );
    writeln('After Parrot_PMC_set_pmc_keyed_str');
  
    // data
    data := new_pmc('ResizablePMCArray');
    writeln('5');
    if length(inNode.data) > 0 then
      for i := 0 to length(inNode.data)-1 do
      begin
        writeln(i);
        Parrot_PMC_push_string(interp, data, create_string(inNode.data[i]));
      end;
    writeln('6');
    Parrot_PMC_set_pmc_keyed_str(interp, r, create_string('data'), data );
    writeln('6');
  
    // children
  
    result := r;
  end;
  
  procedure TDrvParrot.execute(inNode: PParseNode);
  var 
    hllcode: Parrot_PMC;
    pmc_result, pmc_tree: Parrot_PMC;
    s: string;
    oldExcpetionMask: TFPUExceptionMask;
  begin
  
    //writeln('1');
    oldExcpetionMask := SetExceptionMask([exInvalidOp, exDenormalized, exZeroDivide, exOverflow, exUnderflow, exPrecision]);
  
    //writeln('5');
    //writeln(assigned(hllcode));
    pmc_tree := genTree(inNode);
    hllcode := Parrot_PMC_get_pmc_keyed_str(interp, pmc_tree, create_string('exec'));
    
    writeln('7');
    Parrot_ext_call(interp, hllcode, 'P->P', pmc_tree, @pmc_result);
    writeln('8');
    PCT(pmc_result);
    writeln('7');
    SetExceptionMask(oldExcpetionMask);
  
  end;
  
  procedure TDrvParrot.write(outStream: TFileStream);
  var
    pbc: String;
  begin
    pbc := Parrot_str_to_cstring(interp, out_pbc);
    //outStream.write(pbc, length(pbc))
  end;
  
  procedure TDrvParrot.PCT(inPast: Parrot_PMC);
  
negative.code: 
  uses Math, Sysutils;
  
  constructor TDrvParrot.create;
  begin
    //FoutCode := TStringList.Create;
    //FoutData := TStringList.Create;
  
    setlength(cache, 0);
    
    Parrot_srand(0);
    interp := Parrot_new(nil);
    out_pbc := create_string('');
  
  end;
  
  procedure TDrvParrot.execute(inNode: PParseNode);
  var 
    hllcode: Parrot_PMC;
    pmc_result, pmc_tree: Parrot_PMC;
    s: string;
    oldExcpetionMask: TFPUExceptionMask;
  begin
  
    oldExcpetionMask := SetExceptionMask([exInvalidOp, exDenormalized, exZeroDivide, exOverflow, exUnderflow, exPrecision]);
  
    pmc_tree := genTree(inNode);
    hllcode := Parrot_PMC_get_pmc_keyed_str(interp, pmc_tree, create_string('exec'));
    
    Parrot_ext_call(interp, hllcode, 'P->P', pmc_tree, @pmc_result);
    PCT(pmc_result);
    SetExceptionMask(oldExcpetionMask);
  
  end;
  
  procedure TDrvParrot.write(outStream: TFileStream);
  var
    pbc: String;
  begin
    pbc := Parrot_str_to_cstring(interp, out_pbc);
    outStream.write(pbc, length(pbc))
  end;
  
  function TDrvparrot.create_string(s: string): Parrot_String;
  begin
    result := Parrot_new_string(interp, PChar(s), length(s), nil, 0);
  end;
  
  function TDrvparrot.new_pmc(s: string): Parrot_PMC;
  