OLD | NEW |
1 #!/usr/bin/python | 1 #!/usr/bin/python |
2 # Copyright (c) 2012, the Dart project authors. Please see the AUTHORS file | 2 # Copyright (c) 2012, the Dart project authors. Please see the AUTHORS file |
3 # for details. All rights reserved. Use of this source code is governed by a | 3 # for details. All rights reserved. Use of this source code is governed by a |
4 # BSD-style license that can be found in the LICENSE file. | 4 # BSD-style license that can be found in the LICENSE file. |
5 | 5 |
6 """This module provides shared functionality for the systems to generate | 6 """This module provides shared functionality for the systems to generate |
7 frog binding from the IDL database.""" | 7 frog binding from the IDL database.""" |
8 | 8 |
9 import os | 9 import os |
10 from generator import * | 10 from generator import * |
(...skipping 202 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
213 if super_getter or super_setter: | 213 if super_getter or super_setter: |
214 if getter and not setter and super_getter and not super_setter: | 214 if getter and not setter and super_getter and not super_setter: |
215 if DartType(getter.type.id) == DartType(super_getter.type.id): | 215 if DartType(getter.type.id) == DartType(super_getter.type.id): |
216 # Compatible getter, use the superclass property. This works because | 216 # Compatible getter, use the superclass property. This works because |
217 # JavaScript will do its own dynamic dispatch. | 217 # JavaScript will do its own dynamic dispatch. |
218 self._members_emitter.Emit( | 218 self._members_emitter.Emit( |
219 '\n' | 219 '\n' |
220 ' // Use implementation from $SUPER.\n' | 220 ' // Use implementation from $SUPER.\n' |
221 ' // final $TYPE $NAME;\n', | 221 ' // final $TYPE $NAME;\n', |
222 SUPER=super_getter_interface.id, | 222 SUPER=super_getter_interface.id, |
223 NAME=getter.id, TYPE=output_type) | 223 NAME=DartDomNameOfAttribute(getter), TYPE=output_type) |
224 return | 224 return |
225 | 225 |
226 self._members_emitter.Emit('\n // Shadowing definition.') | 226 self._members_emitter.Emit('\n // Shadowing definition.') |
227 self._AddAttributeUsingProperties(getter, setter) | 227 self._AddAttributeUsingProperties(getter, setter) |
228 return | 228 return |
229 | 229 |
| 230 # Can't generate field if attribute has different name in JS and Dart. |
| 231 if self._AttributeChangesName(getter or setter): |
| 232 self._AddAttributeUsingProperties(getter, setter) |
| 233 return |
| 234 |
230 if getter and setter and input_type == output_type: | 235 if getter and setter and input_type == output_type: |
231 self._members_emitter.Emit( | 236 self._members_emitter.Emit( |
232 '\n $TYPE $NAME;\n', | 237 '\n $TYPE $NAME;\n', |
233 NAME=getter.id, TYPE=output_type) | 238 NAME=DartDomNameOfAttribute(getter), TYPE=output_type) |
234 return | 239 return |
235 if getter and not setter: | 240 if getter and not setter: |
236 self._members_emitter.Emit( | 241 self._members_emitter.Emit( |
237 '\n final $TYPE $NAME;\n', | 242 '\n final $TYPE $NAME;\n', |
238 NAME=getter.id, TYPE=output_type) | 243 NAME=DartDomNameOfAttribute(getter), TYPE=output_type) |
239 return | 244 return |
240 self._AddAttributeUsingProperties(getter, setter) | 245 self._AddAttributeUsingProperties(getter, setter) |
241 | 246 |
| 247 def _AttributeChangesName(self, attr): |
| 248 return attr.id != DartDomNameOfAttribute(attr) |
| 249 |
242 def _AddAttributeUsingProperties(self, getter, setter): | 250 def _AddAttributeUsingProperties(self, getter, setter): |
243 if getter: | 251 if getter: |
244 self._AddGetter(getter) | 252 self._AddGetter(getter) |
245 if setter: | 253 if setter: |
246 self._AddSetter(setter) | 254 self._AddSetter(setter) |
247 | 255 |
248 def _AddGetter(self, attr): | 256 def _AddGetter(self, attr): |
249 # TODO(sra): Remove native body when Issue 829 fixed. | 257 # TODO(sra): Remove native body when Issue 829 fixed. |
250 self._members_emitter.Emit( | 258 self._members_emitter.Emit( |
251 '\n $TYPE get $NAME() native "return this.$NAME;";\n', | 259 '\n $TYPE get $NAME() native "return this.$NATIVE_NAME;";\n', |
252 NAME=attr.id, TYPE=self._NarrowOutputType(attr.type.id)) | 260 NAME=DartDomNameOfAttribute(attr), |
| 261 NATIVE_NAME=attr.id, |
| 262 TYPE=self._NarrowOutputType(attr.type.id)) |
253 | 263 |
254 def _AddSetter(self, attr): | 264 def _AddSetter(self, attr): |
255 # TODO(sra): Remove native body when Issue 829 fixed. | 265 # TODO(sra): Remove native body when Issue 829 fixed. |
256 self._members_emitter.Emit( | 266 self._members_emitter.Emit( |
257 ' void set $NAME($TYPE value) native "this.$NAME = value;";\n', | 267 ' void set $NAME($TYPE value) native "this.$NATIVE_NAME = value;";\n', |
258 NAME=attr.id, TYPE=self._NarrowInputType(attr.type.id)) | 268 NAME=DartDomNameOfAttribute(attr), |
| 269 NATIVE_NAME=attr.id, |
| 270 TYPE=self._NarrowInputType(attr.type.id)) |
259 | 271 |
260 def _FindShadowedAttribute(self, attr): | 272 def _FindShadowedAttribute(self, attr): |
261 """Returns (attribute, superinterface) or (None, None).""" | 273 """Returns (attribute, superinterface) or (None, None).""" |
262 def FindInParent(interface): | 274 def FindInParent(interface): |
263 """Returns matching attribute in parent, or None.""" | 275 """Returns matching attribute in parent, or None.""" |
264 if interface.parents: | 276 if interface.parents: |
265 parent = interface.parents[0] | 277 parent = interface.parents[0] |
266 if IsDartCollectionType(parent.type.id): | 278 if IsDartCollectionType(parent.type.id): |
267 return (None, None) | 279 return (None, None) |
268 if self._system._database.HasInterface(parent.type.id): | 280 if self._system._database.HasInterface(parent.type.id): |
(...skipping 92 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
361 if native_body: | 373 if native_body: |
362 native_body = " '''" + native_body + "'''" | 374 native_body = " '''" + native_body + "'''" |
363 | 375 |
364 self._members_emitter.Emit( | 376 self._members_emitter.Emit( |
365 '\n' | 377 '\n' |
366 ' $TYPE $NAME($PARAMS) native$NATIVESTRING;\n', | 378 ' $TYPE $NAME($PARAMS) native$NATIVESTRING;\n', |
367 TYPE=self._NarrowOutputType(info.type_name), | 379 TYPE=self._NarrowOutputType(info.type_name), |
368 NAME=info.name, | 380 NAME=info.name, |
369 PARAMS=params, | 381 PARAMS=params, |
370 NATIVESTRING=native_body) | 382 NATIVESTRING=native_body) |
OLD | NEW |