Index: Source/bindings/dart/scripts/templates/interface_cpp.template |
diff --git a/Source/bindings/dart/scripts/templates/interface_cpp.template b/Source/bindings/dart/scripts/templates/interface_cpp.template |
index 8d10b555bde43ec05566f8df7ae008bd6562fcd0..05fe7741e750e1970e856d1646e966af0396ac02 100644 |
--- a/Source/bindings/dart/scripts/templates/interface_cpp.template |
+++ b/Source/bindings/dart/scripts/templates/interface_cpp.template |
@@ -2,20 +2,9 @@ |
{##############################################################################} |
-{% macro generate_index_getter_resolver_body(dart_class, class_name, indexed_property_getter) %} |
- {% set resolver_string = resolver_indexed_name(class_name, 'getter', 'unsigned long') %} |
-{# TODO(terry): Should change to 'Getter' for consistency, matches dart:html for indexed props and handle custom. #} |
-if (argumentCount == 2 && name == "{{resolver_string}}") { |
- *autoSetupScope = true; |
- return {{dart_class}}Internal::indexedPropertyGetter; |
-} |
-{% endmacro %} |
- |
- |
-{##############################################################################} |
{# Mangled Blink name used by resolver to map to static function. #} |
{##############################################################################} |
-{% macro resolver_indexed_name(class_name, name, argument) -%} |
+{% macro resolver_callback_string(class_name, name, argument) -%} |
{% set name = '__' + name + '___' -%} |
{% set count = 1 -%} |
{{class_name}}_{{name}}Callback_RESOLVER_STRING_{{count}}_{{argument}} |
@@ -62,7 +51,7 @@ fail: |
{##############################################################################} |
{% macro generate_index_getter_resolver_body(dart_class, class_name, indexed_property_getter) %} |
- {% set resolver_string = resolver_indexed_name(class_name, 'getter', 'unsigned long') %} |
+ {% set resolver_string = resolver_callback_string(class_name, 'getter', 'unsigned long') %} |
{# TODO(terry): Should change to 'Getter' for consistency, matches dart:html for indexed props and handle custom. #} |
if (argumentCount == 2 && name == "{{resolver_string}}") { |
*autoSetupScope = true; |
@@ -70,29 +59,64 @@ if (argumentCount == 2 && name == "{{resolver_string}}") { |
} |
{% endmacro %} |
+{##############################################################################} |
+{% macro generate_named_getter_resolver_body(dart_class, class_name, named_property_getter) %} |
+ {% set resolver_string = resolver_callback_string(class_name, 'getter', 'DOMString') %} |
+// TODO(terry/efortuna): v8 implements PropetyGetter, PropertyEnumerator, and |
+// PropertyQuery. On the Dart side we currently only implement |
+// propertyQuery. Implement the other two. |
+if (argumentCount == 2 && name == "{{resolver_string}}") { |
+ *autoSetupScope = true; |
+ return {{dart_class}}Internal::propertyQuery; |
+} |
+{% endmacro %} |
{##############################################################################} |
{% block indexed_property_getter_resolver %} |
{# TODO(terry): Support all indexed and named properties today only indexed getter is supported. #} |
- {# Resolver indexed/named properties #} |
+ {# Resolver indexed properties #} |
{% if indexed_property_getter and not indexed_property_getter.is_custom %} |
{{generate_index_getter_resolver_body(dart_class, interface_name, indexed_property_getter) | indent(4)}} |
{% endif %} |
{% endblock %} |
+{##############################################################################} |
+{% block named_property_getter_resolver %} |
+ {# Resolver named properties #} |
+ {% if named_property_getter %} |
+ {{generate_named_getter_resolver_body(dart_class, interface_name, named_property_getter) | indent(4)}} |
+ {% endif %} |
+{% endblock %} |
+ |
{##############################################################################} |
{% macro generate_symbolizer_indexed_property_getter_body(dart_class, interface_name) %} |
-{% set resolver_string = resolver_indexed_name(interface_name, 'getter', 'unsigned long') %} |
+{% set resolver_string = resolver_callback_string(interface_name, 'getter', 'unsigned long') %} |
if (nf == {{dart_class}}Internal::indexedPropertyGetter) { |
return reinterpret_cast<const uint8_t*>("{{resolver_string}}"); |
} |
{% endmacro %} |
- |
+{##############################################################################} |
+{% macro generate_symbolizer_named_property_getter_body(dart_class, interface_name) %} |
+{% set resolver_string = resolver_callback_string(interface_name, 'getter', 'DOMString') %} |
+ // TODO(terry/efortuna): v8 implements PropetyGetter, PropertyEnumerator, and |
+ // PropertyQuery. On the Dart side we currently only implement |
+ // propertyQuery. Implement the other two. |
+ if (nf == {{dart_class}}Internal::propertyQuery) { |
+ return reinterpret_cast<const uint8_t*>("{{resolver_string}}"); |
+ } |
+{% endmacro %} |
{##############################################################################} |
{% block generate_symbolizer_indexed_property_getter %} |
{% if indexed_property_getter and not indexed_property_getter.is_custom %} |
{{generate_symbolizer_indexed_property_getter_body(dart_class, interface_name)}} |
{% endif %} |
{% endblock %} |
+ |
+{##############################################################################} |
+{% block generate_symbolizer_named_property_getter %} |
+{% if named_property_getter %} |
+ {{generate_symbolizer_named_property_getter_body(dart_class, interface_name)}} |
+{% endif %} |
+{% endblock %} |