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