Index: client/dom/scripts/systemnative.py |
diff --git a/client/dom/scripts/systemnative.py b/client/dom/scripts/systemnative.py |
index e51aff3d46f99d23f313b6ec0bc4360ca135933d..b43ea930d01d53dbf32e8e91d61ea312de49eea1 100644 |
--- a/client/dom/scripts/systemnative.py |
+++ b/client/dom/scripts/systemnative.py |
@@ -12,6 +12,15 @@ import systemwrapping |
from generator import * |
from systembase import * |
+ |
+_cpp_keywords = set(['default', 'operator']) |
+ |
+def CppSafeName(name): |
+ """Returns version of name safe for use in cpp code, i.e. not a keyword.""" |
+ if name in _cpp_keywords: |
+ return '_' + name |
+ return name |
+ |
class NativeImplementationSystem(System): |
def __init__(self, templates, database, emitters, auxiliary_dir, output_dir): |
@@ -280,8 +289,10 @@ class NativeImplementationGenerator(systemwrapping.WrappingInterfaceGenerator): |
# Process constructor arguments. |
for (i, arg) in enumerate(constructor_info.idl_args): |
- self._GenerateParameterAdapter(parameter_definitions_emitter, arg, i - 1) |
- arguments.append(arg.id) |
+ cpp_arg_name = CppSafeName(arg.id) |
+ self._GenerateParameterAdapter( |
+ parameter_definitions_emitter, arg, cpp_arg_name, i - 1) |
+ arguments.append(cpp_arg_name) |
function_expression = '%s::%s' % (self._interface_type_info.native_type(), create_function) |
invocation = self._GenerateWebCoreInvocation(function_expression, arguments, |
@@ -373,7 +384,8 @@ class NativeImplementationGenerator(systemwrapping.WrappingInterfaceGenerator): |
def _AddGetter(self, attr): |
type_info = GetIDLTypeInfo(attr.type.id) |
- dart_declaration = '%s get %s()' % (type_info.dart_type(), attr.id) |
+ dart_declaration = '%s get %s()' % ( |
+ type_info.dart_type(), DartDomNameOfAttribute(attr)) |
is_custom = 'Custom' in attr.ext_attrs or 'CustomGetter' in attr.ext_attrs |
cpp_callback_name = self._GenerateNativeBinding(attr.id, 1, |
dart_declaration, 'Getter', is_custom) |
@@ -390,14 +402,13 @@ class NativeImplementationGenerator(systemwrapping.WrappingInterfaceGenerator): |
webcore_function_name = 'getURLAttribute' |
arguments.append(self._GenerateWebCoreReflectionAttributeName(attr)) |
else: |
- if attr.id == 'operator': |
- webcore_function_name = '_operator' |
- elif attr.id == 'target' and attr.type.id == 'SVGAnimatedString': |
+ webcore_function_name = CppSafeName(attr.id) |
+ if attr.id == 'target' and attr.type.id == 'SVGAnimatedString': |
webcore_function_name = 'svgTarget' |
else: |
webcore_function_name = re.sub(r'^(HTML|URL|JS|XML|XSLT|\w)', |
lambda s: s.group(1).lower(), |
- attr.id) |
+ webcore_function_name) |
webcore_function_name = re.sub(r'^(create|exclusive)', |
lambda s: 'is' + s.group(1).capitalize(), |
webcore_function_name) |
@@ -412,7 +423,8 @@ class NativeImplementationGenerator(systemwrapping.WrappingInterfaceGenerator): |
def _AddSetter(self, attr): |
type_info = GetIDLTypeInfo(attr.type.id) |
- dart_declaration = 'void set %s(%s)' % (attr.id, type_info.dart_type()) |
+ dart_declaration = 'void set %s(%s)' % ( |
+ DartDomNameOfAttribute(attr), type_info.dart_type()) |
is_custom = set(['Custom', 'CustomSetter', 'V8CustomSetter']) & set(attr.ext_attrs) |
cpp_callback_name = self._GenerateNativeBinding(attr.id, 2, |
dart_declaration, 'Setter', is_custom) |
@@ -431,10 +443,12 @@ class NativeImplementationGenerator(systemwrapping.WrappingInterfaceGenerator): |
if attr.type.id.startswith('SVGAnimated'): |
webcore_function_name += 'Animated' |
- arguments.append(attr.id) |
+ cpp_arg_name = CppSafeName(attr.id) |
sra1
2012/03/13 02:41:27
This is how the attribute called default gets conv
|
+ arguments.append(cpp_arg_name) |
parameter_definitions_emitter = emitter.Emitter() |
- self._GenerateParameterAdapter(parameter_definitions_emitter, attr, 0) |
+ self._GenerateParameterAdapter( |
+ parameter_definitions_emitter, attr, cpp_arg_name, 0) |
parameter_definitions = parameter_definitions_emitter.Fragments() |
function_expression = self._GenerateWebCoreFunctionExpression(webcore_function_name, attr) |
@@ -571,12 +585,16 @@ class NativeImplementationGenerator(systemwrapping.WrappingInterfaceGenerator): |
# Process Dart arguments. |
for (i, argument) in enumerate(operation.arguments): |
- if i == len(operation.arguments) - 1 and self._interface.id == 'Console' and argument.id == 'arg': |
+ if (i == len(operation.arguments) - 1 and |
+ self._interface.id == 'Console' and |
+ argument.id == 'arg'): |
# FIXME: we are skipping last argument here because it was added in |
# supplemental dart.idl. Cleanup dart.idl and remove this check. |
break |
- self._GenerateParameterAdapter(parameter_definitions_emitter, argument, i) |
- arguments.append(argument.id) |
+ cpp_arg_name = CppSafeName(argument.id) |
+ self._GenerateParameterAdapter( |
+ parameter_definitions_emitter, argument, cpp_arg_name, i) |
+ arguments.append(cpp_arg_name) |
if operation.id in ['addEventListener', 'removeEventListener']: |
# addEventListener's and removeEventListener's last argument is marked |
@@ -640,14 +658,15 @@ class NativeImplementationGenerator(systemwrapping.WrappingInterfaceGenerator): |
CALLBACK_NAME=callback_name, |
BODY=body) |
- def _GenerateParameterAdapter(self, emitter, idl_argument, index): |
- type_info = GetIDLTypeInfo(idl_argument.type.id) |
+ def _GenerateParameterAdapter(self, emitter, idl_node, name, index): |
+ """idl_node is IDLArgument or IDLAttribute.""" |
+ type_info = GetIDLTypeInfo(idl_node.type.id) |
(adapter_type, include_name) = type_info.parameter_adapter_info() |
if include_name: |
self._cpp_impl_includes.add(include_name) |
flags = '' |
- if (idl_argument.ext_attrs.get('Optional') == 'DefaultIsNullString' or |
- 'RequiredCppParameter' in idl_argument.ext_attrs): |
+ if (idl_node.ext_attrs.get('Optional') == 'DefaultIsNullString' or |
+ 'RequiredCppParameter' in idl_node.ext_attrs): |
flags = ', DartUtilities::ConvertNullToDefaultValue' |
emitter.Emit( |
'\n' |
@@ -657,7 +676,7 @@ class NativeImplementationGenerator(systemwrapping.WrappingInterfaceGenerator): |
' goto fail;\n' |
' }\n', |
ADAPTER_TYPE=adapter_type, |
- NAME=idl_argument.id, |
+ NAME=name, |
INDEX=index + 1, |
FLAGS=flags) |