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

Method inferRelTypes

analysis/validation.go:1353–1381  ·  view source on GitHub ↗

inferRelType infers a relation type from rules when no decl is available. inferRelType ensures that bc.inferred[pred] is populated with the inferred relation type.

(pred ast.PredicateSym)

Source from the content-addressed store, hash-verified

1351// inferRelType infers a relation type from rules when no decl is available.
1352// inferRelType ensures that bc.inferred[pred] is populated with the inferred relation type.
1353func (bc *BoundsAnalyzer) inferRelTypes(pred ast.PredicateSym) (ast.BaseTerm, error) {
1354 if existing, ok := bc.relTypeMap[pred]; ok {
1355 return existing, nil
1356 }
1357 if existing, ok := bc.inferred[pred]; ok {
1358 return existing, nil
1359 }
1360
1361 var alternatives []ast.BaseTerm
1362 if initialFactRelTypeExpr, ok := bc.initialFactMap[pred]; ok {
1363 alternatives = symbols.RelTypeAlternatives(initialFactRelTypeExpr)
1364 }
1365
1366 clauses := bc.RulesMap[pred]
1367 for _, clause := range clauses {
1368 ic := newInferContextNoDecl(bc, &pred, &clause)
1369 relType, err := ic.inferRelTypesFromClause()
1370 if err != nil {
1371 return nil, err
1372 }
1373 for _, alternative := range symbols.RelTypeAlternatives(relType) {
1374 if !symbols.SetConforms(nil /*TODO*/, alternative, symbols.RelTypeFromAlternatives(alternatives)) {
1375 alternatives = append(alternatives, alternative)
1376 }
1377 }
1378 }
1379 bc.inferred[pred] = symbols.RelTypeFromAlternatives(alternatives)
1380 return bc.inferred[pred], nil
1381}
1382
1383func checkFunApply(z ast.ApplyFn, fnTpe ast.BaseTerm, varRanges map[ast.Variable]ast.BaseTerm, nameTrie symbols.NameTrie) (ast.BaseTerm, error) {
1384 if fnTpe.Equals(symbols.EmptyType) {

Callers 2

inferAndCheckBoundsMethod · 0.95
getOrInferRelTypesMethod · 0.95

Calls 5

RelTypeAlternativesFunction · 0.92
SetConformsFunction · 0.92
RelTypeFromAlternativesFunction · 0.92
newInferContextNoDeclFunction · 0.85

Tested by

no test coverage detected