mirror of
https://github.com/samba-team/samba.git
synced 2025-01-25 06:04:04 +03:00
r8621: Simplify code. Add support for nested structures back into the header generator.
This commit is contained in:
parent
8637a85e6a
commit
5610838385
@ -7,8 +7,8 @@
|
||||
package Parse::Pidl::Samba::NDR::Header;
|
||||
|
||||
use strict;
|
||||
use Parse::Pidl::Typelist;
|
||||
use Parse::Pidl::Util qw(has_property);
|
||||
use Parse::Pidl::Typelist qw(mapType);
|
||||
use Parse::Pidl::Util qw(has_property is_constant);
|
||||
use Parse::Pidl::NDR qw(GetNextLevel GetPrevLevel);
|
||||
use Parse::Pidl::Samba::NDR::Parser;
|
||||
|
||||
@ -22,9 +22,9 @@ sub pidl ($)
|
||||
|
||||
sub tabs()
|
||||
{
|
||||
for (my($i)=0; $i < $tab_depth; $i++) {
|
||||
pidl "\t";
|
||||
}
|
||||
my $res = "";
|
||||
$res .="\t" foreach (1..$tab_depth);
|
||||
return $res;
|
||||
}
|
||||
|
||||
#####################################################################
|
||||
@ -57,32 +57,20 @@ sub HeaderElement($)
|
||||
pidl tabs();
|
||||
HeaderType($element, $element->{TYPE}, "");
|
||||
pidl " ";
|
||||
my $prefix = "";
|
||||
my $postfix = "";
|
||||
foreach my $l (@{$element->{LEVELS}})
|
||||
my $numstar = $element->{POINTERS};
|
||||
foreach (@{$element->{ARRAY_LEN}})
|
||||
{
|
||||
if (($l->{TYPE} eq "POINTER")) {
|
||||
my $nl = GetNextLevel($element, $l);
|
||||
$nl = GetNextLevel($element, $nl) if ($nl->{TYPE} eq "SUBCONTEXT");
|
||||
next if ($nl->{TYPE} eq "DATA" and Parse::Pidl::Typelist::scalar_is_reference($nl->{DATA_TYPE}));
|
||||
$prefix .= "*";
|
||||
} elsif ($l->{TYPE} eq "ARRAY") {
|
||||
my $pl = GetPrevLevel($element, $l);
|
||||
next if ($pl and $pl->{TYPE} eq "POINTER");
|
||||
|
||||
if ($l->{IS_FIXED}) {
|
||||
$postfix .= "[$l->{SIZE_IS}]";
|
||||
} else {
|
||||
$prefix .= "*";
|
||||
}
|
||||
} elsif ($l->{TYPE} eq "DATA") {
|
||||
pidl "$prefix$element->{NAME}$postfix";
|
||||
}
|
||||
next if is_constant($_);
|
||||
$numstar++;
|
||||
}
|
||||
$numstar-- if ($element->{TYPE} eq "string");
|
||||
pidl "*" foreach (1..$numstar);
|
||||
pidl $element->{NAME};
|
||||
foreach (@{$element->{ARRAY_LEN}}) {
|
||||
next unless is_constant($_);
|
||||
pidl "[$_]";
|
||||
}
|
||||
|
||||
if (defined $element->{ARRAY_LEN}[0] && Parse::Pidl::Util::is_constant($element->{ARRAY_LEN}[0])) {
|
||||
pidl "[$element->{ARRAY_LEN}[0]]";
|
||||
}
|
||||
pidl ";";
|
||||
if (defined $element->{PROPERTIES}) {
|
||||
HeaderProperties($element->{PROPERTIES}, ["in", "out"]);
|
||||
@ -95,7 +83,7 @@ sub HeaderElement($)
|
||||
sub HeaderStruct($$)
|
||||
{
|
||||
my($struct,$name) = @_;
|
||||
pidl "\nstruct $name {\n";
|
||||
pidl "struct $name {\n";
|
||||
$tab_depth++;
|
||||
my $el_count=0;
|
||||
if (defined $struct->{ELEMENTS}) {
|
||||
@ -106,10 +94,10 @@ sub HeaderStruct($$)
|
||||
}
|
||||
if ($el_count == 0) {
|
||||
# some compilers can't handle empty structures
|
||||
pidl "\tchar _empty_;\n";
|
||||
pidl tabs()."char _empty_;\n";
|
||||
}
|
||||
$tab_depth--;
|
||||
pidl "}";
|
||||
pidl tabs()."}";
|
||||
if (defined $struct->{PROPERTIES}) {
|
||||
HeaderProperties($struct->{PROPERTIES}, []);
|
||||
}
|
||||
@ -123,12 +111,12 @@ sub HeaderEnum($$)
|
||||
my $first = 1;
|
||||
|
||||
if (not Parse::Pidl::Util::useUintEnums()) {
|
||||
pidl "\nenum $name {\n";
|
||||
pidl "enum $name {\n";
|
||||
$tab_depth++;
|
||||
foreach my $e (@{$enum->{ELEMENTS}}) {
|
||||
unless ($first) { pidl ",\n"; }
|
||||
$first = 0;
|
||||
tabs();
|
||||
pidl tabs();
|
||||
pidl $e;
|
||||
}
|
||||
pidl "\n";
|
||||
@ -136,7 +124,7 @@ sub HeaderEnum($$)
|
||||
pidl "}";
|
||||
} else {
|
||||
my $count = 0;
|
||||
pidl "\nenum $name { __donnot_use_enum_$name=0x7FFFFFFF};\n";
|
||||
pidl "enum $name { __donnot_use_enum_$name=0x7FFFFFFF};\n";
|
||||
my $with_val = 0;
|
||||
my $without_val = 0;
|
||||
foreach my $e (@{$enum->{ELEMENTS}}) {
|
||||
@ -168,13 +156,8 @@ sub HeaderBitmap($$)
|
||||
{
|
||||
my($bitmap,$name) = @_;
|
||||
|
||||
pidl "\n/* bitmap $name */\n";
|
||||
|
||||
foreach my $e (@{$bitmap->{ELEMENTS}})
|
||||
{
|
||||
pidl "#define $e\n";
|
||||
}
|
||||
|
||||
pidl "/* bitmap $name */\n";
|
||||
pidl "#define $_\n" foreach (@{$bitmap->{ELEMENTS}});
|
||||
pidl "\n";
|
||||
}
|
||||
|
||||
@ -185,7 +168,7 @@ sub HeaderUnion($$)
|
||||
my($union,$name) = @_;
|
||||
my %done = ();
|
||||
|
||||
pidl "\nunion $name {\n";
|
||||
pidl "union $name {\n";
|
||||
$tab_depth++;
|
||||
foreach my $e (@{$union->{ELEMENTS}}) {
|
||||
if ($e->{TYPE} ne "EMPTY") {
|
||||
@ -219,7 +202,7 @@ sub HeaderType($$$)
|
||||
if (has_property($e, "charset")) {
|
||||
pidl "const char";
|
||||
} else {
|
||||
pidl Parse::Pidl::Typelist::mapType($e->{TYPE});
|
||||
pidl mapType($e->{TYPE});
|
||||
}
|
||||
}
|
||||
|
||||
@ -229,7 +212,7 @@ sub HeaderTypedef($)
|
||||
{
|
||||
my($typedef) = shift;
|
||||
HeaderType($typedef, $typedef->{DATA}, $typedef->{NAME});
|
||||
pidl ";\n" unless ($typedef->{DATA}->{TYPE} eq "BITMAP");
|
||||
pidl ";\n\n" unless ($typedef->{DATA}->{TYPE} eq "BITMAP");
|
||||
}
|
||||
|
||||
#####################################################################
|
||||
@ -247,17 +230,14 @@ sub HeaderTypedefProto($)
|
||||
|
||||
return unless has_property($d, "public");
|
||||
|
||||
my $pull_args = $tf->{PULL_FN_ARGS}->($d);
|
||||
my $push_args = $tf->{PUSH_FN_ARGS}->($d);
|
||||
my $print_args = $tf->{PRINT_FN_ARGS}->($d);
|
||||
unless (has_property($d, "nopush")) {
|
||||
pidl "NTSTATUS ndr_push_$d->{NAME}($push_args);\n";
|
||||
pidl "NTSTATUS ndr_push_$d->{NAME}(struct ndr_push *ndr, int ndr_flags, " . $tf->{DECL}->($d, "push") . ");\n";
|
||||
}
|
||||
unless (has_property($d, "nopull")) {
|
||||
pidl "NTSTATUS ndr_pull_$d->{NAME}($pull_args);\n";
|
||||
pidl "NTSTATUS ndr_pull_$d->{NAME}(struct ndr_pull *ndr, int ndr_flags, " . $tf->{DECL}->($d, "pull") . ");\n";
|
||||
}
|
||||
unless (has_property($d, "noprint")) {
|
||||
pidl "void ndr_print_$d->{NAME}($print_args);\n";
|
||||
pidl "void ndr_print_$d->{NAME}(struct ndr_print *ndr, const char *name, " . $tf->{DECL}->($d, "print") . ");\n";
|
||||
}
|
||||
}
|
||||
|
||||
@ -292,14 +272,10 @@ sub HeaderFunctionInOut_needed($$)
|
||||
{
|
||||
my($fn,$prop) = @_;
|
||||
|
||||
if ($prop eq "out" && $fn->{RETURN_TYPE}) {
|
||||
return 1;
|
||||
}
|
||||
return 1 if ($prop eq "out" && $fn->{RETURN_TYPE} ne "void");
|
||||
|
||||
foreach my $e (@{$fn->{ELEMENTS}}) {
|
||||
if (has_property($e, $prop)) {
|
||||
return 1;
|
||||
}
|
||||
foreach (@{$fn->{ELEMENTS}}) {
|
||||
return 1 if (has_property($_, $prop));
|
||||
}
|
||||
|
||||
return undef;
|
||||
@ -322,35 +298,29 @@ sub HeaderFunction($)
|
||||
my $needed = 0;
|
||||
|
||||
if (HeaderFunctionInOut_needed($fn, "in")) {
|
||||
tabs();
|
||||
pidl "struct {\n";
|
||||
pidl tabs()."struct {\n";
|
||||
$tab_depth++;
|
||||
HeaderFunctionInOut($fn, "in");
|
||||
$tab_depth--;
|
||||
tabs();
|
||||
pidl "} in;\n\n";
|
||||
pidl tabs()."} in;\n\n";
|
||||
$needed++;
|
||||
}
|
||||
|
||||
if (HeaderFunctionInOut_needed($fn, "out")) {
|
||||
tabs();
|
||||
pidl "struct {\n";
|
||||
pidl tabs()."struct {\n";
|
||||
$tab_depth++;
|
||||
HeaderFunctionInOut($fn, "out");
|
||||
if ($fn->{RETURN_TYPE}) {
|
||||
tabs();
|
||||
pidl Parse::Pidl::Typelist::mapType($fn->{RETURN_TYPE}) . " result;\n";
|
||||
if ($fn->{RETURN_TYPE} ne "void") {
|
||||
pidl tabs().mapType($fn->{RETURN_TYPE}) . " result;\n";
|
||||
}
|
||||
$tab_depth--;
|
||||
tabs();
|
||||
pidl "} out;\n\n";
|
||||
pidl tabs()."} out;\n\n";
|
||||
$needed++;
|
||||
}
|
||||
|
||||
if (! $needed) {
|
||||
# sigh - some compilers don't like empty structures
|
||||
tabs();
|
||||
pidl "int _dummy_element;\n";
|
||||
pidl tabs()."int _dummy_element;\n";
|
||||
}
|
||||
|
||||
$tab_depth--;
|
||||
@ -366,7 +336,7 @@ sub HeaderFnProto($$)
|
||||
|
||||
pidl "void ndr_print_$name(struct ndr_print *ndr, const char *name, int flags, const struct $name *r);\n";
|
||||
|
||||
if (defined($fn->{OPNUM})) {
|
||||
unless (has_property($fn, "noopnum")) {
|
||||
pidl "NTSTATUS dcerpc_$name(struct dcerpc_pipe *p, TALLOC_CTX *mem_ctx, struct $name *r);\n";
|
||||
pidl "struct rpc_request *dcerpc_$name\_send(struct dcerpc_pipe *p, TALLOC_CTX *mem_ctx, struct $name *r);\n";
|
||||
}
|
||||
@ -414,8 +384,9 @@ sub HeaderInterface($)
|
||||
pidl "NTSTATUS dcerpc_server_$interface->{NAME}_init(void);\n\n";
|
||||
}
|
||||
|
||||
foreach my $d (@{$interface->{FUNCTIONS}}) {
|
||||
next if not defined($d->{OPNUM});
|
||||
foreach my $d (@{$interface->{DATA}}) {
|
||||
next if $d->{TYPE} ne "FUNCTION";
|
||||
next if has_property($d, "noopnum");
|
||||
my $u_name = uc $d->{NAME};
|
||||
pidl "#define DCERPC_$u_name (";
|
||||
|
||||
@ -423,10 +394,6 @@ sub HeaderInterface($)
|
||||
pidl "DCERPC_" . uc $interface->{BASE} . "_CALL_COUNT + ";
|
||||
}
|
||||
|
||||
if ($d->{OPNUM} != $count) {
|
||||
die ("Function ".$d->{NAME}." has: wrong opnum [".$d->{OPNUM}."] should be [".$count."]");
|
||||
}
|
||||
|
||||
pidl sprintf("0x%02x", $count) . ")\n";
|
||||
$count++;
|
||||
}
|
||||
@ -439,16 +406,19 @@ sub HeaderInterface($)
|
||||
|
||||
pidl "$count)\n\n";
|
||||
|
||||
foreach my $d (@{$interface->{CONSTS}}) {
|
||||
foreach my $d (@{$interface->{DATA}}) {
|
||||
next if ($d->{TYPE} ne "CONST");
|
||||
HeaderConst($d);
|
||||
}
|
||||
|
||||
foreach my $d (@{$interface->{TYPEDEFS}}) {
|
||||
foreach my $d (@{$interface->{DATA}}) {
|
||||
next if ($d->{TYPE} ne "TYPEDEF");
|
||||
HeaderTypedef($d);
|
||||
HeaderTypedefProto($d);
|
||||
}
|
||||
|
||||
foreach my $d (@{$interface->{FUNCTIONS}}) {
|
||||
foreach my $d (@{$interface->{DATA}}) {
|
||||
next if ($d->{TYPE} ne "FUNCTION");
|
||||
HeaderFunction($d);
|
||||
HeaderFnProto($interface, $d);
|
||||
}
|
||||
|
@ -8,7 +8,7 @@
|
||||
package Parse::Pidl::Samba::NDR::Parser;
|
||||
|
||||
use strict;
|
||||
use Parse::Pidl::Typelist qw(hasType getType);
|
||||
use Parse::Pidl::Typelist qw(hasType getType mapType);
|
||||
use Parse::Pidl::Util qw(has_property ParseExpr);
|
||||
use Parse::Pidl::NDR qw(GetPrevLevel GetNextLevel ContainsDeferred);
|
||||
|
||||
@ -1100,31 +1100,18 @@ sub ParseEnumPrint($$)
|
||||
end_flags($enum);
|
||||
}
|
||||
|
||||
sub ArgsEnumPush($)
|
||||
sub DeclEnum($)
|
||||
{
|
||||
my $e = shift;
|
||||
return "struct ndr_push *ndr, int ndr_flags, enum $e->{NAME} r";
|
||||
}
|
||||
|
||||
sub ArgsEnumPrint($)
|
||||
{
|
||||
my $e = shift;
|
||||
return "struct ndr_print *ndr, const char *name, enum $e->{NAME} r";
|
||||
}
|
||||
|
||||
sub ArgsEnumPull($)
|
||||
{
|
||||
my $e = shift;
|
||||
return "struct ndr_pull *ndr, int ndr_flags, enum $e->{NAME} *r";
|
||||
my ($e,$t) = @_;
|
||||
return "enum $e->{NAME} " .
|
||||
($t eq "pull"?"*":"") . "r";
|
||||
}
|
||||
|
||||
$typefamily{ENUM} = {
|
||||
DECL => \&DeclEnum,
|
||||
PUSH_FN_BODY => \&ParseEnumPush,
|
||||
PUSH_FN_ARGS => \&ArgsEnumPush,
|
||||
PULL_FN_BODY => \&ParseEnumPull,
|
||||
PULL_FN_ARGS => \&ArgsEnumPull,
|
||||
PRINT_FN_BODY => \&ParseEnumPrint,
|
||||
PRINT_FN_ARGS => \&ArgsEnumPrint,
|
||||
};
|
||||
|
||||
#####################################################################
|
||||
@ -1196,34 +1183,18 @@ sub ParseBitmapPrint($$)
|
||||
end_flags($bitmap);
|
||||
}
|
||||
|
||||
sub ArgsBitmapPush($)
|
||||
sub DeclBitmap($$)
|
||||
{
|
||||
my $e = shift;
|
||||
my $type_decl = Parse::Pidl::Typelist::mapType($e->{DATA}->{BASE_TYPE});
|
||||
return "struct ndr_push *ndr, int ndr_flags, $type_decl r";
|
||||
}
|
||||
|
||||
sub ArgsBitmapPrint($)
|
||||
{
|
||||
my $e = shift;
|
||||
my $type_decl = Parse::Pidl::Typelist::mapType($e->{DATA}->{BASE_TYPE});
|
||||
return "struct ndr_print *ndr, const char *name, $type_decl r";
|
||||
}
|
||||
|
||||
sub ArgsBitmapPull($)
|
||||
{
|
||||
my $e = shift;
|
||||
my $type_decl = Parse::Pidl::Typelist::mapType($e->{DATA}->{BASE_TYPE});
|
||||
return "struct ndr_pull *ndr, int ndr_flags, $type_decl *r";
|
||||
my ($e,$t) = @_;
|
||||
return mapType(Parse::Pidl::Typelist::bitmap_type_fn($e->{DATA})) .
|
||||
($t eq "pull"?" *":" ") . "r";
|
||||
}
|
||||
|
||||
$typefamily{BITMAP} = {
|
||||
DECL => \&DeclBitmap,
|
||||
PUSH_FN_BODY => \&ParseBitmapPush,
|
||||
PUSH_FN_ARGS => \&ArgsBitmapPush,
|
||||
PULL_FN_BODY => \&ParseBitmapPull,
|
||||
PULL_FN_ARGS => \&ArgsBitmapPull,
|
||||
PRINT_FN_BODY => \&ParseBitmapPrint,
|
||||
PRINT_FN_ARGS => \&ArgsBitmapPrint,
|
||||
};
|
||||
|
||||
#####################################################################
|
||||
@ -1352,22 +1323,10 @@ sub ParseStructNdrSize($)
|
||||
pidl "return ndr_size_struct(r, flags, (ndr_push_flags_fn_t)ndr_push_$t->{NAME});";
|
||||
}
|
||||
|
||||
sub ArgsStructPush($)
|
||||
sub DeclStruct($)
|
||||
{
|
||||
my $e = shift;
|
||||
return "struct ndr_push *ndr, int ndr_flags, const struct $e->{NAME} *r";
|
||||
}
|
||||
|
||||
sub ArgsStructPrint($)
|
||||
{
|
||||
my $e = shift;
|
||||
return "struct ndr_print *ndr, const char *name, const struct $e->{NAME} *r";
|
||||
}
|
||||
|
||||
sub ArgsStructPull($)
|
||||
{
|
||||
my $e = shift;
|
||||
return "struct ndr_pull *ndr, int ndr_flags, struct $e->{NAME} *r";
|
||||
my ($e,$t) = @_;
|
||||
return ($t ne "pull"?"const ":"") . "struct $e->{NAME} *r";
|
||||
}
|
||||
|
||||
sub ArgsStructNdrSize($)
|
||||
@ -1378,11 +1337,9 @@ sub ArgsStructNdrSize($)
|
||||
|
||||
$typefamily{STRUCT} = {
|
||||
PUSH_FN_BODY => \&ParseStructPush,
|
||||
PUSH_FN_ARGS => \&ArgsStructPush,
|
||||
DECL => \&DeclStruct,
|
||||
PULL_FN_BODY => \&ParseStructPull,
|
||||
PULL_FN_ARGS => \&ArgsStructPull,
|
||||
PRINT_FN_BODY => \&ParseStructPrint,
|
||||
PRINT_FN_ARGS => \&ArgsStructPrint,
|
||||
SIZE_FN_BODY => \&ParseStructNdrSize,
|
||||
SIZE_FN_ARGS => \&ArgsStructNdrSize,
|
||||
};
|
||||
@ -1625,22 +1582,10 @@ sub ParseUnionPull($$)
|
||||
pidl "ndr_pull_restore_relative_base_offset(ndr, _save_relative_base_offset);" if defined($e->{PROPERTIES}{relative_base});
|
||||
}
|
||||
|
||||
sub ArgsUnionPush($)
|
||||
sub DeclUnion($$)
|
||||
{
|
||||
my $e = shift;
|
||||
return "struct ndr_push *ndr, int ndr_flags, const union $e->{NAME} *r";
|
||||
}
|
||||
|
||||
sub ArgsUnionPrint($)
|
||||
{
|
||||
my $e = shift;
|
||||
return "struct ndr_print *ndr, const char *name, const union $e->{NAME} *r";
|
||||
}
|
||||
|
||||
sub ArgsUnionPull($)
|
||||
{
|
||||
my $e = shift;
|
||||
return "struct ndr_pull *ndr, int ndr_flags, union $e->{NAME} *r";
|
||||
my ($e,$t) = @_;
|
||||
return ($t ne "pull"?"const ":"") . "union $e->{NAME} *r";
|
||||
}
|
||||
|
||||
sub ArgsUnionNdrSize($)
|
||||
@ -1651,11 +1596,9 @@ sub ArgsUnionNdrSize($)
|
||||
|
||||
$typefamily{UNION} = {
|
||||
PUSH_FN_BODY => \&ParseUnionPush,
|
||||
PUSH_FN_ARGS => \&ArgsUnionPush,
|
||||
DECL => \&DeclUnion,
|
||||
PULL_FN_BODY => \&ParseUnionPull,
|
||||
PULL_FN_ARGS => \&ArgsUnionPull,
|
||||
PRINT_FN_BODY => \&ParseUnionPrint,
|
||||
PRINT_FN_ARGS => \&ArgsUnionPrint,
|
||||
SIZE_FN_ARGS => \&ArgsUnionNdrSize,
|
||||
SIZE_FN_BODY => \&ParseUnionNdrSize,
|
||||
};
|
||||
@ -1666,8 +1609,8 @@ sub ParseTypedefPush($)
|
||||
{
|
||||
my($e) = shift;
|
||||
|
||||
my $args = $typefamily{$e->{DATA}->{TYPE}}->{PUSH_FN_ARGS}->($e);
|
||||
pidl fn_prefix($e) . "NTSTATUS ndr_push_$e->{NAME}($args)";
|
||||
my $args = $typefamily{$e->{DATA}->{TYPE}}->{DECL}->($e,"push");
|
||||
pidl fn_prefix($e) . "NTSTATUS ndr_push_$e->{NAME}(struct ndr_push *ndr, int ndr_flags, $args)";
|
||||
|
||||
pidl "{";
|
||||
indent;
|
||||
@ -1684,9 +1627,9 @@ sub ParseTypedefPull($)
|
||||
{
|
||||
my($e) = shift;
|
||||
|
||||
my $args = $typefamily{$e->{DATA}->{TYPE}}->{PULL_FN_ARGS}->($e);
|
||||
my $args = $typefamily{$e->{DATA}->{TYPE}}->{DECL}->($e,"pull");
|
||||
|
||||
pidl fn_prefix($e) . "NTSTATUS ndr_pull_$e->{NAME}($args)";
|
||||
pidl fn_prefix($e) . "NTSTATUS ndr_pull_$e->{NAME}(struct ndr_pull *ndr, int ndr_flags, $args)";
|
||||
|
||||
pidl "{";
|
||||
indent;
|
||||
@ -1703,9 +1646,9 @@ sub ParseTypedefPrint($)
|
||||
{
|
||||
my($e) = shift;
|
||||
|
||||
my $args = $typefamily{$e->{DATA}->{TYPE}}->{PRINT_FN_ARGS}->($e);
|
||||
my $args = $typefamily{$e->{DATA}->{TYPE}}->{DECL}->($e,"print");
|
||||
|
||||
pidl "void ndr_print_$e->{NAME}($args)";
|
||||
pidl "void ndr_print_$e->{NAME}(struct ndr_print *ndr, const char *name, $args)";
|
||||
pidl "{";
|
||||
indent;
|
||||
$typefamily{$e->{DATA}->{TYPE}}->{PRINT_FN_BODY}->($e->{DATA}, $e->{NAME});
|
||||
|
@ -7,7 +7,7 @@ package Parse::Pidl::Typelist;
|
||||
|
||||
require Exporter;
|
||||
@ISA = qw(Exporter);
|
||||
@EXPORT = qw(hasType getType);
|
||||
@EXPORT = qw(hasType getType mapType);
|
||||
|
||||
use Parse::Pidl::Util qw(has_property);
|
||||
use strict;
|
||||
|
@ -6,7 +6,7 @@ package Parse::Pidl::Util;
|
||||
|
||||
require Exporter;
|
||||
@ISA = qw(Exporter);
|
||||
@EXPORT = qw(has_property property_matches ParseExpr);
|
||||
@EXPORT = qw(has_property property_matches ParseExpr is_constant);
|
||||
|
||||
use strict;
|
||||
|
||||
|
@ -7,3 +7,5 @@
|
||||
|
||||
- don't be so strict on array boundaries.. arrays can and will be empty when
|
||||
a (regular) remote error occurs
|
||||
|
||||
- support nested elements
|
||||
|
@ -225,7 +225,7 @@ sub process_file($)
|
||||
$header = Parse::Pidl::Util::ChangeExtension($output, ".h");
|
||||
}
|
||||
require Parse::Pidl::Samba::NDR::Header;
|
||||
Parse::Pidl::Util::FileSave($header, Parse::Pidl::Samba::NDR::Header::Parse($ndr));
|
||||
Parse::Pidl::Util::FileSave($header, Parse::Pidl::Samba::NDR::Header::Parse($pidl));
|
||||
if (defined($opt_swig)) {
|
||||
require Parse::Pidl::Samba::SWIG;
|
||||
my($filename) = $output;
|
||||
|
Loading…
x
Reference in New Issue
Block a user