@@ -298,124 +298,3 @@ func formatShapeType(ty *TypeExpr) string {
298298 }
299299 return "{ " + strings .Join (parts , ", " ) + " }"
300300}
301-
302- func formatValueTypeExpr (val Value ) string {
303- state := valueTypeFormatState {
304- seenArrays : make (map [uintptr ]struct {}),
305- seenHashes : make (map [uintptr ]struct {}),
306- }
307- return state .format (val )
308- }
309-
310- type valueTypeFormatState struct {
311- seenArrays map [uintptr ]struct {}
312- seenHashes map [uintptr ]struct {}
313- }
314-
315- func (s * valueTypeFormatState ) format (val Value ) string {
316- switch val .Kind () {
317- case KindNil :
318- return "nil"
319- case KindBool :
320- return "bool"
321- case KindInt :
322- return "int"
323- case KindFloat :
324- return "float"
325- case KindString :
326- return "string"
327- case KindMoney :
328- return "money"
329- case KindDuration :
330- return "duration"
331- case KindTime :
332- return "time"
333- case KindSymbol :
334- return "symbol"
335- case KindRange :
336- return "range"
337- case KindFunction :
338- return "function"
339- case KindBuiltin :
340- return "builtin"
341- case KindBlock :
342- return "block"
343- case KindClass :
344- return "class"
345- case KindInstance :
346- return "instance"
347- case KindArray :
348- return s .formatArray (val .Array ())
349- case KindHash , KindObject :
350- return s .formatHash (val .Hash ())
351- default :
352- return val .Kind ().String ()
353- }
354- }
355-
356- func (s * valueTypeFormatState ) formatArray (values []Value ) string {
357- if len (values ) == 0 {
358- return "array<empty>"
359- }
360-
361- id := reflect .ValueOf (values ).Pointer ()
362- if id != 0 {
363- if _ , seen := s .seenArrays [id ]; seen {
364- return "array<...>"
365- }
366- s .seenArrays [id ] = struct {}{}
367- defer delete (s .seenArrays , id )
368- }
369-
370- elementTypes := make (map [string ]struct {}, len (values ))
371- for _ , value := range values {
372- elementTypes [s .format (value )] = struct {}{}
373- }
374- return "array<" + joinSortedTypes (elementTypes ) + ">"
375- }
376-
377- func (s * valueTypeFormatState ) formatHash (values map [string ]Value ) string {
378- if len (values ) == 0 {
379- return "{}"
380- }
381-
382- id := reflect .ValueOf (values ).Pointer ()
383- if id != 0 {
384- if _ , seen := s .seenHashes [id ]; seen {
385- return "{ ... }"
386- }
387- s .seenHashes [id ] = struct {}{}
388- defer delete (s .seenHashes , id )
389- }
390-
391- if len (values ) <= 6 {
392- fields := make ([]string , 0 , len (values ))
393- for field := range values {
394- fields = append (fields , field )
395- }
396- sort .Strings (fields )
397- parts := make ([]string , len (fields ))
398- for i , field := range fields {
399- parts [i ] = fmt .Sprintf ("%s: %s" , field , s .format (values [field ]))
400- }
401- return "{ " + strings .Join (parts , ", " ) + " }"
402- }
403-
404- valueTypes := make (map [string ]struct {}, len (values ))
405- for _ , value := range values {
406- valueTypes [s .format (value )] = struct {}{}
407- }
408- return "hash<string, " + joinSortedTypes (valueTypes ) + ">"
409- }
410-
411- func joinSortedTypes (typeSet map [string ]struct {}) string {
412- if len (typeSet ) == 0 {
413- return "empty"
414- }
415- parts := make ([]string , 0 , len (typeSet ))
416- for typeName := range typeSet {
417- parts = append (parts , typeName )
418- }
419- sort .Strings (parts )
420- return strings .Join (parts , " | " )
421- }
0 commit comments