Spaces:
Runtime error
Runtime error
| ======= | |
| no-body | |
| ======= | |
| predicate foo(); | |
| mod::Type foo(int arg, Foo arg); | |
| --- | |
| (ql | |
| (moduleMember (classlessPredicate (predicate) (predicateName) (empty))) | |
| (moduleMember (classlessPredicate (typeExpr (moduleExpr (simpleId)) (className)) (predicateName) | |
| (varDecl (typeExpr (primitiveType)) (varName (simpleId))) (varDecl (typeExpr (className)) (varName (simpleId))) (empty)))) | |
| ================ | |
| simple predicate | |
| ================ | |
| predicate foo(F f){ | |
| f = f | |
| } | |
| int predicateWithResult(){ | |
| result = 43 | |
| } | |
| --- | |
| (ql | |
| (moduleMember (classlessPredicate (predicate) (predicateName) (varDecl (typeExpr (className)) (varName (simpleId))) (body | |
| (comp_term (variable (varName (simpleId))) (compop) (variable (varName (simpleId))))))) | |
| (moduleMember (classlessPredicate (typeExpr (primitiveType)) (predicateName) (body | |
| (comp_term (variable (result)) (compop) (literal (integer))))))) | |
| ===================== | |
| higher-order relation | |
| ===================== | |
| int foo(X x, Y y) = name(pred1/1, pred2/3)(x.x(), result) | |
| --- | |
| (ql (moduleMember | |
| (classlessPredicate | |
| (typeExpr (primitiveType)) | |
| (predicateName) | |
| (varDecl (typeExpr (className)) (varName (simpleId))) | |
| (varDecl (typeExpr (className)) (varName (simpleId))) | |
| (higherOrderTerm (literalId) | |
| (predicateExpr (aritylessPredicateExpr (literalId)) (integer)) | |
| (predicateExpr (aritylessPredicateExpr (literalId)) (integer)) | |
| (qualified_expr (variable (varName (simpleId))) (qualifiedRhs (predicateName))) | |
| (variable (result)))))) | |
| =============== | |
| predicate alias | |
| =============== | |
| predicate foo = somePredicate/12; | |
| --- | |
| (ql (moduleMember (classlessPredicate | |
| (predicate) | |
| (predicateName) (predicateAliasBody (predicateExpr (aritylessPredicateExpr (literalId)) (integer)))))) | |
| ========== | |
| type union | |
| ========== | |
| newtype T = | |
| T1() or | |
| T2(int x) { x = 1 or x = 2 } or | |
| T3(int x) { x = 3 or x = 4 or x = 5 } | |
| class T2orT3 = T2 or T3; | |
| --- | |
| (ql (moduleMember (datatype (className) (datatypeBranches | |
| (datatypeBranch (className)) | |
| (datatypeBranch (className) (varDecl (typeExpr (primitiveType)) (varName (simpleId))) (body (disjunction | |
| (comp_term (variable (varName (simpleId))) (compop) (literal (integer))) | |
| (comp_term (variable (varName (simpleId))) (compop) (literal (integer)))))) | |
| (datatypeBranch (className) (varDecl (typeExpr (primitiveType)) (varName (simpleId))) (body (disjunction (disjunction | |
| (comp_term (variable (varName (simpleId))) (compop) (literal (integer))) | |
| (comp_term (variable (varName (simpleId))) (compop) (literal (integer)))) | |
| (comp_term (variable (varName (simpleId))) (compop) (literal (integer))))))))) | |
| (moduleMember (dataclass (className) (typeUnionBody (typeExpr (className)) (typeExpr (className)))))) | |