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
});
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;