| Index: sdk/lib/html/scripts/generator.py
|
| diff --git a/sdk/lib/html/scripts/generator.py b/sdk/lib/html/scripts/generator.py
|
| index 89913d2000dd4528423e9e93add3d19c0f90c7e1..1b4a1842996e0da68cb88162a6860252840fe306 100644
|
| --- a/sdk/lib/html/scripts/generator.py
|
| +++ b/sdk/lib/html/scripts/generator.py
|
| @@ -305,7 +305,12 @@ class OperationInfo(object):
|
| is named, e.g. 'fromList' in Int8Array.fromList(list).
|
| type_name: A string, the name of the return type of the operation.
|
| param_infos: A list of ParamInfo.
|
| + factory_parameters: A list of parameters used for custom designed Factory
|
| + calls.
|
| """
|
| +
|
| + def __init__(self):
|
| + self.factory_parameters = None
|
|
|
| def ParametersDeclaration(self, rename_type, force_optional=False):
|
| def FormatParam(param):
|
| @@ -356,11 +361,18 @@ class OperationInfo(object):
|
| def ConstructorFactoryName(self, rename_type):
|
| return 'create' + self._ConstructorFullName(rename_type).replace('.', '_')
|
|
|
| - def GenerateFactoryInvocation(self, rename_type, emitter, factory_provider):
|
| + def GenerateFactoryInvocation(self, rename_type, emitter, factory_name,
|
| + factory_constructor_name=None, factory_parameters=None):
|
| has_optional = any(param_info.is_optional
|
| for param_info in self.param_infos)
|
|
|
| - factory_name = self.ConstructorFactoryName(rename_type)
|
| + if not factory_constructor_name:
|
| + factory_constructor_name = self.ConstructorFactoryName(rename_type)
|
| + factory_parameters = self.ParametersAsArgumentList()
|
| + has_factory_provider = True
|
| + else:
|
| + factory_parameters = ', '.join(factory_parameters)
|
| + has_factory_provider = False
|
| if not has_optional:
|
| emitter.Emit(
|
| '\n'
|
| @@ -368,11 +380,19 @@ class OperationInfo(object):
|
| '$FACTORY.$CTOR_FACTORY_NAME($FACTORY_PARAMS);\n',
|
| CTOR=self._ConstructorFullName(rename_type),
|
| PARAMS=self.ParametersDeclaration(rename_type),
|
| - FACTORY=factory_provider,
|
| - CTOR_FACTORY_NAME=factory_name,
|
| - FACTORY_PARAMS=self.ParametersAsArgumentList())
|
| + FACTORY=factory_name,
|
| + CTOR_FACTORY_NAME=factory_constructor_name,
|
| + FACTORY_PARAMS=factory_parameters)
|
| return
|
| + if has_factory_provider:
|
| + self._GenerateFactoryOptParams(rename_type, emitter, factory_name)
|
| + else:
|
| + self._GenerateFactoryOptParamsWithoutFactoryProvider(rename_type, emitter,
|
| + factory_name, factory_constructor_name, factory_parameters)
|
|
|
| + def _GenerateFactoryOptParams(self, rename_type, emitter, factory_provider):
|
| + """Helper method for creating generic factory constructors with optional
|
| + parameters that use factory providers."""
|
| dispatcher_emitter = emitter.Emit(
|
| '\n'
|
| ' factory $CTOR($PARAMS) {\n'
|
| @@ -382,7 +402,7 @@ class OperationInfo(object):
|
| CTOR=self._ConstructorFullName(rename_type),
|
| PARAMS=self.ParametersDeclaration(rename_type),
|
| FACTORY=factory_provider,
|
| - CTOR_FACTORY_NAME=factory_name,
|
| + CTOR_FACTORY_NAME=self.ConstructorFactoryName(rename_type),
|
| FACTORY_PARAMS=self.ParametersAsArgumentList())
|
|
|
| # If we have optional parameters, check to see if they are set
|
| @@ -394,12 +414,34 @@ class OperationInfo(object):
|
| ' }\n',
|
| OPT_PARAM_NAME=self.param_infos[index].name,
|
| FACTORY=factory_provider,
|
| - CTOR_FACTORY_NAME=factory_name,
|
| + CTOR_FACTORY_NAME=self.ConstructorFactoryName(rename_type),
|
| FACTORY_PARAMS=self.ParametersAsArgumentList(index))
|
|
|
| for index, param_info in enumerate(self.param_infos):
|
| if param_info.is_optional:
|
| EmitOptionalParameterInvocation(index)
|
| +
|
| + def _GenerateFactoryOptParamsWithoutFactoryProvider(self, rename_type,
|
| + emitter, factory_name, factory_constructor_name, factory_parameters):
|
| + """Helper method for creating a factory constructor with optional
|
| + parameters that does not call a factory provider, it simply creates the
|
| + object itself. This is currently used for SVGElements and HTMLElements."""
|
| + inits = emitter.Emit(
|
| + '\n'
|
| + ' factory $CONSTRUCTOR($PARAMS) {\n'
|
| + ' var e = $FACTORY.$CTOR_FACTORY_NAME($FACTORY_PARAMS);\n'
|
| + '$!INITS'
|
| + ' return e;\n'
|
| + ' }\n',
|
| + CONSTRUCTOR=self._ConstructorFullName(rename_type),
|
| + FACTORY=factory_name,
|
| + CTOR_FACTORY_NAME=factory_constructor_name,
|
| + PARAMS=self.ParametersDeclaration(rename_type),
|
| + FACTORY_PARAMS=factory_parameters)
|
| + for index, param_info in enumerate(self.param_infos):
|
| + if param_info.is_optional:
|
| + inits.Emit(' if ($E != null) e.$E = $E;\n',
|
| + E=self.param_infos[index].name)
|
|
|
| def ConstantOutputOrder(a, b):
|
| """Canonical output ordering for constants."""
|
|
|