13 my $db = DBI
->connect("dbi:SQLite:$db_file", "", "", {AutoCommit
=> 0});
19 if ($text =~ /s64min/) {
21 } elsif ($text =~/s32min/) {
23 } elsif ($text =~ /s16min/) {
25 } elsif ($text =~ /s64max/) {
27 } elsif ($text =~ /s32max/) {
29 } elsif ($text =~ /s16max/) {
31 } elsif ($text =~ /u64max/) {
33 } elsif ($text =~ /u32max/) {
35 } elsif ($text =~ /u16max/) {
38 if ($text =~ /\((.*?)\)/) {
41 if (!($text =~ /^[-0123456789]/)) {
61 foreach my $tmp (@
$union) {
63 push @return_union, $tmp;
67 if ($range{max
} < $tmp->{min
}) {
68 push @return_union, \
%range;
69 push @return_union, $tmp;
71 } elsif ($range{min
} <= $tmp->{min
}) {
72 if ($range{max
} <= $tmp->{max
}) {
73 $range{max
} = $tmp->{max
};
74 push @return_union, \
%range;
77 } elsif ($range{min
} <= $tmp->{max
}) {
78 if ($range{max
} <= $tmp->{max
}) {
79 push @return_union, $tmp;
82 $range{min
} = $tmp->{min
};
85 push @return_union, $tmp;
90 push @return_union, \
%range;
93 return \
@return_union;
101 return "(" . $num . ")";
111 if ($range->{min
} == $range->{max
}) {
112 return print_num
($range->{min
});
114 return print_num
($range->{min
}) . "-" . print_num
($range->{max
});
122 my $printed_range = "";
125 if ($#$union > 100) {
126 print "$type " . scalar @
$union . "\n";
130 foreach my $range (@
$union) {
132 $printed_range = $printed_range . ",";
135 $printed_range = $printed_range . print_range
($range);
137 my $sql = "insert into type_value values ('$type', '$printed_range');";
142 $db->do("PRAGMA cache_size = 800000");
143 $db->do("PRAGMA journal_mode = OFF");
144 $db->do("PRAGMA count_changes = OFF");
145 $db->do("PRAGMA temp_store = MEMORY");
146 $db->do("PRAGMA locking = EXCLUSIVE");
148 my ($sth, @row, $cur_type, $type, @ranges, $range_txt, %range, $min, $max, $union_array, $skip);
150 $sth = $db->prepare('select type, value from function_type_value order by type');
155 while (@row = $sth->fetchrow_array()) {
158 if ($cur_type ne "$type") {
159 if ($cur_type ne "" && $skip == 0) {
160 print_info
($cur_type, $union_array);
171 @ranges = split(/,/, $row[1]);
172 foreach $range_txt (@ranges) {
173 if ($range_txt =~ /ignore/) {
176 if ($range_txt =~ /(.*[^(])-(.*)/) {
177 $min = text_to_int
($1);
178 $max = text_to_int
($2);
180 $min = text_to_int
($range_txt);
183 if ($min =~ /NaN/ || $max =~ /NaN/) {
187 $union_array = add_range
($union_array, $min, $max);
191 print_info
($cur_type, $union_array);