MCPcopy
hub / github.com/google/mangle / boundOfArg

Function boundOfArg

analysis/validation.go:1409–1559  ·  view source on GitHub ↗
(x ast.BaseTerm, varRanges map[ast.Variable]ast.BaseTerm, nameTrie symbols.NameTrie)

Source from the content-addressed store, hash-verified

1407}
1408
1409func boundOfArg(x ast.BaseTerm, varRanges map[ast.Variable]ast.BaseTerm, nameTrie symbols.NameTrie) ast.BaseTerm {
1410 switch z := x.(type) {
1411 case ast.Variable:
1412 if bound, ok := varRanges[z]; ok {
1413 return bound
1414 }
1415 return ast.AnyBound
1416
1417 case ast.Constant:
1418 switch z.Type {
1419 case ast.NumberType:
1420 return ast.NumberBound
1421 case ast.Float64Type:
1422 return ast.Float64Bound
1423 case ast.StringType:
1424 return ast.StringBound
1425 case ast.TimeType:
1426 return ast.TimeBound
1427 case ast.DurationType:
1428 return ast.DurationBound
1429 case ast.NameType:
1430 // Find a name prefix type, or fall back to /name.
1431 return nameTrie.PrefixName(z.Symbol)
1432 case ast.ListShape:
1433 var args []ast.BaseTerm
1434 z.ListValues(func(arg ast.Constant) error {
1435 args = append(args, arg)
1436 return nil
1437 }, func() error {
1438 return nil
1439 })
1440
1441 return boundOfArg(ast.ApplyFn{symbols.List, args}, varRanges, nameTrie)
1442 case ast.MapShape:
1443 var args []ast.BaseTerm
1444 z.MapValues(func(keyArg, valArg ast.Constant) error {
1445 args = append(args, keyArg)
1446 args = append(args, valArg)
1447 return nil
1448 }, func() error {
1449 return nil
1450 })
1451 return boundOfArg(ast.ApplyFn{symbols.Map, args}, varRanges, nameTrie)
1452 case ast.StructShape:
1453 var args []ast.BaseTerm
1454 z.StructValues(func(fieldArg, valArg ast.Constant) error {
1455 args = append(args, fieldArg)
1456 args = append(args, valArg)
1457 return nil
1458 }, func() error {
1459 return nil
1460 })
1461 return boundOfArg(ast.ApplyFn{symbols.Struct, args}, varRanges, nameTrie)
1462
1463 default:
1464 return ast.AnyBound // This cannot happen
1465 }
1466

Callers 7

newBoundsAnalyzerFunction · 0.85
feasibleAlternativesMethod · 0.85
checkFunApplyFunction · 0.85
typeOfFnFunction · 0.85

Calls 13

NewListTypeFunction · 0.92
UpperBoundFunction · 0.92
NewMapTypeFunction · 0.92
NewStructTypeFunction · 0.92
IsStructTypeExpressionFunction · 0.92
StructTypeFieldFunction · 0.92
NewTupleTypeFunction · 0.92
GetBuiltinFunctionTypeFunction · 0.92
checkFunApplyFunction · 0.85
PrefixNameMethod · 0.80
ListValuesMethod · 0.80
MapValuesMethod · 0.80

Tested by 1