OLD | NEW |
1 # | 1 # |
2 # KDOM IDL parser | 2 # KDOM IDL parser |
3 # | 3 # |
4 # Copyright (C) 2005 Nikolas Zimmermann <wildfox@kde.org> | 4 # Copyright (C) 2005 Nikolas Zimmermann <wildfox@kde.org> |
5 # | 5 # |
6 # This library is free software; you can redistribute it and/or | 6 # This library is free software; you can redistribute it and/or |
7 # modify it under the terms of the GNU Library General Public | 7 # modify it under the terms of the GNU Library General Public |
8 # License as published by the Free Software Foundation; either | 8 # License as published by the Free Software Foundation; either |
9 # version 2 of the License, or (at your option) any later version. | 9 # version 2 of the License, or (at your option) any later version. |
10 # | 10 # |
11 # This library is distributed in the hope that it will be useful, | 11 # This library is distributed in the hope that it will be useful, |
12 # but WITHOUT ANY WARRANTY; without even the implied warranty of | 12 # but WITHOUT ANY WARRANTY; without even the implied warranty of |
13 # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU | 13 # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU |
14 # Library General Public License for more details. | 14 # Library General Public License for more details. |
15 # | 15 # |
16 # You should have received a copy of the GNU Library General Public License | 16 # You should have received a copy of the GNU Library General Public License |
17 # along with this library; see the file COPYING.LIB. If not, write to | 17 # along with this library; see the file COPYING.LIB. If not, write to |
18 # the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, | 18 # the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, |
19 # Boston, MA 02110-1301, USA. | 19 # Boston, MA 02110-1301, USA. |
20 # | 20 # |
21 | 21 |
22 package IDLParser; | 22 package deprecated_idl_parser; |
23 | 23 |
24 use strict; | 24 use strict; |
25 | 25 |
26 use preprocessor; | 26 use preprocessor; |
27 use Class::Struct; | 27 use Class::Struct; |
28 | 28 |
29 use constant StringToken => 0; | 29 use constant StringToken => 0; |
30 use constant IntegerToken => 1; | 30 use constant IntegerToken => 1; |
31 use constant FloatToken => 2; | 31 use constant FloatToken => 2; |
32 use constant IdentifierToken => 3; | 32 use constant IdentifierToken => 3; |
(...skipping 13 matching lines...) Expand all Loading... |
46 type => '$', | 46 type => '$', |
47 parameters => '@', | 47 parameters => '@', |
48 }); | 48 }); |
49 | 49 |
50 # Used to represent 'interface' blocks | 50 # Used to represent 'interface' blocks |
51 struct( domInterface => { | 51 struct( domInterface => { |
52 name => '$', # Class identifier | 52 name => '$', # Class identifier |
53 parent => '$', # Parent class identifier | 53 parent => '$', # Parent class identifier |
54 constants => '@', # List of 'domConstant' | 54 constants => '@', # List of 'domConstant' |
55 functions => '@', # List of 'domFunction' | 55 functions => '@', # List of 'domFunction' |
56 attributes => '@', # List of 'domAttribute' | 56 attributes => '@', # List of 'domAttribute' |
57 extendedAttributes => '$', # Extended attributes | 57 extendedAttributes => '$', # Extended attributes |
58 constructors => '@', # Constructors, list of 'domFunction' | 58 constructors => '@', # Constructors, list of 'domFunction' |
59 customConstructors => '@', # Custom constructors, list of 'domFunction' | 59 customConstructors => '@', # Custom constructors, list of 'domFunction' |
60 isException => '$', # Used for exception interfaces | 60 isException => '$', # Used for exception interfaces |
61 isCallback => '$', # Used for callback interfaces | 61 isCallback => '$', # Used for callback interfaces |
62 isPartial => '$', # Used for partial interfaces | 62 isPartial => '$', # Used for partial interfaces |
63 }); | 63 }); |
64 | 64 |
65 # Used to represent domInterface contents | 65 # Used to represent domInterface contents |
66 struct( domFunction => { | 66 struct( domFunction => { |
(...skipping 78 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
145 } | 145 } |
146 | 146 |
147 sub assertTokenValue | 147 sub assertTokenValue |
148 { | 148 { |
149 my $self = shift; | 149 my $self = shift; |
150 my $token = shift; | 150 my $token = shift; |
151 my $value = shift; | 151 my $value = shift; |
152 my $line = shift; | 152 my $line = shift; |
153 my $msg = "Next token should be " . $value . ", but " . $token->value() . "
at " . $self->{Line}; | 153 my $msg = "Next token should be " . $value . ", but " . $token->value() . "
at " . $self->{Line}; |
154 if (defined ($line)) { | 154 if (defined ($line)) { |
155 $msg .= " IDLParser.pm:" . $line; | 155 $msg .= " deprecated_idl_parser.pm:" . $line; |
156 } | 156 } |
157 die $msg unless $token->value() eq $value; | 157 die $msg unless $token->value() eq $value; |
158 } | 158 } |
159 | 159 |
160 sub assertTokenType | 160 sub assertTokenType |
161 { | 161 { |
162 my $self = shift; | 162 my $self = shift; |
163 my $token = shift; | 163 my $token = shift; |
164 my $type = shift; | 164 my $type = shift; |
165 die "Next token's type should be " . $type . ", but " . $token->type() . " a
t " . $self->{Line} unless $token->type() eq $type; | 165 die "Next token's type should be " . $type . ", but " . $token->type() . " a
t " . $self->{Line} unless $token->type() eq $type; |
166 } | 166 } |
167 | 167 |
168 sub assertUnexpectedToken | 168 sub assertUnexpectedToken |
169 { | 169 { |
170 my $self = shift; | 170 my $self = shift; |
171 my $token = shift; | 171 my $token = shift; |
172 my $line = shift; | 172 my $line = shift; |
173 my $msg = "Unexpected token " . $token . " at " . $self->{Line}; | 173 my $msg = "Unexpected token " . $token . " at " . $self->{Line}; |
174 if (defined ($line)) { | 174 if (defined ($line)) { |
175 $msg .= " IDLParser.pm:" . $line; | 175 $msg .= " deprecated_idl_parser.pm:" . $line; |
176 } | 176 } |
177 die $msg; | 177 die $msg; |
178 } | 178 } |
179 | 179 |
180 sub assertNoExtendedAttributesInTypedef | 180 sub assertNoExtendedAttributesInTypedef |
181 { | 181 { |
182 my $self = shift; | 182 my $self = shift; |
183 my $name = shift; | 183 my $name = shift; |
184 my $line = shift; | 184 my $line = shift; |
185 my $typedef = $typedefs{$name}; | 185 my $typedef = $typedefs{$name}; |
186 my $msg = "Unexpected extendedAttributeList in typedef \"$name\" at " . $sel
f->{Line}; | 186 my $msg = "Unexpected extendedAttributeList in typedef \"$name\" at " . $sel
f->{Line}; |
187 if (defined ($line)) { | 187 if (defined ($line)) { |
188 $msg .= " IDLParser.pm:" . $line; | 188 $msg .= " deprecated_idl_parser.pm:" . $line; |
189 } | 189 } |
190 die $msg if %{$typedef->extendedAttributes}; | 190 die $msg if %{$typedef->extendedAttributes}; |
191 } | 191 } |
192 | 192 |
193 sub Parse | 193 sub Parse |
194 { | 194 { |
195 my $self = shift; | 195 my $self = shift; |
196 my $fileName = shift; | 196 my $fileName = shift; |
197 my $defines = shift; | |
198 my $preprocessor = shift; | 197 my $preprocessor = shift; |
| 198 my $defines = ""; |
199 | 199 |
200 my @definitions = (); | 200 my @definitions = (); |
201 | 201 |
202 my @lines = applyPreprocessor($fileName, $defines, $preprocessor); | 202 my @lines = applyPreprocessor($fileName, $defines, $preprocessor); |
203 $self->{Line} = $lines[0]; | 203 $self->{Line} = $lines[0]; |
204 $self->{DocumentContent} = join(' ', @lines); | 204 $self->{DocumentContent} = join(' ', @lines); |
205 | 205 |
206 $self->getToken(); | 206 $self->getToken(); |
207 eval { | 207 eval { |
208 my $result = $self->parseDefinitions(); | 208 my $result = $self->parseDefinitions(); |
(...skipping 165 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
374 } | 374 } |
375 } | 375 } |
376 $self->applyTypedefs(\@definitions); | 376 $self->applyTypedefs(\@definitions); |
377 return \@definitions; | 377 return \@definitions; |
378 } | 378 } |
379 | 379 |
380 sub applyTypedefs | 380 sub applyTypedefs |
381 { | 381 { |
382 my $self = shift; | 382 my $self = shift; |
383 my $definitions = shift; | 383 my $definitions = shift; |
384 | 384 |
385 if (!%typedefs) { | 385 if (!%typedefs) { |
386 return; | 386 return; |
387 } | 387 } |
388 foreach my $definition (@$definitions) { | 388 foreach my $definition (@$definitions) { |
389 if (ref($definition) eq "domInterface") { | 389 if (ref($definition) eq "domInterface") { |
390 foreach my $constant (@{$definition->constants}) { | 390 foreach my $constant (@{$definition->constants}) { |
391 if (exists $typedefs{$constant->type}) { | 391 if (exists $typedefs{$constant->type}) { |
392 my $typedef = $typedefs{$constant->type}; | 392 my $typedef = $typedefs{$constant->type}; |
393 $self->assertNoExtendedAttributesInTypedef($constant->type,
__LINE__); | 393 $self->assertNoExtendedAttributesInTypedef($constant->type,
__LINE__); |
394 $constant->type($typedef->type); | 394 $constant->type($typedef->type); |
(...skipping 1835 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
2230 $customConstructor->overloadedIndex($index++); | 2230 $customConstructor->overloadedIndex($index++); |
2231 push(@{$interface->customConstructors}, $customConstructor); | 2231 push(@{$interface->customConstructors}, $customConstructor); |
2232 } | 2232 } |
2233 delete $extendedAttributeList->{"CustomConstructors"}; | 2233 delete $extendedAttributeList->{"CustomConstructors"}; |
2234 $extendedAttributeList->{"CustomConstructor"} = "VALUE_IS_MISSING"; | 2234 $extendedAttributeList->{"CustomConstructor"} = "VALUE_IS_MISSING"; |
2235 } | 2235 } |
2236 $interface->extendedAttributes($extendedAttributeList); | 2236 $interface->extendedAttributes($extendedAttributeList); |
2237 } | 2237 } |
2238 | 2238 |
2239 1; | 2239 1; |
OLD | NEW |