OLD | NEW |
1 // Copyright 2016 The Chromium Authors. All rights reserved. | 1 // Copyright 2016 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 package translator | 5 package translator |
6 | 6 |
7 import ( | 7 import ( |
8 "fmt" | 8 "fmt" |
9 "log" | 9 "log" |
10 "sort" | 10 "sort" |
(...skipping 18 matching lines...) Expand all Loading... |
29 t.goTypeCache = map[string]string{} | 29 t.goTypeCache = map[string]string{} |
30 return t | 30 return t |
31 } | 31 } |
32 | 32 |
33 func (t *translator) TranslateMojomFile(fileName string) (tmplFile *TmplFile) { | 33 func (t *translator) TranslateMojomFile(fileName string) (tmplFile *TmplFile) { |
34 tmplFile = new(TmplFile) | 34 tmplFile = new(TmplFile) |
35 file := t.fileGraph.Files[fileName] | 35 file := t.fileGraph.Files[fileName] |
36 | 36 |
37 tmplFile.PackageName = fileNameToPackageName(fileName) | 37 tmplFile.PackageName = fileNameToPackageName(fileName) |
38 | 38 |
| 39 if file.DeclaredMojomObjects.Structs == nil { |
| 40 file.DeclaredMojomObjects.Structs = &[]string{} |
| 41 } |
39 tmplFile.Structs = make([]*StructTemplate, len(*file.DeclaredMojomObject
s.Structs)) | 42 tmplFile.Structs = make([]*StructTemplate, len(*file.DeclaredMojomObject
s.Structs)) |
40 for i, typeKey := range *file.DeclaredMojomObjects.Structs { | 43 for i, typeKey := range *file.DeclaredMojomObjects.Structs { |
41 tmplFile.Structs[i] = t.translateMojomStruct(typeKey) | 44 tmplFile.Structs[i] = t.translateMojomStruct(typeKey) |
42 } | 45 } |
43 | 46 |
| 47 if file.DeclaredMojomObjects.Unions == nil { |
| 48 file.DeclaredMojomObjects.Unions = &[]string{} |
| 49 } |
44 tmplFile.Unions = make([]*UnionTemplate, len(*file.DeclaredMojomObjects.
Unions)) | 50 tmplFile.Unions = make([]*UnionTemplate, len(*file.DeclaredMojomObjects.
Unions)) |
45 for i, typeKey := range *file.DeclaredMojomObjects.Unions { | 51 for i, typeKey := range *file.DeclaredMojomObjects.Unions { |
46 tmplFile.Unions[i] = t.translateMojomUnion(typeKey) | 52 tmplFile.Unions[i] = t.translateMojomUnion(typeKey) |
47 } | 53 } |
48 | 54 |
| 55 if file.DeclaredMojomObjects.TopLevelEnums == nil { |
| 56 file.DeclaredMojomObjects.TopLevelEnums = &[]string{} |
| 57 } |
| 58 if file.DeclaredMojomObjects.EmbeddedEnums == nil { |
| 59 file.DeclaredMojomObjects.EmbeddedEnums = &[]string{} |
| 60 } |
49 topLevelEnumsNum := len(*file.DeclaredMojomObjects.TopLevelEnums) | 61 topLevelEnumsNum := len(*file.DeclaredMojomObjects.TopLevelEnums) |
50 » enumNum := len(*file.DeclaredMojomObjects.EmbeddedEnums) + topLevelEnums
Num | 62 » embeddedEnumsNum := len(*file.DeclaredMojomObjects.EmbeddedEnums) |
| 63 » enumNum := embeddedEnumsNum + topLevelEnumsNum |
51 tmplFile.Enums = make([]*EnumTemplate, enumNum) | 64 tmplFile.Enums = make([]*EnumTemplate, enumNum) |
52 for i, typeKey := range *file.DeclaredMojomObjects.TopLevelEnums { | 65 for i, typeKey := range *file.DeclaredMojomObjects.TopLevelEnums { |
53 tmplFile.Enums[i] = t.translateMojomEnum(typeKey) | 66 tmplFile.Enums[i] = t.translateMojomEnum(typeKey) |
54 } | 67 } |
55 | |
56 for i, typeKey := range *file.DeclaredMojomObjects.EmbeddedEnums { | 68 for i, typeKey := range *file.DeclaredMojomObjects.EmbeddedEnums { |
57 tmplFile.Enums[i+topLevelEnumsNum] = t.translateMojomEnum(typeKe
y) | 69 tmplFile.Enums[i+topLevelEnumsNum] = t.translateMojomEnum(typeKe
y) |
58 } | 70 } |
59 | 71 |
| 72 if file.DeclaredMojomObjects.Interfaces == nil { |
| 73 file.DeclaredMojomObjects.Interfaces = &[]string{} |
| 74 } |
60 tmplFile.Interfaces = make([]*InterfaceTemplate, len(*file.DeclaredMojom
Objects.Interfaces)) | 75 tmplFile.Interfaces = make([]*InterfaceTemplate, len(*file.DeclaredMojom
Objects.Interfaces)) |
61 for i, typeKey := range *file.DeclaredMojomObjects.Interfaces { | 76 for i, typeKey := range *file.DeclaredMojomObjects.Interfaces { |
62 tmplFile.Interfaces[i] = t.translateMojomInterface(typeKey) | 77 tmplFile.Interfaces[i] = t.translateMojomInterface(typeKey) |
63 } | 78 } |
64 | 79 |
65 tmplFile.Imports = []Import{ | 80 tmplFile.Imports = []Import{ |
66 Import{PackagePath: "mojo/public/go/bindings", PackageName: "bin
dings"}, | 81 Import{PackagePath: "mojo/public/go/bindings", PackageName: "bin
dings"}, |
67 Import{PackagePath: "fmt", PackageName: "fmt"}, | 82 Import{PackagePath: "fmt", PackageName: "fmt"}, |
68 Import{PackagePath: "sort", PackageName: "sort"}, | 83 Import{PackagePath: "sort", PackageName: "sort"}, |
69 } | 84 } |
(...skipping 117 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
187 return m | 202 return m |
188 } | 203 } |
189 | 204 |
190 func (t *translator) translateMojomMethod(mojomMethod mojom_types.MojomMethod, i
nterfaceTemplate *InterfaceTemplate) (m *MethodTemplate) { | 205 func (t *translator) translateMojomMethod(mojomMethod mojom_types.MojomMethod, i
nterfaceTemplate *InterfaceTemplate) (m *MethodTemplate) { |
191 m = new(MethodTemplate) | 206 m = new(MethodTemplate) |
192 m.Interface = interfaceTemplate | 207 m.Interface = interfaceTemplate |
193 m.MethodName = formatName(*mojomMethod.DeclData.ShortName) | 208 m.MethodName = formatName(*mojomMethod.DeclData.ShortName) |
194 m.FullName = fmt.Sprintf("%s_%s", interfaceTemplate.PrivateName, m.Metho
dName) | 209 m.FullName = fmt.Sprintf("%s_%s", interfaceTemplate.PrivateName, m.Metho
dName) |
195 m.Params = *t.translateMojomStructObject(mojomMethod.Parameters) | 210 m.Params = *t.translateMojomStructObject(mojomMethod.Parameters) |
196 m.Params.Name = fmt.Sprintf("%s_Params", m.FullName) | 211 m.Params.Name = fmt.Sprintf("%s_Params", m.FullName) |
197 » m.ResponseParams = t.translateMojomStructObject(*mojomMethod.ResponsePar
ams) | 212 » m.Params.PrivateName = privateName(m.Params.Name) |
198 » m.ResponseParams.Name = fmt.Sprintf("%s_ResponseParams", m.FullName) | 213 » if mojomMethod.ResponseParams != nil { |
| 214 » » m.ResponseParams = t.translateMojomStructObject(*mojomMethod.Res
ponseParams) |
| 215 » » m.ResponseParams.Name = fmt.Sprintf("%s_ResponseParams", m.FullN
ame) |
| 216 » » m.ResponseParams.PrivateName = privateName(m.ResponseParams.Name
) |
| 217 » } |
199 return m | 218 return m |
200 } | 219 } |
201 | 220 |
202 //////////////////////////////////////////////////////////////////////////////// | 221 //////////////////////////////////////////////////////////////////////////////// |
203 | 222 |
204 // Implements sort.Interface. | 223 // Implements sort.Interface. |
205 type structFieldSerializationSorter []mojom_types.StructField | 224 type structFieldSerializationSorter []mojom_types.StructField |
206 | 225 |
207 func (s structFieldSerializationSorter) Len() int { | 226 func (s structFieldSerializationSorter) Len() int { |
208 return len(s) | 227 return len(s) |
209 } | 228 } |
210 | 229 |
211 func (s structFieldSerializationSorter) Less(i, j int) bool { | 230 func (s structFieldSerializationSorter) Less(i, j int) bool { |
212 if s[i].Offset < s[j].Offset { | 231 if s[i].Offset < s[j].Offset { |
213 return true | 232 return true |
214 } | 233 } |
215 | 234 |
216 if s[i].Offset == s[j].Offset && s[i].Bit < s[j].Bit { | 235 if s[i].Offset == s[j].Offset && s[i].Bit < s[j].Bit { |
217 return true | 236 return true |
218 } | 237 } |
219 | 238 |
220 return false | 239 return false |
221 } | 240 } |
222 | 241 |
223 func (s structFieldSerializationSorter) Swap(i, j int) { | 242 func (s structFieldSerializationSorter) Swap(i, j int) { |
224 s[i], s[j] = s[j], s[i] | 243 s[i], s[j] = s[j], s[i] |
225 } | 244 } |
OLD | NEW |