@@ -5,6 +5,7 @@ import io.kaitai.struct.datatype.DataType._
55import io .kaitai .struct .exprlang .Ast
66import io .kaitai .struct .problems .KSYParseError
77
8+ import scala .collection .immutable .SortedMap
89import scala .collection .mutable
910
1011/**
@@ -36,9 +37,9 @@ case class ClassSpec(
3637 toStringExpr : Option [Ast .expr],
3738 params : List [ParamDefSpec ],
3839 seq : List [AttrSpec ],
39- types : Map [String , ClassSpec ],
40- instances : Map [InstanceIdentifier , InstanceSpec ],
41- enums : Map [String , EnumSpec ]
40+ types : SortedMap [String , ClassSpec ],
41+ instances : SortedMap [InstanceIdentifier , InstanceSpec ],
42+ enums : SortedMap [String , EnumSpec ]
4243) extends ClassSpecLike with YAMLPath {
4344 var parentClass : ClassSpecLike = UnknownClassSpec
4445
@@ -154,20 +155,20 @@ object ClassSpec {
154155 case Some (value) => seqFromYaml(value, path ++ List (" seq" ), meta)
155156 case None => List ()
156157 }
157- val instances : Map [InstanceIdentifier , InstanceSpec ] = srcMap.get(" instances" ) match {
158+ val instances : SortedMap [InstanceIdentifier , InstanceSpec ] = srcMap.get(" instances" ) match {
158159 case Some (value) => instancesFromYaml(value, path ++ List (" instances" ), meta)
159- case None => Map ()
160+ case None => SortedMap ()
160161 }
161162
162163 checkDupMemberIds(params ++ seq ++ instances.values)
163164
164- val types : Map [String , ClassSpec ] = srcMap.get(" types" ) match {
165+ val types : SortedMap [String , ClassSpec ] = srcMap.get(" types" ) match {
165166 case Some (value) => typesFromYaml(value, fileName, path ++ List (" types" ), meta)
166- case None => Map ()
167+ case None => SortedMap ()
167168 }
168- val enums : Map [String , EnumSpec ] = srcMap.get(" enums" ) match {
169+ val enums : SortedMap [String , EnumSpec ] = srcMap.get(" enums" ) match {
169170 case Some (value) => enumsFromYaml(value, path ++ List (" enums" ))
170- case None => Map ()
171+ case None => SortedMap ()
171172 }
172173
173174 val cs = ClassSpec (
@@ -240,31 +241,37 @@ object ClassSpec {
240241 }
241242 }
242243
243- def typesFromYaml (src : Any , fileName : Option [String ], path : List [String ], metaDef : MetaSpec ): Map [String , ClassSpec ] = {
244+ def typesFromYaml (src : Any , fileName : Option [String ], path : List [String ], metaDef : MetaSpec ): SortedMap [String , ClassSpec ] = {
244245 val srcMap = ParseUtils .asMapStr(src, path)
245- srcMap.map { case (typeName, body) =>
246- Identifier .checkIdentifierSource(typeName, " type" , path ++ List (typeName))
247- typeName -> ClassSpec .fromYaml(body, fileName, path ++ List (typeName), metaDef)
248- }
246+ SortedMap .from(
247+ srcMap.map { case (typeName, body) =>
248+ Identifier .checkIdentifierSource(typeName, " type" , path ++ List (typeName))
249+ typeName -> ClassSpec .fromYaml(body, fileName, path ++ List (typeName), metaDef)
250+ }
251+ )
249252 }
250253
251- def instancesFromYaml (src : Any , path : List [String ], metaDef : MetaSpec ): Map [InstanceIdentifier , InstanceSpec ] = {
254+ def instancesFromYaml (src : Any , path : List [String ], metaDef : MetaSpec ): SortedMap [InstanceIdentifier , InstanceSpec ] = {
252255 val srcMap = ParseUtils .asMap(src, path)
253- srcMap.map { case (key, body) =>
254- val instName = ParseUtils .asStr(key, path)
255- Identifier .checkIdentifierSource(instName, " instance" , path ++ List (instName))
256- val id = InstanceIdentifier (instName)
257- id -> InstanceSpec .fromYaml(body, path ++ List (instName), metaDef, id)
258- }
256+ SortedMap .from(
257+ srcMap.map { case (key, body) =>
258+ val instName = ParseUtils .asStr(key, path)
259+ Identifier .checkIdentifierSource(instName, " instance" , path ++ List (instName))
260+ val id = InstanceIdentifier (instName)
261+ id -> InstanceSpec .fromYaml(body, path ++ List (instName), metaDef, id)
262+ }
263+ )
259264 }
260265
261- def enumsFromYaml (src : Any , path : List [String ]): Map [String , EnumSpec ] = {
266+ def enumsFromYaml (src : Any , path : List [String ]): SortedMap [String , EnumSpec ] = {
262267 val srcMap = ParseUtils .asMap(src, path)
263- srcMap.map { case (key, body) =>
264- val enumName = ParseUtils .asStr(key, path)
265- Identifier .checkIdentifierSource(enumName, " enum" , path ++ List (enumName))
266- enumName -> EnumSpec .fromYaml(body, path ++ List (enumName))
267- }
268+ SortedMap .from(
269+ srcMap.map { case (key, body) =>
270+ val enumName = ParseUtils .asStr(key, path)
271+ Identifier .checkIdentifierSource(enumName, " enum" , path ++ List (enumName))
272+ enumName -> EnumSpec .fromYaml(body, path ++ List (enumName))
273+ }
274+ )
268275 }
269276
270277 def fromYaml (src : Any , fileName : Option [String ]): ClassSpec = fromYaml(src, fileName, List (), MetaSpec .OPAQUE )
@@ -279,9 +286,9 @@ object ClassSpec {
279286 toStringExpr = None ,
280287 params = List (),
281288 seq = List (),
282- types = Map (),
283- instances = Map (),
284- enums = Map ()
289+ types = SortedMap (),
290+ instances = SortedMap (),
291+ enums = SortedMap ()
285292 )
286293 placeholder.name = typeName
287294 placeholder
0 commit comments