mirror of
https://github.com/samba-team/samba.git
synced 2025-03-01 04:58:35 +03:00
pidl/Samba4::NDR::Parser: move logic for extra get_pointer_of() into a function
metze (This used to be commit 26d7f5bf96cd7e950ceb532402afd6b8a58871ea)
This commit is contained in:
parent
e22c627ea1
commit
9475a76afc
@ -669,23 +669,39 @@ sub ParsePtrPush($$$$)
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
sub ParseDataPrint($$$$)
|
sub need_pointer_to($$$)
|
||||||
{
|
{
|
||||||
my ($self, $e, $l, $var_name) = @_;
|
my ($e, $l, $scalar_only) = @_;
|
||||||
|
|
||||||
if (not ref($l->{DATA_TYPE}) or
|
|
||||||
defined($l->{DATA_TYPE}->{NAME})) {
|
|
||||||
my $t;
|
my $t;
|
||||||
if (ref($l->{DATA_TYPE})) {
|
if (ref($l->{DATA_TYPE})) {
|
||||||
$t = "$l->{DATA_TYPE}->{TYPE}_$l->{DATA_TYPE}->{NAME}";
|
$t = "$l->{DATA_TYPE}->{TYPE}_$l->{DATA_TYPE}->{NAME}";
|
||||||
} else {
|
} else {
|
||||||
$t = $l->{DATA_TYPE};
|
$t = $l->{DATA_TYPE};
|
||||||
}
|
}
|
||||||
if (not Parse::Pidl::Typelist::is_scalar($t) or
|
|
||||||
Parse::Pidl::Typelist::scalar_is_reference($t)) {
|
if (not Parse::Pidl::Typelist::is_scalar($t)) {
|
||||||
|
return 1 if $scalar_only;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (Parse::Pidl::Typelist::scalar_is_reference($t)) {
|
||||||
|
return 1;
|
||||||
|
}
|
||||||
|
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
sub ParseDataPrint($$$$)
|
||||||
|
{
|
||||||
|
my ($self, $e, $l, $var_name) = @_;
|
||||||
|
|
||||||
|
if (not ref($l->{DATA_TYPE}) or defined($l->{DATA_TYPE}->{NAME})) {
|
||||||
|
|
||||||
|
if (need_pointer_to($e, $l, 1)) {
|
||||||
$var_name = get_pointer_to($var_name);
|
$var_name = get_pointer_to($var_name);
|
||||||
}
|
}
|
||||||
$self->pidl("ndr_print_$t(ndr, \"$e->{NAME}\", $var_name);");
|
|
||||||
|
$self->pidl(TypeFunctionName("ndr_print", $l->{DATA_TYPE})."(ndr, \"$e->{NAME}\", $var_name);");
|
||||||
} else {
|
} else {
|
||||||
$self->ParseTypePrint($l->{DATA_TYPE}, $var_name);
|
$self->ParseTypePrint($l->{DATA_TYPE}, $var_name);
|
||||||
}
|
}
|
||||||
@ -815,12 +831,11 @@ sub ParseDataPull($$$$$$$)
|
|||||||
{
|
{
|
||||||
my ($self,$e,$l,$ndr,$var_name,$primitives,$deferred) = @_;
|
my ($self,$e,$l,$ndr,$var_name,$primitives,$deferred) = @_;
|
||||||
|
|
||||||
if (not ref($l->{DATA_TYPE}) or
|
if (not ref($l->{DATA_TYPE}) or defined($l->{DATA_TYPE}->{NAME})) {
|
||||||
defined($l->{DATA_TYPE}->{NAME})) {
|
|
||||||
|
|
||||||
my $ndr_flags = CalcNdrFlags($l, $primitives, $deferred);
|
my $ndr_flags = CalcNdrFlags($l, $primitives, $deferred);
|
||||||
|
|
||||||
if (Parse::Pidl::Typelist::scalar_is_reference($l->{DATA_TYPE})) {
|
if (need_pointer_to($e, $l, 0)) {
|
||||||
$var_name = get_pointer_to($var_name);
|
$var_name = get_pointer_to($var_name);
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -845,21 +860,15 @@ sub ParseDataPush($$$$$$$)
|
|||||||
my ($self,$e,$l,$ndr,$var_name,$primitives,$deferred) = @_;
|
my ($self,$e,$l,$ndr,$var_name,$primitives,$deferred) = @_;
|
||||||
|
|
||||||
if (not ref($l->{DATA_TYPE}) or defined($l->{DATA_TYPE}->{NAME})) {
|
if (not ref($l->{DATA_TYPE}) or defined($l->{DATA_TYPE}->{NAME})) {
|
||||||
my $t;
|
|
||||||
if (ref($l->{DATA_TYPE}) eq "HASH") {
|
my $ndr_flags = CalcNdrFlags($l, $primitives, $deferred);
|
||||||
$t = "$l->{DATA_TYPE}->{TYPE}_$l->{DATA_TYPE}->{NAME}";
|
|
||||||
} else {
|
|
||||||
$t = $l->{DATA_TYPE};
|
|
||||||
}
|
|
||||||
|
|
||||||
# strings are passed by value rather than reference
|
# strings are passed by value rather than reference
|
||||||
if (not Parse::Pidl::Typelist::is_scalar($t) or
|
if (need_pointer_to($e, $l, 1)) {
|
||||||
Parse::Pidl::Typelist::scalar_is_reference($t)) {
|
|
||||||
$var_name = get_pointer_to($var_name);
|
$var_name = get_pointer_to($var_name);
|
||||||
}
|
}
|
||||||
|
|
||||||
my $ndr_flags = CalcNdrFlags($l, $primitives, $deferred);
|
$self->pidl("NDR_CHECK(".TypeFunctionName("ndr_push", $l->{DATA_TYPE})."($ndr, $ndr_flags, $var_name));");
|
||||||
$self->pidl("NDR_CHECK(ndr_push_$t($ndr, $ndr_flags, $var_name));");
|
|
||||||
} else {
|
} else {
|
||||||
$self->ParseTypePush($l->{DATA_TYPE}, $var_name, $primitives, $deferred);
|
$self->ParseTypePush($l->{DATA_TYPE}, $var_name, $primitives, $deferred);
|
||||||
}
|
}
|
||||||
|
Loading…
x
Reference in New Issue
Block a user