… | |
… | |
327 | or die "internal error: ATTR0 without 'required'"; |
327 | or die "internal error: ATTR0 without 'required'"; |
328 | |
328 | |
329 | keys %$req; |
329 | keys %$req; |
330 | while (my ($k, $v) = each %$req) { |
330 | while (my ($k, $v) = each %$req) { |
331 | next type |
331 | next type |
332 | unless $obj->{$k} eq $v || $arch->{$k} eq $v; |
332 | unless $obj->{$k} == $v || $arch->{$k} == $v; |
333 | } |
333 | } |
334 | |
334 | |
335 | $root = $_; |
335 | $root = $_; |
336 | } |
336 | } |
337 | } |
337 | } |
338 | |
338 | |
339 | my $attr = { }; |
339 | my $attr = { }; |
340 | |
340 | |
|
|
341 | my @import = ($root); |
|
|
342 | |
341 | my @import = (\%Crossfire::Data::DEFAULT_ATTR, $root); |
343 | unshift @import, \%Crossfire::Data::DEFAULT_ATTR |
|
|
344 | unless $type == 116; |
|
|
345 | |
342 | my (%ignore); |
346 | my (%ignore); |
343 | my (@section_order, %section, @attr_order); |
347 | my (@section_order, %section, @attr_order); |
344 | |
348 | |
345 | while (my $type = shift @import) { |
349 | while (my $type = shift @import) { |
346 | push @import, @{$type->{import} || []}; |
350 | push @import, @{$type->{import} || []}; |