Index: Source/bindings/templates/constants.cpp |
diff --git a/Source/bindings/templates/constants.cpp b/Source/bindings/templates/constants.cpp |
index d916167d5d9a7cd585edda62dedb0eb863458faf..57133747c72a546135e430226bc4104a4fb472bb 100644 |
--- a/Source/bindings/templates/constants.cpp |
+++ b/Source/bindings/templates/constants.cpp |
@@ -1,36 +1,49 @@ |
-{######################################} |
-{% macro install_constants() %} |
-{% if has_constant_configuration %} |
-{# Normal constants #} |
-static const V8DOMConfiguration::ConstantConfiguration {{v8_class}}Constants[] = { |
- {% for constant in constants if not constant.runtime_enabled_function %} |
+{##############################################################################} |
+{% macro constant_getter_callback(constant) %} |
+{% filter conditional(constant.conditional_string) %} |
+static void {{constant.name}}ConstantGetterCallback(v8::Local<v8::String>, const v8::PropertyCallbackInfo<v8::Value>& info) |
+{ |
+ TRACE_EVENT_SET_SAMPLING_STATE("blink", "DOMGetter"); |
+ {% if constant.deprecate_as %} |
+ UseCounter::countDeprecation(callingExecutionContext(info.GetIsolate()), UseCounter::{{constant.deprecate_as}}); |
+ {% endif %} |
+ {% if constant.measure_as %} |
+ UseCounter::count(callingExecutionContext(info.GetIsolate()), UseCounter::{{constant.measure_as}}); |
+ {% endif %} |
{% if constant.idl_type in ('Double', 'Float') %} |
- {% set value = '0, %s, 0' % constant.value %} |
+ v8SetReturnValue(info, {{constant.value}}); |
{% elif constant.idl_type == 'String' %} |
- {% set value = '0, 0, %s' % constant.value %} |
+ v8SetReturnValueString(info, "{{constant.value}}"); |
{% else %} |
- {# 'Short', 'Long' etc. #} |
- {% set value = '%s, 0, 0' % constant.value %} |
+ v8SetReturnValueInt(info, {{constant.value}}); |
{% endif %} |
- {"{{constant.name}}", {{value}}, V8DOMConfiguration::ConstantType{{constant.idl_type}}}, |
+ TRACE_EVENT_SET_SAMPLING_STATE("v8", "V8Execution"); |
+} |
+{% endfilter %} |
+{% endmacro %} |
+ |
+ |
+{######################################} |
+{% macro install_constants() %} |
+{% if constant_configuration_constants %} |
+{# Normal constants #} |
+static const V8DOMConfiguration::ConstantConfiguration {{v8_class}}Constants[] = { |
+ {% for constant in constant_configuration_constants %} |
+ {{constant_configuration(constant)}}, |
{% endfor %} |
}; |
V8DOMConfiguration::installConstants(functionTemplate, prototypeTemplate, {{v8_class}}Constants, WTF_ARRAY_LENGTH({{v8_class}}Constants), isolate); |
{% endif %} |
{# Runtime-enabled constants #} |
-{% for constant in constants if constant.runtime_enabled_function %} |
-if ({{constant.runtime_enabled_function}}()) { |
- {% if constant.idl_type in ('Double', 'Float') %} |
- {% set value = '0, %s, 0' % constant.value %} |
- {% elif constant.idl_type == 'String' %} |
- {% set value = '0, 0, %s' % constant.value %} |
- {% else %} |
- {# 'Short', 'Long' etc. #} |
- {% set value = '%s, 0, 0' % constant.value %} |
- {% endif %} |
- static const V8DOMConfiguration::ConstantConfiguration constantConfiguration = {"{{constant.name}}", {{value}}, V8DOMConfiguration::ConstantType{{constant.idl_type}}}; |
- V8DOMConfiguration::installConstants(functionTemplate, prototypeTemplate, &constantConfiguration, 1, isolate); |
-} |
+{% for constant in runtime_enabled_constants %} |
+{% filter runtime_enabled(constant.runtime_enabled_function) %} |
+static const V8DOMConfiguration::ConstantConfiguration constantConfiguration = {{constant_configuration(constant)}}; |
+V8DOMConfiguration::installConstants(functionTemplate, prototypeTemplate, &constantConfiguration, 1, isolate); |
+{% endfilter %} |
+{% endfor %} |
+{# Constants with [DeprecateAs] or [MeasureAs] #} |
+{% for constant in special_getter_constants %} |
+V8DOMConfiguration::installConstant(functionTemplate, prototypeTemplate, "{{constant.name}}", {{cpp_class}}V8Internal::{{constant.name}}ConstantGetterCallback, isolate); |
{% endfor %} |
{# Check constants #} |
{% if not do_not_check_constants %} |
@@ -42,3 +55,17 @@ COMPILE_ASSERT({{constant.value}} == {{constant_cpp_class}}::{{constant.reflecte |
{% endfor %} |
{% endif %} |
{% endmacro %} |
+ |
+ |
+{######################################} |
+{%- macro constant_configuration(constant) %} |
+{% if constant.idl_type in ('Double', 'Float') %} |
+ {% set value = '0, %s, 0' % constant.value %} |
+{% elif constant.idl_type == 'String' %} |
+ {% set value = '0, 0, "%s"' % constant.value %} |
+{% else %} |
+ {# 'Short', 'Long' etc. #} |
+ {% set value = '%s, 0, 0' % constant.value %} |
+{% endif %} |
+{"{{constant.name}}", {{value}}, V8DOMConfiguration::ConstantType{{constant.idl_type}}} |
+{%- endmacro %} |