Eshu
view release on metacpan or search on metacpan
t/22-xs-labels.t view on Meta::CPAN
RETVAL = 1;
OUTPUT:
RETVAL
END
my $expected = <<'END';
MODULE = Foo PACKAGE = Foo
int
get()
CODE:
RETVAL = 1;
OUTPUT:
RETVAL
END
my $got = Eshu->indent_xs($input);
is($got, $expected, 'OUTPUT label at depth 1');
}
# CLEANUP label
{
my $input = <<'END';
MODULE = Foo PACKAGE = Foo
SV *
fetch(key)
const char * key
PREINIT:
char *val;
CODE:
val = strdup(key);
RETVAL = newSVpv(val, 0);
OUTPUT:
RETVAL
CLEANUP:
free(val);
END
my $expected = <<'END';
MODULE = Foo PACKAGE = Foo
SV *
fetch(key)
const char * key
PREINIT:
char *val;
CODE:
val = strdup(key);
RETVAL = newSVpv(val, 0);
OUTPUT:
RETVAL
CLEANUP:
free(val);
END
my $got = Eshu->indent_xs($input);
is($got, $expected, 'CLEANUP label at depth 1');
}
# PPCODE label
{
my $input = <<'END';
MODULE = Foo PACKAGE = Foo
void
get_pair()
PPCODE:
XPUSHs(sv_2mortal(newSViv(1)));
XPUSHs(sv_2mortal(newSViv(2)));
XSRETURN(2);
END
my $expected = <<'END';
MODULE = Foo PACKAGE = Foo
void
get_pair()
PPCODE:
XPUSHs(sv_2mortal(newSViv(1)));
XPUSHs(sv_2mortal(newSViv(2)));
XSRETURN(2);
END
my $got = Eshu->indent_xs($input);
is($got, $expected, 'PPCODE label at depth 1');
}
# INIT label (inside XSUB, not the Perl INIT{} block)
{
my $input = <<'END';
MODULE = Foo PACKAGE = Foo
int
sum(a, b)
int a
int b
PREINIT:
int result;
INIT:
result = 0;
CODE:
result = a + b;
RETVAL = result;
OUTPUT:
RETVAL
END
my $expected = <<'END';
MODULE = Foo PACKAGE = Foo
int
sum(a, b)
int a
int b
PREINIT:
int result;
INIT:
result = 0;
CODE:
result = a + b;
RETVAL = result;
OUTPUT:
RETVAL
END
my $got = Eshu->indent_xs($input);
is($got, $expected, 'INIT label inside XSUB');
}
# INTERFACE_MACRO label
{
my $input = <<'END';
MODULE = Foo PACKAGE = Foo
int
call_fn(fn, x)
void (*fn)(int)
int x
CODE:
fn(x);
RETVAL = 0;
OUTPUT:
RETVAL
END
( run in 0.459 second using v1.01-cache-2.11-cpan-5511b514fd6 )