| 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" |
| 11 | 11 |
| 12 "mojom/generated/mojom_files" | 12 "mojom/generated/mojom_files" |
| 13 "mojom/generated/mojom_types" | 13 "mojom/generated/mojom_types" |
| 14 "mojom/generators/common" |
| 14 ) | 15 ) |
| 15 | 16 |
| 16 type Translator interface { | 17 type Translator interface { |
| 17 TranslateMojomFile(fileName string) *TmplFile | 18 TranslateMojomFile(fileName string) *TmplFile |
| 18 } | 19 } |
| 19 | 20 |
| 20 type translator struct { | 21 type translator struct { |
| 21 fileGraph *mojom_files.MojomFileGraph | 22 fileGraph *mojom_files.MojomFileGraph |
| 22 // goTypeCache maps type keys to go type strings. | 23 // goTypeCache maps type keys to go type strings. |
| 23 » goTypeCache map[string]string | 24 » goTypeCache map[string]string |
| 25 » imports map[string]string |
| 26 » currentFileName string |
| 27 » Config common.GeneratorConfig |
| 24 } | 28 } |
| 25 | 29 |
| 26 func NewTranslator(fileGraph *mojom_files.MojomFileGraph) (t *translator) { | 30 func NewTranslator(fileGraph *mojom_files.MojomFileGraph) (t *translator) { |
| 27 t = new(translator) | 31 t = new(translator) |
| 28 t.fileGraph = fileGraph | 32 t.fileGraph = fileGraph |
| 29 t.goTypeCache = map[string]string{} | 33 t.goTypeCache = map[string]string{} |
| 30 return t | 34 return t |
| 31 } | 35 } |
| 32 | 36 |
| 33 func (t *translator) TranslateMojomFile(fileName string) (tmplFile *TmplFile) { | 37 func (t *translator) TranslateMojomFile(fileName string) (tmplFile *TmplFile) { |
| 38 t.currentFileName = fileName |
| 39 t.imports = map[string]string{} |
| 40 |
| 34 tmplFile = new(TmplFile) | 41 tmplFile = new(TmplFile) |
| 35 file := t.fileGraph.Files[fileName] | 42 file := t.fileGraph.Files[fileName] |
| 36 | 43 |
| 37 tmplFile.PackageName = fileNameToPackageName(fileName) | 44 tmplFile.PackageName = fileNameToPackageName(fileName) |
| 38 | 45 |
| 39 if file.DeclaredMojomObjects.Structs == nil { | 46 if file.DeclaredMojomObjects.Structs == nil { |
| 40 file.DeclaredMojomObjects.Structs = &[]string{} | 47 file.DeclaredMojomObjects.Structs = &[]string{} |
| 41 } | 48 } |
| 42 tmplFile.Structs = make([]*StructTemplate, len(*file.DeclaredMojomObject
s.Structs)) | 49 tmplFile.Structs = make([]*StructTemplate, len(*file.DeclaredMojomObject
s.Structs)) |
| 43 for i, typeKey := range *file.DeclaredMojomObjects.Structs { | 50 for i, typeKey := range *file.DeclaredMojomObjects.Structs { |
| (...skipping 31 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 75 tmplFile.Interfaces = make([]*InterfaceTemplate, len(*file.DeclaredMojom
Objects.Interfaces)) | 82 tmplFile.Interfaces = make([]*InterfaceTemplate, len(*file.DeclaredMojom
Objects.Interfaces)) |
| 76 for i, typeKey := range *file.DeclaredMojomObjects.Interfaces { | 83 for i, typeKey := range *file.DeclaredMojomObjects.Interfaces { |
| 77 tmplFile.Interfaces[i] = t.translateMojomInterface(typeKey) | 84 tmplFile.Interfaces[i] = t.translateMojomInterface(typeKey) |
| 78 } | 85 } |
| 79 | 86 |
| 80 tmplFile.Imports = []Import{ | 87 tmplFile.Imports = []Import{ |
| 81 Import{PackagePath: "mojo/public/go/bindings", PackageName: "bin
dings"}, | 88 Import{PackagePath: "mojo/public/go/bindings", PackageName: "bin
dings"}, |
| 82 Import{PackagePath: "fmt", PackageName: "fmt"}, | 89 Import{PackagePath: "fmt", PackageName: "fmt"}, |
| 83 Import{PackagePath: "sort", PackageName: "sort"}, | 90 Import{PackagePath: "sort", PackageName: "sort"}, |
| 84 } | 91 } |
| 92 |
| 93 for pkgName, pkgPath := range t.imports { |
| 94 tmplFile.Imports = append( |
| 95 tmplFile.Imports, |
| 96 Import{PackagePath: pkgPath, PackageName: pkgName}, |
| 97 ) |
| 98 } |
| 85 return tmplFile | 99 return tmplFile |
| 86 } | 100 } |
| 87 | 101 |
| 88 func (t *translator) GetUserDefinedType(typeKey string) (mojomType mojom_types.U
serDefinedType) { | 102 func (t *translator) GetUserDefinedType(typeKey string) (mojomType mojom_types.U
serDefinedType) { |
| 89 return t.fileGraph.ResolvedTypes[typeKey] | 103 return t.fileGraph.ResolvedTypes[typeKey] |
| 90 } | 104 } |
| 91 | 105 |
| 92 func (t *translator) translateMojomStruct(typeKey string) (m *StructTemplate) { | 106 func (t *translator) translateMojomStruct(typeKey string) (m *StructTemplate) { |
| 93 m = new(StructTemplate) | 107 m = new(StructTemplate) |
| 94 u := t.GetUserDefinedType(typeKey) | 108 u := t.GetUserDefinedType(typeKey) |
| (...skipping 140 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 235 if s[i].Offset == s[j].Offset && s[i].Bit < s[j].Bit { | 249 if s[i].Offset == s[j].Offset && s[i].Bit < s[j].Bit { |
| 236 return true | 250 return true |
| 237 } | 251 } |
| 238 | 252 |
| 239 return false | 253 return false |
| 240 } | 254 } |
| 241 | 255 |
| 242 func (s structFieldSerializationSorter) Swap(i, j int) { | 256 func (s structFieldSerializationSorter) Swap(i, j int) { |
| 243 s[i], s[j] = s[j], s[i] | 257 s[i], s[j] = s[j], s[i] |
| 244 } | 258 } |
| OLD | NEW |