OLD | NEW |
1 # Copyright (C) 2013 Google Inc. All rights reserved. | 1 # Copyright (C) 2013 Google Inc. All rights reserved. |
2 # coding=utf-8 | 2 # coding=utf-8 |
3 # | 3 # |
4 # Redistribution and use in source and binary forms, with or without | 4 # Redistribution and use in source and binary forms, with or without |
5 # modification, are permitted provided that the following conditions are | 5 # modification, are permitted provided that the following conditions are |
6 # met: | 6 # met: |
7 # | 7 # |
8 # * Redistributions of source code must retain the above copyright | 8 # * Redistributions of source code must retain the above copyright |
9 # notice, this list of conditions and the following disclaimer. | 9 # notice, this list of conditions and the following disclaimer. |
10 # * Redistributions in binary form must reproduce the above | 10 # * Redistributions in binary form must reproduce the above |
(...skipping 366 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
377 | 377 |
378 def generated_iterator_method(name): | 378 def generated_iterator_method(name): |
379 return generated_method( | 379 return generated_method( |
380 return_type=IdlType('Iterator'), | 380 return_type=IdlType('Iterator'), |
381 name=name, | 381 name=name, |
382 extended_attributes=used_extended_attributes) | 382 extended_attributes=used_extended_attributes) |
383 | 383 |
384 iterator_method = generated_iterator_method('iterator') | 384 iterator_method = generated_iterator_method('iterator') |
385 | 385 |
386 if interface.iterable or interface.maplike or interface.setlike: | 386 if interface.iterable or interface.maplike or interface.setlike: |
387 methods.extend([ | 387 implicit_methods = [ |
388 generated_iterator_method('keys'), | 388 generated_iterator_method('keys'), |
389 generated_iterator_method('values'), | 389 generated_iterator_method('values'), |
390 generated_iterator_method('entries'), | 390 generated_iterator_method('entries'), |
391 | 391 |
392 # void forEach(Function callback, [Default=Undefined] optional a
ny thisArg) | 392 # void forEach(Function callback, [Default=Undefined] optional a
ny thisArg) |
393 generated_method(IdlType('void'), 'forEach', | 393 generated_method(IdlType('void'), 'forEach', |
394 arguments=[generated_argument(IdlType('Function
'), 'callback'), | 394 arguments=[generated_argument(IdlType('Function
'), 'callback'), |
395 generated_argument(IdlType('any'), '
thisArg', | 395 generated_argument(IdlType('any'), '
thisArg', |
396 is_optional=True, | 396 is_optional=True, |
397 extended_attribut
es={'Default': 'Undefined'})], | 397 extended_attribut
es={'Default': 'Undefined'})], |
398 extended_attributes=forEach_extended_attributes
), | 398 extended_attributes=forEach_extended_attributes
), |
399 ]) | 399 ] |
| 400 |
| 401 methods_by_name = {} |
| 402 for method in methods: |
| 403 methods_by_name.setdefault(method['name'], []).append(method) |
| 404 |
| 405 for implicit_method in implicit_methods: |
| 406 if implicit_method['name'] in methods_by_name: |
| 407 # FIXME: Check that the existing method is compatible. |
| 408 continue |
| 409 methods.append(implicit_method) |
400 | 410 |
401 # FIXME: maplike<> and setlike<> should also imply the presence of a | 411 # FIXME: maplike<> and setlike<> should also imply the presence of a |
402 # subset of keys(), values(), entries(), forEach(), has(), get(), add(), | 412 # subset of keys(), values(), entries(), forEach(), has(), get(), add(), |
403 # set(), delete() and clear(), and a 'size' attribute. | 413 # set(), delete() and clear(), and a 'size' attribute. |
404 | 414 |
405 # Stringifier | 415 # Stringifier |
406 if interface.stringifier: | 416 if interface.stringifier: |
407 stringifier = interface.stringifier | 417 stringifier = interface.stringifier |
408 stringifier_ext_attrs = stringifier.extended_attributes.copy() | 418 stringifier_ext_attrs = stringifier.extended_attributes.copy() |
409 if stringifier.attribute: | 419 if stringifier.attribute: |
(...skipping 825 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1235 if str(idl_type) != 'boolean': | 1245 if str(idl_type) != 'boolean': |
1236 raise Exception( | 1246 raise Exception( |
1237 'Only deleters with boolean type are allowed, but type is "%s"' % | 1247 'Only deleters with boolean type are allowed, but type is "%s"' % |
1238 idl_type) | 1248 idl_type) |
1239 extended_attributes = deleter.extended_attributes | 1249 extended_attributes = deleter.extended_attributes |
1240 return { | 1250 return { |
1241 'is_custom': 'Custom' in extended_attributes, | 1251 'is_custom': 'Custom' in extended_attributes, |
1242 'is_raises_exception': 'RaisesException' in extended_attributes, | 1252 'is_raises_exception': 'RaisesException' in extended_attributes, |
1243 'name': cpp_name(deleter), | 1253 'name': cpp_name(deleter), |
1244 } | 1254 } |
OLD | NEW |