| OLD | NEW |
| 1 # Copyright (c) 2012 The Chromium Authors. All rights reserved. | 1 # Copyright (c) 2012 The Chromium Authors. All rights reserved. |
| 2 # Use of this source code is governed by a BSD-style license that can be | 2 # Use of this source code is governed by a BSD-style license that can be |
| 3 # found in the LICENSE file. | 3 # found in the LICENSE file. |
| 4 | 4 |
| 5 from code import Code | 5 from code import Code |
| 6 from model import PropertyType, Type | 6 from model import PropertyType, Type |
| 7 import cpp_util | 7 import cpp_util |
| 8 import model | 8 import model |
| 9 import schema_util | 9 import schema_util |
| 10 import sys | 10 import sys |
| 11 import util_cc_helper | 11 import util_cc_helper |
| 12 | 12 |
| 13 class CCGenerator(object): | 13 class CCGenerator(object): |
| 14 def __init__(self, type_generator, cpp_namespace): |
| 15 self._type_generator = type_generator |
| 16 self._cpp_namespace = cpp_namespace |
| 17 |
| 18 def Generate(self, namespace): |
| 19 return _Generator(namespace, |
| 20 self._type_generator, |
| 21 self._cpp_namespace).Generate() |
| 22 |
| 23 class _Generator(object): |
| 14 """A .cc generator for a namespace. | 24 """A .cc generator for a namespace. |
| 15 """ | 25 """ |
| 16 def __init__(self, namespace, cpp_type_generator): | 26 def __init__(self, namespace, cpp_type_generator, cpp_namespace): |
| 27 self._namespace = namespace |
| 17 self._type_helper = cpp_type_generator | 28 self._type_helper = cpp_type_generator |
| 18 self._namespace = namespace | 29 self._cpp_namespace = cpp_namespace |
| 19 self._target_namespace = ( | 30 self._target_namespace = ( |
| 20 self._type_helper.GetCppNamespaceName(self._namespace)) | 31 self._type_helper.GetCppNamespaceName(self._namespace)) |
| 21 self._util_cc_helper = ( | 32 self._util_cc_helper = ( |
| 22 util_cc_helper.UtilCCHelper(self._type_helper)) | 33 util_cc_helper.UtilCCHelper(self._type_helper)) |
| 23 | 34 |
| 24 def Generate(self): | 35 def Generate(self): |
| 25 """Generates a Code object with the .cc for a single namespace. | 36 """Generates a Code object with the .cc for a single namespace. |
| 26 """ | 37 """ |
| 27 c = Code() | 38 c = Code() |
| 28 (c.Append(cpp_util.CHROMIUM_LICENSE) | 39 (c.Append(cpp_util.CHROMIUM_LICENSE) |
| 29 .Append() | 40 .Append() |
| 30 .Append(cpp_util.GENERATED_FILE_MESSAGE % self._namespace.source_file) | 41 .Append(cpp_util.GENERATED_FILE_MESSAGE % self._namespace.source_file) |
| 31 .Append() | 42 .Append() |
| 32 .Append(self._util_cc_helper.GetIncludePath()) | 43 .Append(self._util_cc_helper.GetIncludePath()) |
| 33 .Append('#include "base/json/json_writer.h"') | 44 .Append('#include "base/json/json_writer.h"') |
| 34 .Append('#include "base/logging.h"') | 45 .Append('#include "base/logging.h"') |
| 35 .Append('#include "base/string_number_conversions.h"') | 46 .Append('#include "base/string_number_conversions.h"') |
| 36 .Append('#include "%s/%s.h"' % | 47 .Append('#include "%s/%s.h"' % |
| 37 (self._namespace.source_file_dir, self._namespace.unix_name)) | 48 (self._namespace.source_file_dir, self._namespace.unix_name)) |
| 38 .Cblock(self._type_helper.GenerateIncludes(include_soft=True)) | 49 .Cblock(self._type_helper.GenerateIncludes(include_soft=True)) |
| 39 .Concat(self._type_helper.GetRootNamespaceStart()) | 50 .Concat(cpp_util.OpenNamespace(self._cpp_namespace)) |
| 40 .Cblock(self._type_helper.GetNamespaceStart()) | 51 .Cblock(self._type_helper.GetNamespaceStart()) |
| 41 ) | 52 ) |
| 42 if self._namespace.properties: | 53 if self._namespace.properties: |
| 43 (c.Append('//') | 54 (c.Append('//') |
| 44 .Append('// Properties') | 55 .Append('// Properties') |
| 45 .Append('//') | 56 .Append('//') |
| 46 .Append() | 57 .Append() |
| 47 ) | 58 ) |
| 48 for property in self._namespace.properties.values(): | 59 for property in self._namespace.properties.values(): |
| 49 property_code = self._type_helper.GeneratePropertyValues( | 60 property_code = self._type_helper.GeneratePropertyValues( |
| (...skipping 19 matching lines...) Expand all Loading... |
| 69 c.Cblock(self._GenerateFunction(function)) | 80 c.Cblock(self._GenerateFunction(function)) |
| 70 if self._namespace.events: | 81 if self._namespace.events: |
| 71 (c.Append('//') | 82 (c.Append('//') |
| 72 .Append('// Events') | 83 .Append('// Events') |
| 73 .Append('//') | 84 .Append('//') |
| 74 .Append() | 85 .Append() |
| 75 ) | 86 ) |
| 76 for event in self._namespace.events.values(): | 87 for event in self._namespace.events.values(): |
| 77 c.Cblock(self._GenerateEvent(event)) | 88 c.Cblock(self._GenerateEvent(event)) |
| 78 (c.Concat(self._type_helper.GetNamespaceEnd()) | 89 (c.Concat(self._type_helper.GetNamespaceEnd()) |
| 79 .Cblock(self._type_helper.GetRootNamespaceEnd()) | 90 .Cblock(cpp_util.CloseNamespace(self._cpp_namespace)) |
| 80 ) | 91 ) |
| 81 return c | 92 return c |
| 82 | 93 |
| 83 def _GenerateType(self, cpp_namespace, type_): | 94 def _GenerateType(self, cpp_namespace, type_): |
| 84 """Generates the function definitions for a type. | 95 """Generates the function definitions for a type. |
| 85 """ | 96 """ |
| 86 classname = cpp_util.Classname(schema_util.StripNamespace(type_.name)) | 97 classname = cpp_util.Classname(schema_util.StripNamespace(type_.name)) |
| 87 c = Code() | 98 c = Code() |
| 88 | 99 |
| 89 if type_.functions: | 100 if type_.functions: |
| (...skipping 712 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 802 """ | 813 """ |
| 803 c = Code() | 814 c = Code() |
| 804 underlying_type = self._type_helper.FollowRef(prop.type_) | 815 underlying_type = self._type_helper.FollowRef(prop.type_) |
| 805 if (underlying_type.property_type == PropertyType.ENUM and | 816 if (underlying_type.property_type == PropertyType.ENUM and |
| 806 prop.optional): | 817 prop.optional): |
| 807 c.Append('%s->%s = %s;' % ( | 818 c.Append('%s->%s = %s;' % ( |
| 808 dst, | 819 dst, |
| 809 prop.unix_name, | 820 prop.unix_name, |
| 810 self._type_helper.GetEnumNoneValue(prop.type_))) | 821 self._type_helper.GetEnumNoneValue(prop.type_))) |
| 811 return c | 822 return c |
| OLD | NEW |