Mac-Carbon

 view release on metacpan or  search on metacpan

AppleEvents/AppleEvents.xs  view on Meta::CPAN

	if ( defined $Desc ) {
		# do something productive
	}

=cut
void
AEGetNthDesc(theAEDescList, index, desiredType=typeWildCard)
	AEDesc	&theAEDescList
	long		index
	OSType	desiredType
	PPCODE:
	{
		OSType 	kw;
		AEDesc	desc;
		
		AEFail(AEGetNthDesc(&theAEDescList, index, desiredType, &kw, &desc));
		XS_XPUSH(AEDesc, desc);
		if (GIMME == G_ARRAY && kw != typeWildCard) {
			XS_XPUSH(OSType, kw);
		}
	}

AppleEvents/AppleEvents.xs  view on Meta::CPAN

the specified class and event. 

	($proc, $refcon) = AEGetEventHandler("aevt", "oapp");

=cut
void
AEGetEventHandler(theAEEventClass, theAEEventID, isSysHandler=0)
	OSType	theAEEventClass
	OSType	theAEEventID
	Boolean	isSysHandler
	PPCODE:
	{
		SV * handler = sv_newmortal();
		SV * refCon  = sv_newmortal();
		
		AEFail(
			PAEGetEventHandler(
				theAEEventClass, theAEEventID, handler, refCon, isSysHandler));
		XPUSHs(handler);
		if (GIMME == G_ARRAY) {
			XPUSHs(refCon);

AppleEvents/AppleEvents.xs  view on Meta::CPAN

B<Mac OS only.>

Returns the item INDEX of the subdescriptor and its type if the subdescriptor
represented a record and not a list.

=cut
void
AEGetNthSubDesc(subdesc,index)
	AESubDesc	&subdesc
	long			index
	PPCODE:
	{
#ifndef MACOS_TRADITIONAL
	croak("Usage: Mac::AppleEvents::AEGetNthSubDesc unsupported in Carbon");
#else
		OSType		kw;
		AESubDesc	sub;
		
		AEFail(AEGetNthSubDesc(&subdesc, index, &kw, &sub));
		XS_XPUSH(AESubDesc, sub);
		if (GIMME == G_ARRAY && kw != typeWildCard) {

Components/Components.xs  view on Meta::CPAN

		GetComponentInfo($Component);

=cut
void
GetComponentInfo(aComponent)
	Component	aComponent
	PREINIT:
	ComponentDescription	desc;
	Handle					name;
	Handle					info;
	PPCODE:
	name = NewEmptyHandle();
	info = NewEmptyHandle();
	gMacPerl_OSErr = GetComponentInfo(aComponent, &desc, name, info, nil);
	HLock(name);
	HLock(info);
	if (!gMacPerl_OSErr) 
		if (GIMME != G_ARRAY) {
			if (*name == NULL) {
				XS_XPUSH(Str255, "");
			} else {

Files/Files.xs  view on Meta::CPAN


=item ResolveAlias ALIAS

Resolves an alias. In scalar context, returns the path to the resolved file.
In list context, also returns whether the alias was changed when resolving.

=cut
void
ResolveAlias(alias)
	Handle	alias
	PPCODE:
	{
		FSSpec	target;
		Boolean	changed;
		
		gMacPerl_OSErr = ResolveAlias(nil, (AliasHandle) alias, &target, &changed);
		
		if (gMacPerl_OSErr)  {
			XSRETURN_EMPTY;
		} 
		XS_XPUSH(FSSpec, target);

Files/Files.xs  view on Meta::CPAN


Resolves an alias relative to a file. In scalar context, returns the path to the 
resolved file. In list context, also returns whether the alias was changed when 
resolving.

=cut
void
ResolveAliasRelative(from, alias)
	FSSpec	&from
	Handle	alias
	PPCODE:
	{
		FSSpec	target;
		Boolean	changed;
		
		gMacPerl_OSErr = ResolveAlias(&from, (AliasHandle) alias, &target, &changed);
		
		if (gMacPerl_OSErr)  {
			XSRETURN_EMPTY;
		} 
		XS_XPUSH(FSSpec, target);

InternetConfig/InternetConfig.xs  view on Meta::CPAN


=cut

void
ICGetPref(inst, key)
	ICInstance	inst;
	Str255		key;
	PREINIT:
	ICAttr	attr;
	Handle	pref;
	PPCODE:
	pref = NewHandle(0);
	gMacPerl_OSErr = ICFindPrefHandle(inst, key, &attr, pref);
	if (!gMacPerl_OSErr) 
		if (GIMME != G_ARRAY) {
			XPUSHs(sv_2mortal(MakeHndSV(pref)));
		} else {
			XPUSHs(sv_2mortal(MakeHndSV(pref)));
			XPUSHs(sv_2mortal(newSViv(attr)));
		}
	DisposeHandle(pref);

InternetConfig/InternetConfig.xs  view on Meta::CPAN

ICParseURL(ic, hint, sv, start=-1, end=-1)
	ICInstance	ic;
	Str255			hint;
	SV *			sv;
	long			start;
	long			end;
	PREINIT:
	STRLEN	len;
	Ptr 	data;
	Handle	url;
	PPCODE:
	url = NewHandle(0);
	data = (Ptr) SvPV(sv, len);
	if (start == -1) {
		start = 0;
		end	  = len;
	} else if (end == -1) 
		end   = start;
	gMacPerl_OSErr = ICParseURL(ic, hint, data, len, &start, &end, url);
	if (!gMacPerl_OSErr) 
		if (GIMME != G_ARRAY) {

InternetConfig/InternetConfig.xs  view on Meta::CPAN

void
ICLaunchURL(ic, hint, sv, start=-1, end=-1)
	ICInstance		ic;
	Str255			hint;
	SV *			sv;
	long			start;
	long			end;
	PREINIT:
	STRLEN	len;
	Ptr 	data;
	PPCODE:
	data = (Ptr) SvPV(sv, len);
	if (start == -1) {
		start = 0;
		end	  = len;
	} else if (end == -1) 
		end   = start;
	gMacPerl_OSErr = ICLaunchURL(ic, hint, data, len, &start, &end);
	if (!gMacPerl_OSErr) 
		if (GIMME != G_ARRAY) {
			XPUSHs(sv_2mortal(newSViv(1)));

InternetConfig/InternetConfig.xs  view on Meta::CPAN


    $map = ICGetIndMapEntry $inst, $entries, 5;
    ($pos, $map) = ICGetIndMapEntry $inst, $entries, 5;

=cut
void
ICGetIndMapEntry(inst, entries, ndx)
	ICInstance 	inst
	Handle 		entries
	long 		ndx
	PPCODE:
	{
		long		pos;
		ICMapEntry	entry;
		
		if (gMacPerl_OSErr = ICGetIndMapEntry(inst, entries, ndx, &pos, &entry)) {
			XSRETURN_EMPTY;
		}
		XS_XPUSH(long, pos);
		XS_XPUSH(ICMapEntry, entry);
	}

MacPerl/MacPerl.xs  view on Meta::CPAN

	CODE:
	{
		int i;
		for (i=2; i<items; i++)
			fsetfileinfo((char *) SvPV_nolen(ST(i)), creator, type);
	}

void
MP_GetFileInfo(path)
	char *	path
	PPCODE:
	{
		OSType	creator;
		OSType	type;
		
		errno = 0;
		
		fgetfileinfo(path, &creator, &type);
			
		if (errno) {
			if (GIMME != G_ARRAY)

MacPerl/MacPerl.xs  view on Meta::CPAN

		if (choose(domain, type, prompt, constraint, flags, gMacPerlScratch, &len) < 0 || !len)
			ST(0) = &PL_sv_undef;
		else
			ST(0) = sv_2mortal(newSVpv(gMacPerlScratch, len));
	}
#endif

void
MP_Pick(prompt, ...)
	char *	prompt
	PPCODE:
#ifndef MACOS_TRADITIONAL
	croak("Usage: MacPerl::Pick unsupported in Carbon");
#else
	{	
		short			itemHit;
		STRLEN		len;
		Boolean		done;
		DialogPtr	dlg;
		Cell			mycell;
		short			mytype;

MacPerl/MacPerl.xs  view on Meta::CPAN

			gMacPerl_ErrorFormat = SvIV(ST(0));
		RETVAL = gMacPerl_ErrorFormat;
#endif
	OUTPUT:
	RETVAL

void
MP_FAccess(file, cmd, ...)
	char *	file
	unsigned	cmd
	PPCODE:
	{
#ifndef MACOS_TRADITIONAL
	croak("Usage: MacPerl::FAccess unsupported in Carbon");
#else
		unsigned				uarg;
		Rect					rarg;
		SelectionRecord	sarg;
		char * 				name;
		
		switch (cmd) {

MacPerl/MacPerl.xs  view on Meta::CPAN

		FSSpec	spec;
		
		if (GUSIPath2FSp(path, &spec))
	 		ST(0) = &PL_sv_undef;
		else
			ST(0) = sv_2mortal(MP_GUSIFSp2FullPath(&spec, newSVpvn("", 0)));
	}

void
MP_Volumes()
	PPCODE:
	{
		FSSpec spec;
		
		if (GIMME != G_ARRAY) {
			GUSISpecial2FSp('macs', kOnSystemDisk, &spec);
			GetVolInfo(spec.vRefNum, false, &spec);
			
			XPUSHs(sv_2mortal(MP_GUSIFSp2Encoding(&spec, newSVpvn("", 0))));
		} else {
			short	index;

Memory/Memory.xs  view on Meta::CPAN


    ($SIZE, $GROW) = &MaxMem;

MaxMemSys does the purge and compact of the system heap zone, and the $GROW value
is set to zero.


=cut
void
MaxMem()
	PPCODE:
	{
		long	grow;
		
		XS_PUSH(long, MaxMem(&grow));
		if (GIMME == G_ARRAY) {
			XS_PUSH(long, grow);
		}
	}

void
MaxMemSys()
	PPCODE:
	{
#ifndef MACOS_TRADITIONAL
	croak("Usage: Mac::Memory::MaxMemSys unsupported in Carbon");
#else
		long	grow;
		
		XS_PUSH(long, MaxMemSys(&grow));
		if (GIMME == G_ARRAY) {
			XS_PUSH(long, grow);
		}

Memory/Memory.xs  view on Meta::CPAN


Determine the total amount of free memory and the size of the largest allocatable
block after a purge of the heap.

    ($Total, $Contiguous) = &PurgeSpace;


=cut
void
PurgeSpace()
	PPCODE:
	{
		long	total;
		long	contig;
	
		PurgeSpace(&total, &contig);
		EXTEND(sp, 2);
		PUSHs(sv_2mortal(newSViv(total)));
		PUSHs(sv_2mortal(newSViv(contig)));
	}	

OSA/OSA.xs  view on Meta::CPAN

function returns the equivalent component-specific script ID and the component
instance that created that script ID as an array.

=cut
void
OSAGenericToRealID(genericScriptingComponent, genericScriptID)
	ComponentInstance genericScriptingComponent
	OSAID					genericScriptID
	PREINIT:
	ComponentInstance	exactScriptingComponent;
	PPCODE:
	if (gMacPerl_OSErr = (short) OSAGenericToRealID(genericScriptingComponent, &genericScriptID, &exactScriptingComponent)) {
		XSRETURN_EMPTY;
	}
	XS_XPUSH(OSAID, genericScriptID);
	XS_XPUSH(ComponentInstance, exactScriptingComponent);

	
=item OSARealToGenericID GENERICSCRIPTINGCOMPONENT, THESCRIPTID, THEEXACTCOMPONENT

The OSARealToGenericID function performs the reverse of the task performed by

Resources/Resources.xs  view on Meta::CPAN


    ($id, $type, $name) = GetResInfo($HANDLE);
    if ( defined $id ) {
        # proceed
    }

=cut
void
GetResInfo(theResource)
	Handle	theResource
	PPCODE:
	{
		short		theID;
		OSType	theType;
		Str255	name;
		
		GetResInfo(theResource, &theID, &theType, name);
		ResErrorCheck;

		EXTEND(sp, 3);
		XS_PUSH(short, theID);

Sound/Sound.xs  view on Meta::CPAN

MACEVersion()

#endif

void
Comp3to1(inBuffer, inState=NO_INIT, numChannels=1, whichChannel=1)
	SV *			inBuffer
	StateBlock		inState
	unsigned long	numChannels
	unsigned long	whichChannel
	PPCODE:
	{
#ifndef MACOS_TRADITIONAL
	croak("Usage: Mac::Sound::Comp3to1 unsupported in Carbon");
#else
		unsigned long 	cnt = SvCUR(inBuffer);
		SV *			outBuffer = newSVpv("", cnt / 3);
		StateBlock		outState;
		Comp3to1(
			SvPV_nolen(inBuffer), SvPV_nolen(outBuffer), cnt, 
			(items > 1) ? &inState : nil, &outState, numChannels, whichChannel);

Sound/Sound.xs  view on Meta::CPAN

		}
#endif
	}

void
Exp1to3(inBuffer, inState=NO_INIT, numChannels=1, whichChannel=1)
	SV *			inBuffer
	StateBlock		inState
	unsigned long	numChannels
	unsigned long	whichChannel
	PPCODE:
	{
#ifndef MACOS_TRADITIONAL
	croak("Usage: Mac::Sound::Exp1to3 unsupported in Carbon");
#else
		unsigned long 	cnt = SvCUR(inBuffer) / 2;
		SV *			outBuffer = newSVpv("", cnt*6);
		StateBlock		outState;
		Exp1to3(
			SvPV_nolen(inBuffer), SvPV_nolen(outBuffer), cnt, 
			(items > 1) ? &inState : nil, &outState, numChannels, whichChannel);

Sound/Sound.xs  view on Meta::CPAN

		}
#endif
	}

void
Comp6to1(inBuffer, inState=NO_INIT, numChannels=1, whichChannel=1)
	SV *			inBuffer
	StateBlock		inState
	unsigned long	numChannels
	unsigned long	whichChannel
	PPCODE:
	{
#ifndef MACOS_TRADITIONAL
	croak("Usage: Mac::Sound::Comp6to1 unsupported in Carbon");
#else
		unsigned long 	cnt = SvCUR(inBuffer);
		SV *			outBuffer = newSVpv("", cnt / 6);
		StateBlock		outState;
		Comp6to1(
			SvPV_nolen(inBuffer), SvPV_nolen(outBuffer), cnt, 
			(items > 1) ? &inState : nil, &outState, numChannels, whichChannel);

Sound/Sound.xs  view on Meta::CPAN

		}
#endif
	}

void
Exp1to6(inBuffer, inState=NO_INIT, numChannels=1, whichChannel=1)
	SV *			inBuffer
	StateBlock		inState
	unsigned long	numChannels
	unsigned long	whichChannel
	PPCODE:
	{
#ifndef MACOS_TRADITIONAL
	croak("Usage: Mac::Sound::Exp1to6 unsupported in Carbon");
#else
		unsigned long 	cnt = SvCUR(inBuffer);
		SV *			outBuffer = newSVpv("", cnt * 6);
		StateBlock		outState;
		Exp1to6(
			SvPV_nolen(inBuffer), SvPV_nolen(outBuffer), cnt, 
			(items > 1) ? &inState : nil, &outState, numChannels, whichChannel);

Sound/Sound.xs  view on Meta::CPAN

	short	deviceRefNum
	Str255	deviceName

MacOSRet
SPBSignOutDevice(deviceRefNum)
	short	deviceRefNum

void
SPBGetIndexedDevice(count)
	short	count
	PPCODE:
	{
		Str255	name;
		Handle 	icon;
		
		if (gMacPerl_OSErr = SPBGetIndexedDevice(count, name, &icon)) {
			XSRETURN_UNDEF;
		}
		XS_PUSH(Str255, name);
		if (GIMME == G_ARRAY) {
			XS_XPUSH(Handle, icon);

Sound/Sound.xs  view on Meta::CPAN

SPBResumeRecording(inRefNum)
	long	inRefNum

MacOSRet
SPBStopRecording(inRefNum)
	long	inRefNum

void
SPBGetRecordingStatus(inRefNum)
	long	inRefNum
	PPCODE:
	{
		short recordingStatus;
		short meterLevel;
		unsigned long totalSamplesToRecord;
		unsigned long numberOfSamplesRecorded;
		unsigned long totalMsecsToRecord;
		unsigned long numberOfMsecsRecorded;
		
		if (gMacPerl_OSErr = 
			SPBGetRecordingStatus(

xsubpps/xsubpp-5.6.1  view on Meta::CPAN

	     ( (??{ $size }) )?			# Possible sizeof set-from
	     \) \s* ; \s* $
	  ]x);
    $targetable{$key} = [$t, $with_size, $arg, $sarg] if $t;
}

$END = "!End!\n\n";		# "impossible" keyword (multiple newline)

# Match an XS keyword
$BLOCK_re= '\s*(' . join('|', qw(
	REQUIRE BOOT CASE PREINIT INPUT INIT CODE PPCODE OUTPUT 
	CLEANUP ALIAS ATTRS PROTOTYPES PROTOTYPE VERSIONCHECK INCLUDE
	SCOPE INTERFACE INTERFACE_MACRO C_ARGS POSTCALL
	)) . "|$END)\\s*:";

# Input:  ($_, @line) == unparsed input.
# Output: ($_, @line) == (rest of line, following lines).
# Return: the matched keyword if found, otherwise 0
sub check_keyword {
	$_ = shift(@line) while !/\S/ && @line;
	s/^(\s*)($_[0])\s*:\s*(?:#.*)?/$1/s && $2;

xsubpps/xsubpp-5.6.1  view on Meta::CPAN

    $report_args =~ s/^,\s+//;
    my @func_args = @args;
    shift @func_args if defined($class);

    for (@func_args) {
	s/^/&/ if $in_out{$_};
    }
    $func_args = join(", ", @func_args);
    @args_match{@args} = @args_num;

    $PPCODE = grep(/^\s*PPCODE\s*:/, @line);
    $CODE = grep(/^\s*CODE\s*:/, @line);
    # Detect CODE: blocks which use ST(n)= or XST_m*(n,v)
    #   to set explicit return values.
    $EXPLICIT_RETURN = ($CODE &&
		("@line" =~ /(\bST\s*\([^;]*=) | (\bXST_m\w+\s*\()/x ));
    $ALIAS  = grep(/^\s*ALIAS\s*:/,  @line);
    $INTERFACE  = grep(/^\s*INTERFACE\s*:/,  @line);

    $xsreturn = 1 if $EXPLICIT_RETURN;

xsubpps/xsubpp-5.6.1  view on Meta::CPAN

      { print Q<<"EOF" if $cond }
#    if ($cond)
#       Perl_croak(aTHX_ "Usage: %s($report_args)", GvNAME(CvGV(cv)));
EOF
    else 
      { print Q<<"EOF" if $cond }
#    if ($cond)
#	Perl_croak(aTHX_ "Usage: $pname($report_args)");
EOF

    print Q<<"EOF" if $PPCODE;
#    SP -= items;
EOF

    # Now do a block of some sort.

    $condnum = 0;
    $cond = '';			# last CASE: condidional
    push(@line, "$END:");
    push(@line_no, $line_no[-1]);
    $_ = '';

xsubpps/xsubpp-5.6.1  view on Meta::CPAN

		if (@arg_with_types) {
		    unshift @line, @arg_with_types, $_;
		    $_ = "";
		    $processing_arg_with_types = 1;
		    INPUT_handler() ;
		}
		XS_process($deferred);

        process_keyword("INIT|ALIAS|ATTRS|PROTOTYPE|INTERFACE_MACRO|INTERFACE|C_ARGS") ;

		if (check_keyword("PPCODE")) {
			print_section();
			death ("PPCODE must be last thing") if @line;
			print "\tLEAVE;\n" if $ScopeThisXSUB;
			print "\tPUTBACK;\n\treturn;\n";
		} elsif (check_keyword("CODE")) {
			print_section() ;
		} elsif (defined($class) and $func_name eq "DESTROY") {
			print "\n\t";
			print "delete THIS;\n";
		} else {
			print "\n\t";
			if ($ret_type ne "void") {

xsubpps/xsubpp-5.6.1  view on Meta::CPAN

	print "\tEXTEND(SP,$c);\n" if $c;
	$xsreturn += $c;
	generate_output($var_types{$_}, $num++, $_, 0, 1) for @outlist;

	# do cleanup
	process_keyword("CLEANUP|ALIAS|ATTRS|PROTOTYPE") ;

	print Q<<"EOF" if $ScopeThisXSUB;
#   ]]
EOF
	print Q<<"EOF" if $ScopeThisXSUB and not $PPCODE;
#   LEAVE;
EOF

	# print function trailer
	print Q<<EOF;
#    ]]
EOF
	print Q<<EOF if $except;
#    BEGHANDLERS
#    CATCHALL

xsubpps/xsubpp-5.6.1  view on Meta::CPAN

	last if $_ eq "$END:";
	death(/^$BLOCK_re/o ? "Misplaced `$1:'" : "Junk at end of function");
    }

    print Q<<EOF if $except;
#    if (errbuf[0])
#	Perl_croak(aTHX_ errbuf);
EOF

    if ($xsreturn) {
        print Q<<EOF unless $PPCODE;
#    XSRETURN($xsreturn);
EOF
    } else {
        print Q<<EOF unless $PPCODE;
#    XSRETURN_EMPTY;
EOF
    }

    print Q<<EOF;
#]]
#
EOF

    my $newXS = "newXS" ;

xsubpps/xsubpp-5.8.0  view on Meta::CPAN

	     ( (??{ $size }) )?			# Possible sizeof set-from
	     \) \s* ; \s* $
	  ]x);
    $targetable{$key} = [$t, $with_size, $arg, $sarg] if $t;
}

$END = "!End!\n\n";		# "impossible" keyword (multiple newline)

# Match an XS keyword
$BLOCK_re= '\s*(' . join('|', qw(
	REQUIRE BOOT CASE PREINIT INPUT INIT CODE PPCODE OUTPUT
	CLEANUP ALIAS ATTRS PROTOTYPES PROTOTYPE VERSIONCHECK INCLUDE
	SCOPE INTERFACE INTERFACE_MACRO C_ARGS POSTCALL OVERLOAD
	)) . "|$END)\\s*:";

# Input:  ($_, @line) == unparsed input.
# Output: ($_, @line) == (rest of line, following lines).
# Return: the matched keyword if found, otherwise 0
sub check_keyword {
	$_ = shift(@line) while !/\S/ && @line;
	s/^(\s*)($_[0])\s*:\s*(?:#.*)?/$1/s && $2;

xsubpps/xsubpp-5.8.0  view on Meta::CPAN

    $report_args =~ s/^,\s+//;
    my @func_args = @args;
    shift @func_args if defined($class);

    for (@func_args) {
	s/^/&/ if $in_out{$_};
    }
    $func_args = join(", ", @func_args);
    @args_match{@args} = @args_num;

    $PPCODE = grep(/^\s*PPCODE\s*:/, @line);
    $CODE = grep(/^\s*CODE\s*:/, @line);
    # Detect CODE: blocks which use ST(n)= or XST_m*(n,v)
    #   to set explicit return values.
    $EXPLICIT_RETURN = ($CODE &&
		("@line" =~ /(\bST\s*\([^;]*=) | (\bXST_m\w+\s*\()/x ));
    $ALIAS  = grep(/^\s*ALIAS\s*:/,  @line);
    $INTERFACE  = grep(/^\s*INTERFACE\s*:/,  @line);

    $xsreturn = 1 if $EXPLICIT_RETURN;

xsubpps/xsubpp-5.8.0  view on Meta::CPAN

      { print Q<<"EOF" if $cond }
#    if ($cond)
#       Perl_croak(aTHX_ "Usage: %s($report_args)", GvNAME(CvGV(cv)));
EOF
    else
      { print Q<<"EOF" if $cond }
#    if ($cond)
#	Perl_croak(aTHX_ "Usage: $pname($report_args)");
EOF

    #gcc -Wall: if an xsub has no arguments and PPCODE is used
    #it is likely none of ST, XSRETURN or XSprePUSH macros are used
    #hence `ax' (setup by dXSARGS) is unused
    #XXX: could breakup the dXSARGS; into dSP;dMARK;dITEMS
    #but such a move could break third-party extensions
    print Q<<"EOF" if $PPCODE and $num_args == 0;
#   PERL_UNUSED_VAR(ax); /* -Wall */
EOF

    print Q<<"EOF" if $PPCODE;
#    SP -= items;
EOF

    # Now do a block of some sort.

    $condnum = 0;
    $cond = '';			# last CASE: condidional
    push(@line, "$END:");
    push(@line_no, $line_no[-1]);
    $_ = '';

xsubpps/xsubpp-5.8.0  view on Meta::CPAN

		if (@fake_INPUT or @fake_INPUT_pre) {
		    unshift @line, @fake_INPUT_pre, @fake_INPUT, $_;
		    $_ = "";
		    $processing_arg_with_types = 1;
		    INPUT_handler() ;
		}
		XS_process($deferred);

        process_keyword("INIT|ALIAS|ATTRS|PROTOTYPE|INTERFACE_MACRO|INTERFACE|C_ARGS|OVERLOAD") ;

		if (check_keyword("PPCODE")) {
			print_section();
			death ("PPCODE must be last thing") if @line;
			print "\tLEAVE;\n" if $ScopeThisXSUB;
			print "\tPUTBACK;\n\treturn;\n";
		} elsif (check_keyword("CODE")) {
			print_section() ;
		} elsif (defined($class) and $func_name eq "DESTROY") {
			print "\n\t";
			print "delete THIS;\n";
		} else {
			print "\n\t";
			if ($ret_type ne "void") {

xsubpps/xsubpp-5.8.0  view on Meta::CPAN

	print "\tEXTEND(SP,$c);\n" if $c;
	$xsreturn += $c;
	generate_output($var_types{$_}, $num++, $_, 0, 1) for @outlist;

	# do cleanup
	process_keyword("CLEANUP|ALIAS|ATTRS|PROTOTYPE|OVERLOAD") ;

	print Q<<"EOF" if $ScopeThisXSUB;
#   ]]
EOF
	print Q<<"EOF" if $ScopeThisXSUB and not $PPCODE;
#   LEAVE;
EOF

	# print function trailer
	print Q<<EOF;
#    ]]
EOF
	print Q<<EOF if $except;
#    BEGHANDLERS
#    CATCHALL

xsubpps/xsubpp-5.8.0  view on Meta::CPAN

	last if $_ eq "$END:";
	death(/^$BLOCK_re/o ? "Misplaced `$1:'" : "Junk at end of function");
    }

    print Q<<EOF if $except;
#    if (errbuf[0])
#	Perl_croak(aTHX_ errbuf);
EOF

    if ($xsreturn) {
        print Q<<EOF unless $PPCODE;
#    XSRETURN($xsreturn);
EOF
    } else {
        print Q<<EOF unless $PPCODE;
#    XSRETURN_EMPTY;
EOF
    }

    print Q<<EOF;
#]]
#
EOF

    my $newXS = "newXS" ;



( run in 0.909 second using v1.01-cache-2.11-cpan-71847e10f99 )