1{##############################################################################}
2{% macro constant_getter_callback(constant) %}
3{% filter conditional(constant.conditional_string) %}
4static void {{constant.name}}ConstantGetterCallback(v8::Local<v8::String>, const v8::PropertyCallbackInfo<v8::Value>& info)
5{
6    TRACE_EVENT_SET_SAMPLING_STATE("blink", "DOMGetter");
7    {% if constant.deprecate_as %}
8    UseCounter::countDeprecation(callingExecutionContext(info.GetIsolate()), UseCounter::{{constant.deprecate_as}});
9    {% endif %}
10    {% if constant.measure_as %}
11    UseCounter::count(callingExecutionContext(info.GetIsolate()), UseCounter::{{constant.measure_as}});
12    {% endif %}
13    {% if constant.idl_type in ('Double', 'Float') %}
14    v8SetReturnValue(info, {{constant.value}});
15    {% elif constant.idl_type == 'String' %}
16    v8SetReturnValueString(info, "{{constant.value}}");
17    {% else %}
18    v8SetReturnValueInt(info, {{constant.value}});
19    {% endif %}
20    TRACE_EVENT_SET_SAMPLING_STATE("v8", "V8Execution");
21}
22{% endfilter %}
23{% endmacro %}
24
25
26{######################################}
27{% macro install_constants() %}
28{% if constant_configuration_constants %}
29{# Normal constants #}
30static const V8DOMConfiguration::ConstantConfiguration {{v8_class}}Constants[] = {
31    {% for constant in constant_configuration_constants %}
32    {{constant_configuration(constant)}},
33    {% endfor %}
34};
35V8DOMConfiguration::installConstants(functionTemplate, prototypeTemplate, {{v8_class}}Constants, WTF_ARRAY_LENGTH({{v8_class}}Constants), isolate);
36{% endif %}
37{# Runtime-enabled constants #}
38{% for constant in runtime_enabled_constants %}
39{% filter runtime_enabled(constant.runtime_enabled_function) %}
40static const V8DOMConfiguration::ConstantConfiguration constantConfiguration = {{constant_configuration(constant)}};
41V8DOMConfiguration::installConstants(functionTemplate, prototypeTemplate, &constantConfiguration, 1, isolate);
42{% endfilter %}
43{% endfor %}
44{# Constants with [DeprecateAs] or [MeasureAs] #}
45{% for constant in special_getter_constants %}
46V8DOMConfiguration::installConstant(functionTemplate, prototypeTemplate, "{{constant.name}}", {{cpp_class}}V8Internal::{{constant.name}}ConstantGetterCallback, isolate);
47{% endfor %}
48{# Check constants #}
49{% if not do_not_check_constants %}
50{% for constant in constants %}
51{% if constant.idl_type not in ('Double', 'Float', 'String') %}
52{% set constant_cpp_class = constant.cpp_class or cpp_class %}
53COMPILE_ASSERT({{constant.value}} == {{constant_cpp_class}}::{{constant.reflected_name}}, TheValueOf{{cpp_class}}_{{constant.reflected_name}}DoesntMatchWithImplementation);
54{% endif %}
55{% endfor %}
56{% endif %}
57{% endmacro %}
58
59
60{######################################}
61{%- macro constant_configuration(constant) %}
62{% if constant.idl_type in ('Double', 'Float') %}
63    {% set value = '0, %s, 0' % constant.value %}
64{% elif constant.idl_type == 'String' %}
65    {% set value = '0, 0, "%s"' % constant.value %}
66{% else %}
67    {# 'Short', 'Long' etc. #}
68    {% set value = '%s, 0, 0' % constant.value %}
69{% endif %}
70{"{{constant.name}}", {{value}}, V8DOMConfiguration::ConstantType{{constant.idl_type}}}
71{%- endmacro %}
72