| 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 |