{% extends 'interface_base_cpp.template' %}


{# TODO(terry): Implement setter and deleter too #}


{##############################################################################}
{% block named_property_getter %}
{% if named_property_getter and not named_property_getter.is_custom %}
static void namedPropertyGetter(Dart_NativeArguments args)
{
    {{cpp_class}}* /* FIXME(vsm): Remove this. */ ALLOW_UNUSED receiver = GetReceiver<{{cpp_class}}>(args);
    Dart_Handle exception = nullptr;
    {
  {% if named_property_getter.is_raises_exception %}
        ExceptionState es;
  {% endif %}

        String name = DartConverter<String>::FromArguments(args, 1, exception);
        if (exception)
            goto fail;
        {{named_property_getter.cpp_type}} result = {{named_property_getter.cpp_value}};
        if (!result)
            return;
        {{named_property_getter.dart_set_return_value}};
        return;
    }

fail:
    Dart_ThrowException(exception);
    ASSERT_NOT_REACHED();
}

{% endif %}
{% endblock %}

{##############################################################################}
{% block named_property_setter %}
{% if named_property_setter and not named_property_setter.is_custom %}
static void namedPropertySetter(Dart_NativeArguments args)
{
    {{cpp_class}}* /* FIXME(vsm): Remove this. */ ALLOW_UNUSED receiver = GetReceiver<{{cpp_class}}>(args);
    Dart_Handle exception = nullptr;
    {
  {% if named_property_setter.is_raises_exception %}
        ExceptionState es;
  {% endif %}

        String name = DartConverter<String>::FromArguments(args, 1, exception);
        if (exception)
            goto fail;
        String value = DartConverter<String>::FromArguments(args, 2, exception);
        if (exception)
            goto fail;
        {{named_property_setter.cpp_value}};
        return;
    }

fail:
    Dart_ThrowException(exception);
    ASSERT_NOT_REACHED();
}

{% endif %}
{% endblock %}

{##############################################################################}
{% block indexed_property_getter %}
{% if indexed_property_getter and not indexed_property_getter.is_custom %}
  {% set getter = indexed_property_getter %}
static void indexedPropertyGetter(Dart_NativeArguments args)
{
    {{cpp_class}}* /* FIXME(vsm): Remove this. */ ALLOW_UNUSED receiver = GetReceiver<{{cpp_class}}>(args);
    Dart_Handle exception = nullptr;
    {
  {% if indexed_property_getter.is_raises_exception %}
        ExceptionState es;
  {% endif %}

        {# TODO(terry): Assume index is unsigned long, which all currently are. #}
        unsigned index = DartConverter<unsigned>::FromArguments(args, 1, exception);
        if (exception)
            goto fail;
        {{indexed_property_getter.cpp_type}} result = {{indexed_property_getter.cpp_value}};
        if (!result)
            return;
        {{indexed_property_getter.dart_set_return_value}};

        return;
    }

fail:
    Dart_ThrowException(exception);
    ASSERT_NOT_REACHED();
}

{% endif %}
{# TODO(terry): Should handle custom index getter - none today. #}
{% endblock %}

{##############################################################################}
{% block indexed_property_getter_resolver %}
    {# TODO(terry): Support all indexed and named properties today only indexed getter is supported. #}
    {# Resolver indexed properties #}
    {% if indexed_property_getter and not indexed_property_getter.is_custom %}
      {% for native_entry in indexed_property_getter.native_entries %}
        {% set resolver_string = native_entry.resolver_string %}
if (argumentCount == 2 && name == "{{resolver_string}}") {
    *autoSetupScope = true;
    return {{dart_class}}Internal::indexedPropertyGetter;
}
      {% endfor %}
    {% endif %}
{% endblock %}

{##############################################################################}
{% block named_property_getter_resolver %}
    {# Resolver named properties #}
    {% if named_property_getter and not named_property_getter.is_custom %}
      {% for native_entry in named_property_getter.native_entries %}
        {% set resolver_string = native_entry.resolver_string %}
if (argumentCount == 2 && (name == "{{resolver_string}}")) {
    *autoSetupScope = true;
    return {{dart_class}}Internal::namedPropertyGetter;
}
      {% endfor %}
    {% endif %}
{% endblock %}

{##############################################################################}
{% block named_property_setter_resolver %}
    {# Resolver named properties #}
    {% if named_property_setter and not named_property_setter.is_custom %}
      {% for native_entry in named_property_setter.native_entries %}
        {% set resolver_string = native_entry.resolver_string %}
if (argumentCount == 3 && (name == "{{resolver_string}}")) {
    *autoSetupScope = true;
    return {{dart_class}}Internal::namedPropertySetter;
}
      {% endfor %}
    {% endif %}
{% endblock %}

{##############################################################################}
{% block generate_symbolizer_indexed_property_getter %}
    {% if indexed_property_getter and not indexed_property_getter.is_custom %}
      {% for native_entry in indexed_property_getter.native_entries %}
        {% set resolver_string = native_entry.resolver_string %}
if (native_function == {{dart_class}}Internal::indexedPropertyGetter) {
    return reinterpret_cast<const uint8_t*>("{{resolver_string}}");
}
      {% endfor %}
    {% endif %}
{% endblock %}

{##############################################################################}
{% block generate_symbolizer_named_property_getter %}
    {% if named_property_getter %}
      {% for native_entry in named_property_getter.native_entries %}
        {% set resolver_string = native_entry.resolver_string %}
if (native_function == {{dart_class}}Internal::namedPropertyGetter) {
    return reinterpret_cast<const uint8_t*>("{{resolver_string}}");
}
      {% endfor %}
    {% endif %}
{% endblock %}

{##############################################################################}
{% block generate_symbolizer_named_property_setter %}
    {% if named_property_setter %}
      {% for native_entry in named_property_setter.native_entries %}
        {% set resolver_string = native_entry.resolver_string %}
if (native_function == {{dart_class}}Internal::namedPropertySetter) {
    return reinterpret_cast<const uint8_t*>("{{resolver_string}}");
}
      {% endfor %}
    {% endif %}
{% endblock %}

{##############################################################################}

{% from 'methods_cpp.template' import static_method_name with context %}

{##############################################################################}
{% block overloaded_constructor %}
{% if constructor_overloads %}
static void constructorCallbackDispatcher(Dart_NativeArguments args)
{
    Dart_Handle exception = nullptr;
    const int argOffset = 0;
    int argCount = Dart_GetNativeArgumentCount(args) + argOffset;
    {# 2. Initialize argcount to be min(maxarg, n). #}
    switch (std::min({{constructor_overloads.maxarg}}, argCount)) {
    {# 3. Remove from S all entries whose type list is not of length argcount. #}
    {% for length, tests_constructors in constructor_overloads.length_tests_methods %}
    case {{length}}:
        {# Then resolve by testing argument #}
        {% for test, constructor in tests_constructors %}
        {# 10. If i = d, then: #}
        if ({{test}}) {
          {% if constructor.is_custom %}
            {{static_method_name(constructor.name)}}(args);
          {% else %}
            {{static_method_name(constructor.name, constructor.overload_index)}}(args);
          {% endif %}
            return;
        }
        {% endfor %}
        break;
    {% endfor %}
    default:
        {# Invalid arity, throw error #}
        {# Report full list of valid arities if gaps and above minimum #}
        {% if constructor_overloads.valid_arities %}
        if (argCount >= {{overloads.minarg}}) {
            const String message = "Wrong arity, expected one of {{constructor_overloads.valid_arities}}";
            // TODO(dart): exception = DartUtilities::coreArgumentErrorException(message);
            goto fail;
        }
        {% endif %}
        {# Otherwise just report "not enough arguments" #}
        {
            const String message = "Not enough arguments (at least {{constructor_overloads.minarg}} required)";
            // TODO(dart): exception = DartUtilities::coreArgumentErrorException(message);
            goto fail;
        }
        return;
    }
    {# No match, throw error #}
    {
        const String message = "No matching constructor signature.";
        // TODO(dart): exception = DartUtilities::coreArgumentErrorException(message);
        goto fail;
    }
    return;
fail:
    Dart_ThrowException(exception);
    ASSERT_NOT_REACHED();
}
{% endif %}
{% endblock %}


{##############################################################################}
