|
|
@@ -101,7 +101,7 @@ sub clear_except {
|
|
|
|
|
|
# Parameter seen is only used for recursive calls
|
|
|
sub load {
|
|
|
- my ($self, $file, $seen, $current_object) = @_;
|
|
|
+ my ($self, $file, $seen, $current_object_ref) = @_;
|
|
|
|
|
|
if (defined($seen)) {
|
|
|
return if exists $seen->{$file}; # Avoid include loops
|
|
|
@@ -113,7 +113,11 @@ sub load {
|
|
|
|
|
|
open(my $sym_file, "<", $file)
|
|
|
|| syserr(_g("cannot open %s"), $file);
|
|
|
- my $object = $current_object;
|
|
|
+ if (not ref($current_object_ref)) {
|
|
|
+ my $obj;
|
|
|
+ $current_object_ref = \$obj;
|
|
|
+ }
|
|
|
+ local *object = $current_object_ref;
|
|
|
while (defined($_ = <$sym_file>)) {
|
|
|
chomp($_);
|
|
|
if (/^\s+(\S+)\s(\S+)(?:\s(\d+))?/) {
|
|
|
@@ -137,7 +141,7 @@ sub load {
|
|
|
my $filename = $1;
|
|
|
my $dir = $file;
|
|
|
$dir =~ s{[^/]+$}{}; # Strip filename
|
|
|
- $self->load("$dir$filename", $seen, $object);
|
|
|
+ $self->load("$dir$filename", $seen, $current_object_ref);
|
|
|
} elsif (/^#(?:DEPRECATED|MISSING): ([^#]+)#\s*(\S+)\s(\S+)(?:\s(\d+))?/) {
|
|
|
my $sym = {
|
|
|
minver => $3,
|