Index: client/dom/scripts/systemnative.py |
diff --git a/client/dom/scripts/systemnative.py b/client/dom/scripts/systemnative.py |
index ae75dbcd8e242f543647c188a025c78718820206..83205270ed053a302de731f9153082f7d31836cb 100644 |
--- a/client/dom/scripts/systemnative.py |
+++ b/client/dom/scripts/systemnative.py |
@@ -59,6 +59,7 @@ class NativeImplementationSystem(System): |
dart_interface_path = self._FilePathForDartInterface(self._interface.id) |
self._dom_public_files.append(dart_interface_path) |
+ cpp_impl_includes = {} |
cpp_header_handlers_emitter = emitter.Emitter() |
cpp_impl_handlers_emitter = emitter.Emitter() |
class_name = 'Dart%s' % self._interface.id |
@@ -77,6 +78,8 @@ class NativeImplementationSystem(System): |
parameters.append('%s %s' % (argument_type_info.parameter_type(), |
argument.id)) |
arguments.append(argument.id) |
+ if argument_type_info.conversion_include(): |
+ cpp_impl_includes[argument_type_info.conversion_include()] = 1 |
antonm
2012/03/01 14:25:31
why it's map? should we assign 1 or None?
podivilov
2012/03/01 15:36:56
Done.
|
cpp_header_handlers_emitter.Emit( |
'\n' |
@@ -107,6 +110,7 @@ class NativeImplementationSystem(System): |
cpp_impl_emitter = self._emitters.FileEmitter(cpp_impl_path) |
cpp_impl_emitter.Emit( |
self._templates.Load('cpp_callback_implementation.template'), |
+ INCLUDES=_GenerateCPPIncludes(cpp_impl_includes.keys()), |
INTERFACE=self._interface.id, |
HANDLERS=cpp_impl_handlers_emitter.Fragments()) |
@@ -160,21 +164,24 @@ class NativeImplementationSystem(System): |
INCLUDES=includes_emitter.Fragments(), |
RESOLVER_BODY=resolver_body_emitter.Fragments()) |
- # Generate DartDerivedSourcesAll.cpp |
- cpp_all_in_one_path = os.path.join(self._output_dir, |
- 'DartDerivedSourcesAll.cpp') |
+ # Generate DartDerivedSourcesXX.cpp. |
+ partitions = 20 # FIXME: this should be configurable. |
+ sources_count = len(self._cpp_impl_files) |
+ for i in range(0, partitions): |
+ cpp_all_in_one_path = os.path.join(self._output_dir, |
antonm
2012/03/01 14:25:31
cpp_all_in_one is now misleading
|
+ 'DartDerivedSources%02i.cpp' % (i + 1)) |
- includes_emitter = emitter.Emitter() |
- for file in self._cpp_impl_files: |
- path = os.path.relpath(file, os.path.dirname(cpp_all_in_one_path)) |
- includes_emitter.Emit('#include "$PATH"\n', PATH=path) |
+ includes_emitter = emitter.Emitter() |
+ for j in range(i * sources_count / partitions, (i + 1) * sources_count / partitions): |
antonm
2012/03/01 14:25:31
for impl_file in self._cpp_impl_files[i * sources_
podivilov
2012/03/01 15:36:56
nice!
|
+ path = os.path.relpath(self._cpp_impl_files[j], os.path.dirname(cpp_all_in_one_path)) |
+ includes_emitter.Emit('#include "$PATH"\n', PATH=path) |
- cpp_all_in_one_emitter = self._emitters.FileEmitter(cpp_all_in_one_path) |
- cpp_all_in_one_emitter.Emit( |
- self._templates.Load('cpp_all_in_one.template'), |
- INCLUDES=includes_emitter.Fragments()) |
+ cpp_all_in_one_emitter = self._emitters.FileEmitter(cpp_all_in_one_path) |
+ cpp_all_in_one_emitter.Emit( |
+ self._templates.Load('cpp_all_in_one.template'), |
+ INCLUDES=includes_emitter.Fragments()) |
- # Generate DartResolver.cpp |
+ # Generate DartResolver.cpp. |
cpp_resolver_path = os.path.join(self._output_dir, 'DartResolver.cpp') |
includes_emitter = emitter.Emitter() |
@@ -288,6 +295,7 @@ class NativeImplementationGenerator(systemwrapping.WrappingInterfaceGenerator): |
' goto fail;\n' |
' }\n' |
' Document* document = domWindow->document();\n') |
+ self._cpp_impl_includes['DOMWindow'] = 1 |
arguments.append('document') |
create_function = 'createForJSConstructor' |
if 'CallWith' in self._interface.ext_attrs: |
@@ -336,17 +344,12 @@ class NativeImplementationGenerator(systemwrapping.WrappingInterfaceGenerator): |
self._cpp_impl_emitter.Emit( |
self._templates.Load('cpp_implementation.template'), |
INTERFACE=self._interface.id, |
- INCLUDES=''.join(['#include "%s.h"\n' % |
- k for k in self._cpp_impl_includes.keys()]), |
+ INCLUDES=_GenerateCPPIncludes(self._cpp_impl_includes.keys()), |
CALLBACKS=self._cpp_definitions_emitter.Fragments(), |
RESOLVER=self._cpp_resolver_emitter.Fragments()) |
def _GenerateCppHeader(self): |
- webcore_include = self._interface_type_info.webcore_include() |
- if webcore_include: |
- webcore_include = '#include "%s.h"\n' % webcore_include |
- else: |
- webcore_include = '' |
+ webcore_includes = _GenerateCPPIncludes(self._interface_type_info.webcore_includes()) |
if ('CustomToJS' in self._interface.ext_attrs or |
'CustomToJSObject' in self._interface.ext_attrs or |
@@ -370,8 +373,7 @@ class NativeImplementationGenerator(systemwrapping.WrappingInterfaceGenerator): |
self._cpp_header_emitter.Emit( |
self._templates.Load('cpp_header.template'), |
INTERFACE=self._interface.id, |
- WEBCORE_INCLUDE=webcore_include, |
- ADDITIONAL_INCLUDES='', |
+ WEBCORE_INCLUDES=webcore_includes, |
WEBCORE_CLASS_NAME=self._interface_type_info.native_type(), |
TO_DART_VALUE=to_dart_value_emitter.Fragments(), |
DECLARATIONS=self._cpp_declarations_emitter.Fragments()) |
@@ -790,3 +792,6 @@ class NativeImplementationGenerator(systemwrapping.WrappingInterfaceGenerator): |
return emitter.Format(invocation_template, |
FUNCTION_CALL='%s(%s)' % (function_expression, ', '.join(arguments))) |
+ |
+def _GenerateCPPIncludes(includes): |
+ return ''.join(['#include "%s.h"\n' % i for i in includes]) |
antonm
2012/03/01 14:25:31
nit: i is usually for index :)
podivilov
2012/03/01 15:36:56
Done.
|