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

Method getOrInferRelTypes

analysis/validation.go:1313–1349  ·  view source on GitHub ↗

While checking a rule, we want to look up possible relation types. If we find several applicable ones, we return the feasible ones.

(
	pred ast.PredicateSym,
	args []ast.BaseTerm,
	varRanges map[ast.Variable]ast.BaseTerm,
	typeCtx map[ast.Variable]ast.BaseTerm)

Source from the content-addressed store, hash-verified

1311// While checking a rule, we want to look up possible relation types.
1312// If we find several applicable ones, we return the feasible ones.
1313func (bc *BoundsAnalyzer) getOrInferRelTypes(
1314 pred ast.PredicateSym,
1315 args []ast.BaseTerm,
1316 varRanges map[ast.Variable]ast.BaseTerm,
1317 typeCtx map[ast.Variable]ast.BaseTerm) ([]ast.BaseTerm, error) {
1318
1319 if relType, ok := bc.relTypeMap[pred]; ok {
1320 tpe, _, err := bc.feasibleAlternatives(pred, relType, args, varRanges, typeCtx)
1321 return tpe, err
1322 }
1323
1324 if relType, ok := bc.inferred[pred]; ok {
1325 tpe, _, err := bc.feasibleAlternatives(pred, relType, args, varRanges, typeCtx)
1326 return tpe, err
1327 }
1328
1329 if bc.visiting[pred] {
1330 // We are asking for pred in a recursive call. Use [any ... any]
1331 relType, err := symbols.RelTypeExprFromDecl(*bc.programInfo.Decls[pred])
1332 if err != nil {
1333 return nil, err
1334 }
1335 return []ast.BaseTerm{relType}, nil
1336 }
1337
1338 bc.visiting[pred] = true
1339 defer delete(bc.visiting, pred)
1340
1341 relTypeExpr, err := bc.inferRelTypes(pred)
1342 if err != nil {
1343 return nil, err
1344 }
1345 bc.inferred[pred] = relTypeExpr
1346 tpe, _, err := bc.feasibleAlternatives(pred, relTypeExpr, args, varRanges, nil /*TODO map[ast.Variable]bool*/)
1347 return tpe, err
1348
1349}
1350
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.

Callers 1

Calls 3

feasibleAlternativesMethod · 0.95
inferRelTypesMethod · 0.95
RelTypeExprFromDeclFunction · 0.92

Tested by

no test coverage detected