Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(739)

Unified Diff: bindings/scripts/v8_utilities.py

Issue 540533002: Roll IDL to Dartium37 (r181268) (Closed) Base URL: https://dart.googlecode.com/svn/third_party/WebCore
Patch Set: Created 6 years, 3 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
« no previous file with comments | « bindings/scripts/v8_types.py ('k') | bindings/tests/idls/SVGTestInterface.idl » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: bindings/scripts/v8_utilities.py
diff --git a/bindings/scripts/v8_utilities.py b/bindings/scripts/v8_utilities.py
new file mode 100644
index 0000000000000000000000000000000000000000..80675951b52752a864be669d06c4a22e96f97df1
--- /dev/null
+++ b/bindings/scripts/v8_utilities.py
@@ -0,0 +1,282 @@
+# Copyright (C) 2013 Google Inc. All rights reserved.
+#
+# Redistribution and use in source and binary forms, with or without
+# modification, are permitted provided that the following conditions are
+# met:
+#
+# * Redistributions of source code must retain the above copyright
+# notice, this list of conditions and the following disclaimer.
+# * Redistributions in binary form must reproduce the above
+# copyright notice, this list of conditions and the following disclaimer
+# in the documentation and/or other materials provided with the
+# distribution.
+# * Neither the name of Google Inc. nor the names of its
+# contributors may be used to endorse or promote products derived from
+# this software without specific prior written permission.
+#
+# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+# "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+# LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+# A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+# OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+# SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+# LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+# DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+# THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+# OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+"""Functions shared by various parts of the code generator.
+
+Extends IdlType and IdlUnion type with |enum_validation_expression| property.
+
+Design doc: http://www.chromium.org/developers/design-documents/idl-compiler
+"""
+
+import re
+
+from idl_types import IdlType, IdlUnionType
+import idl_types
+from v8_globals import includes
+import v8_types
+
+ACRONYMS = [
+ 'CSSOM', # must come *before* CSS to match full acronym
+ 'CSS',
+ 'HTML',
+ 'IME',
+ 'JS',
+ 'SVG',
+ 'URL',
+ 'WOFF',
+ 'XML',
+ 'XSLT',
+]
+
+
+################################################################################
+# Extended attribute parsing
+################################################################################
+
+def extended_attribute_value_contains(extended_attribute_value, value):
+ return (extended_attribute_value and
+ value in re.split('[|&]', extended_attribute_value))
+
+
+def has_extended_attribute(definition_or_member, extended_attribute_list):
+ return any(extended_attribute in definition_or_member.extended_attributes
+ for extended_attribute in extended_attribute_list)
+
+
+def has_extended_attribute_value(definition_or_member, name, value):
+ extended_attributes = definition_or_member.extended_attributes
+ return (name in extended_attributes and
+ extended_attribute_value_contains(extended_attributes[name], value))
+
+
+################################################################################
+# String handling
+################################################################################
+
+def capitalize(name):
+ """Capitalize first letter or initial acronym (used in setter names)."""
+ for acronym in ACRONYMS:
+ if name.startswith(acronym.lower()):
+ return name.replace(acronym.lower(), acronym)
+ return name[0].upper() + name[1:]
+
+
+def strip_suffix(string, suffix):
+ if not suffix or not string.endswith(suffix):
+ return string
+ return string[:-len(suffix)]
+
+
+def uncapitalize(name):
+ """Uncapitalizes first letter or initial acronym (used in method names).
+
+ E.g., 'SetURL' becomes 'setURL', but 'URLFoo' becomes 'urlFoo'.
+ """
+ for acronym in ACRONYMS:
+ if name.startswith(acronym):
+ return name.replace(acronym, acronym.lower())
+ return name[0].lower() + name[1:]
+
+
+################################################################################
+# C++
+################################################################################
+
+def enum_validation_expression(idl_type):
+ # FIXME: Add IdlEnumType, move property to derived type, and remove this check
+ if not idl_type.is_enum:
+ return None
+ return ' || '.join(['string == "%s"' % enum_value
+ for enum_value in idl_type.enum_values])
+IdlType.enum_validation_expression = property(enum_validation_expression)
+
+
+def scoped_name(interface, definition, base_name):
+ # partial interfaces are implemented as separate classes, with their members
+ # implemented as static member functions
+ partial_interface_implemented_as = definition.extended_attributes.get('PartialInterfaceImplementedAs')
+ if partial_interface_implemented_as:
+ return '%s::%s' % (partial_interface_implemented_as, base_name)
+ if (definition.is_static or
+ definition.name in ('Constructor', 'NamedConstructor')):
+ return '%s::%s' % (cpp_name(interface), base_name)
+ return 'impl->%s' % base_name
+
+
+def v8_class_name(interface):
+ return v8_types.v8_type(interface.name)
+
+
+################################################################################
+# Specific extended attributes
+################################################################################
+
+# [ActivityLogging]
+def activity_logging_world_list(member, access_type=''):
+ """Returns a set of world suffixes for which a definition member has activity logging, for specified access type.
+
+ access_type can be 'Getter' or 'Setter' if only checking getting or setting.
+ """
+ extended_attributes = member.extended_attributes
+ if 'LogActivity' not in extended_attributes:
+ return set()
+ log_activity = extended_attributes['LogActivity']
+ if log_activity and not log_activity.startswith(access_type):
+ return set()
+
+ includes.add('bindings/v8/V8DOMActivityLogger.h')
+ if 'LogAllWorlds' in extended_attributes:
+ return set(['', 'ForMainWorld'])
+ return set(['']) # At minimum, include isolated worlds.
+
+
+# [ActivityLogging]
+def activity_logging_world_check(member):
+ """Returns if an isolated world check is required when generating activity
+ logging code.
+
+ The check is required when there is no per-world binding code and logging is
+ required only for isolated world.
+ """
+ extended_attributes = member.extended_attributes
+ if 'LogActivity' not in extended_attributes:
+ return False
+ if ('PerWorldBindings' not in extended_attributes and
+ 'LogAllWorlds' not in extended_attributes):
+ return True
+ return False
+
+
+# [CallWith]
+CALL_WITH_ARGUMENTS = {
+ 'ScriptState': 'scriptState',
+ 'ExecutionContext': 'executionContext',
+ 'ScriptArguments': 'scriptArguments.release()',
+ 'ActiveWindow': 'callingDOMWindow(info.GetIsolate())',
+ 'FirstWindow': 'enteredDOMWindow(info.GetIsolate())',
+ 'Document': 'document',
+}
+# List because key order matters, as we want arguments in deterministic order
+CALL_WITH_VALUES = [
+ 'ScriptState',
+ 'ExecutionContext',
+ 'ScriptArguments',
+ 'ActiveWindow',
+ 'FirstWindow',
+ 'Document',
+]
+
+
+def call_with_arguments(call_with_values):
+ if not call_with_values:
+ return []
+ return [CALL_WITH_ARGUMENTS[value]
+ for value in CALL_WITH_VALUES
+ if extended_attribute_value_contains(call_with_values, value)]
+
+
+# [Conditional]
+def conditional_string(definition_or_member):
+ extended_attributes = definition_or_member.extended_attributes
+ if 'Conditional' not in extended_attributes:
+ return None
+ conditional = extended_attributes['Conditional']
+ for operator in '&|':
+ if operator in conditional:
+ conditions = conditional.split(operator)
+ operator_separator = ' %s%s ' % (operator, operator)
+ return operator_separator.join('ENABLE(%s)' % expression for expression in sorted(conditions))
+ return 'ENABLE(%s)' % conditional
+
+
+# [DeprecateAs]
+def deprecate_as(member):
+ extended_attributes = member.extended_attributes
+ if 'DeprecateAs' not in extended_attributes:
+ return None
+ includes.add('core/frame/UseCounter.h')
+ return extended_attributes['DeprecateAs']
+
+
+# [GarbageCollected], [WillBeGarbageCollected]
+def gc_type(definition):
+ extended_attributes = definition.extended_attributes
+ if 'GarbageCollected' in extended_attributes:
+ return 'GarbageCollectedObject'
+ elif 'WillBeGarbageCollected' in extended_attributes:
+ return 'WillBeGarbageCollectedObject'
+ return 'RefCountedObject'
+
+
+# [ImplementedAs]
+def cpp_name(definition_or_member):
+ extended_attributes = definition_or_member.extended_attributes
+ if 'ImplementedAs' not in extended_attributes:
+ return definition_or_member.name
+ return extended_attributes['ImplementedAs']
+
+
+# [MeasureAs]
+def measure_as(definition_or_member):
+ extended_attributes = definition_or_member.extended_attributes
+ if 'MeasureAs' not in extended_attributes:
+ return None
+ includes.add('core/frame/UseCounter.h')
+ return extended_attributes['MeasureAs']
+
+
+# [PerContextEnabled]
+def per_context_enabled_function_name(definition_or_member):
+ extended_attributes = definition_or_member.extended_attributes
+ if 'PerContextEnabled' not in extended_attributes:
+ return None
+ feature_name = extended_attributes['PerContextEnabled']
+ return 'ContextFeatures::%sEnabled' % uncapitalize(feature_name)
+
+
+# [RuntimeEnabled]
+def runtime_enabled_function_name(definition_or_member):
+ """Returns the name of the RuntimeEnabledFeatures function.
+
+ The returned function checks if a method/attribute is enabled.
+ Given extended attribute RuntimeEnabled=FeatureName, return:
+ RuntimeEnabledFeatures::{featureName}Enabled
+ """
+ extended_attributes = definition_or_member.extended_attributes
+ if 'RuntimeEnabled' not in extended_attributes:
+ return None
+ feature_name = extended_attributes['RuntimeEnabled']
+ return 'RuntimeEnabledFeatures::%sEnabled' % uncapitalize(feature_name)
+
+
+################################################################################
+# Dart Specific extended attributes
+################################################################################
+def dart_custom_method(extended_attributes):
+ return ('DartCustom' in extended_attributes and
+ extended_attribute_value_contains(extended_attributes['DartCustom'], 'New'))
« no previous file with comments | « bindings/scripts/v8_types.py ('k') | bindings/tests/idls/SVGTestInterface.idl » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698