~drizzle-trunk/drizzle/development

« back to all changes in this revision

Viewing changes to lib/GenTest/Grammar.pm

sync with latest from trunk

Show diffs side-by-side

added added

removed removed

Lines of Context:
243
243
    my ($self, $patch_grammar) = @_;
244
244
 
245
245
    my $patch_rules = $patch_grammar->rules();
246
 
    my %patch_rules = %$patch_rules;
247
246
 
248
247
    my $rules = $self->rules();
249
 
    my %rules = %$rules;
250
248
 
251
 
    foreach my $ruleName (keys %patch_rules) {
252
 
        $rules{$ruleName} = $patch_rules{$ruleName};
 
249
    foreach my $ruleName (keys %$patch_rules) {
 
250
        $rules->{$ruleName} = $patch_rules->{$ruleName};
253
251
    }
254
252
 
255
 
    my $new_grammar = GenTest::Grammar->new(grammar_rules => \%rules);
 
253
    my $new_grammar = GenTest::Grammar->new(grammar_rules => $rules);
256
254
    return $new_grammar;
257
255
}
258
256
 
272
270
sub topGrammarX {
273
271
    my ($self, $level, $max, @rules) = @_;
274
272
    if ($max > 0) {
275
 
        my %result;
 
273
        my $result={};
276
274
        foreach my $rule (@rules) {
277
 
            my $components = $rule->components();
278
 
            my @components = @$components;
279
 
            foreach my $c (@components) {
 
275
            foreach my $c (@{$rule->components()}) {
280
276
                my @subrules = ();
281
277
                foreach my $cp (@$c) {
282
278
                    push @subrules,$self->rule($cp) if defined $self->rule($cp);
284
280
                my $componentrules = 
285
281
                    $self->topGrammarX($level + 1, $max -1,@subrules);
286
282
                if (defined  $componentrules) {
287
 
                    my %x = %$componentrules;
288
 
                    foreach my $sr (keys %x) {
289
 
                        $result{$sr} = $x{$sr};
 
283
                    foreach my $sr (keys %$componentrules) {
 
284
                        $result->{$sr} = $componentrules->{$sr};
290
285
                    }
291
286
                }
292
287
            }
293
 
            $result{$rule->name()} = $rule;
 
288
            $result->{$rule->name()} = $rule;
294
289
        }
295
 
        return \%result;
 
290
        return $result;
296
291
    } else {
297
292
        return undef;
298
293
    }
339
334
    my $mask16 = $prng->uint16(0,0x7fff);
340
335
    foreach my $rulename (sort keys %$rules) {
341
336
        my $rule = $self->rule($rulename);
342
 
        my $components = $rule->components();
343
 
        my @components = @$components;
344
337
        my @newComponents;
345
 
        foreach my $x (@components) {
 
338
        foreach my $x (@{$rule->components()}) {
346
339
            push @newComponents, $x if (1 << ($i++)) & $mask16;
347
340
            if ($i % 16 == 0) {
348
341
                # We need more bits!