OpenGL-Modern

 view release on metacpan or  search on metacpan

utils/common.pl  view on Meta::CPAN

      $this{xs_rettype} = $name2parsed{$retval}[0];
      $this{aftercall} = "\n  RETVAL = $retval\[0];";
    } else {
      $this{xs_rettype} = delete $dynlang{RETTYPE} // $name2data{$retval}[1];
      $this{aftercall} = "\n  RETVAL = $retval;";
    }
    $this{retout} = "\nOUTPUT:\n  RETVAL";
    $this{retnames} = ["\$$retval"];
  } elsif (my $output = delete $dynlang{OUTPUT}) {
    $this{aftercall} = "\n  $output";
    $this{xs_code} = "PPCODE:\n";
  } elsif (grep $indynlang{$_} =~ /\bOUT(?:ARRAY|SCALAR)\b/, keys %indynlang) {
    my @retnames = map $indynlang{$_} =~ /\bOUTSCALAR\b/ ? ['$',$_] :
      $indynlang{$_} =~ /\bOUTARRAY\b/ ? ['\\@',$_] :
      (), grep $indynlang{$_}, map $_->[0], @argdata;
    $this{retnames} = [ $isvoid ? () : '$retval', map join('', @$_), @retnames ];
    $this{xs_code} = "PPCODE:\n";
    my $aftercall = "EXTEND(sp, ".(@{ $this{retnames} }).");";
    if (!$isvoid) {
      my $newval = $s->{restype} =~ /^\s*void\s*\*\s*$/ ? "newSViv(PTR2IV(RETVAL))" : "newSV".lc(substr typefunc($s->{restype}), 0, 2)."(RETVAL)";
      $aftercall .= "\n  mPUSHs($newval);";
    }
    for (@retnames) {
      my ($sigil, $arg) = @$_;
      delete $is_inarg{$arg};
      if ($sigil eq '\\@') {
        die "$name: no OUTARRAY len" unless my ($len) = $indynlang{$arg} =~ /\bOUTARRAY:([^\s,]+)/;



( run in 0.791 second using v1.01-cache-2.11-cpan-5511b514fd6 )