From a65a169cd8725fd1af25fd897ae1a38893e72eb7 Mon Sep 17 00:00:00 2001 From: Stefan Metzmacher Date: Tue, 8 Mar 2011 16:00:20 +0100 Subject: [PATCH] TODO CONTAINS_NON_FIXED --- pidl/lib/Parse/Pidl/NDR.pm | 23 +++++++++++++++++++++++ 1 file changed, 23 insertions(+) diff --git a/pidl/lib/Parse/Pidl/NDR.pm b/pidl/lib/Parse/Pidl/NDR.pm index 003156e3a11e..c3f6796f9aa0 100644 --- a/pidl/lib/Parse/Pidl/NDR.pm +++ b/pidl/lib/Parse/Pidl/NDR.pm @@ -364,6 +364,7 @@ sub GetElementLevelTable($$$) DATA_TYPE => $e->{TYPE}, IS_DEFERRED => $is_deferred, CONTAINS_DEFERRED => can_contain_deferred($e->{TYPE}), + CONTAINS_NON_FIXED => can_contain_non_fixed($e->{TYPE}), IS_SURROUNDING => 0 #FIXME }); @@ -414,6 +415,28 @@ sub can_contain_deferred($) return 0; } +sub can_contain_non_fixed($) +{ + sub can_contain_non_fixed($); + my ($type) = @_; + + return 1 if can_contain_deferred($type); + + $type = getType($type); + + return 0 if (is_fixed_size_scalar($type)); + + return can_contain_non_fixed($type->{DATA}) if ($type->{TYPE} eq "TYPEDEF"); + + return 0 unless defined($type->{ELEMENTS}); + + foreach (@{$type->{ELEMENTS}}) { + return 1 if ($_->{POINTERS}); + return 1 if (can_contain_non_fixed ($_->{TYPE})); + } + + return 0; +} sub pointer_type($) { my $e = shift; -- 2.34.1