mirror of
https://github.com/github/codeql.git
synced 2025-12-17 01:03:14 +01:00
Merge pull request #17558 from hvitved/rust/cfg-consistency-queries
Rust: Enable CFG consistency checks
This commit is contained in:
@@ -61,8 +61,3 @@ query predicate preBasicBlockConsistency(ControlFlowElement cfe1, ControlFlowEle
|
||||
bbIntraSuccInconsistency(cfe1, cfe2) and
|
||||
s = "intra succ inconsistency"
|
||||
}
|
||||
|
||||
query predicate multipleToString(Node n, string s) {
|
||||
s = strictconcat(n.toString(), ",") and
|
||||
strictcount(n.toString()) > 1
|
||||
}
|
||||
|
||||
@@ -19,8 +19,3 @@ query predicate nonPostOrderExpr(Expr e, string cls) {
|
||||
c instanceof NormalCompletion
|
||||
)
|
||||
}
|
||||
|
||||
query predicate multipleToString(CfgNode n, string s) {
|
||||
s = strictconcat(n.toString(), ",") and
|
||||
strictcount(n.toString()) > 1
|
||||
}
|
||||
|
||||
2
rust/ql/.generated.list
generated
2
rust/ql/.generated.list
generated
@@ -176,7 +176,6 @@ lib/codeql/rust/elements/internal/AwaitExprImpl.qll 97eb9abc0f30ead9385f31c87b46
|
||||
lib/codeql/rust/elements/internal/BecomeExprConstructor.qll ba073aaa256cb8827a0307c3128d50f62b11aac0b1f324e48c95f30351a9b942 3a787ded505c3158fa4f4923f66e8ecdcb7b5f86f27f64c5412dc32dca031f18
|
||||
lib/codeql/rust/elements/internal/BecomeExprImpl.qll 8522410257ca9ff09e5314c3a39fba02f6ba18e1d4349b91f8823586317f3e47 073a877a6d72c5b762aac64cdd843fd2872aaefb9e264fb90eac8c25753a6e07
|
||||
lib/codeql/rust/elements/internal/BinaryExprConstructor.qll 7f9b17757f78b9fb7c46e21d2040a77fa50083bef4911c8464991c3d1ad91d87 a59390cd8e896c0bfbdc9ba0674e06d980ffcefa710fbc9886be52ed427e9717
|
||||
lib/codeql/rust/elements/internal/BinaryExprImpl.qll 6e22b183edc36083c45a03a600da6ea995563268ecdcdd4980b612fb8c3e7d33 7d8f32500f1edf8e9b8a725a640605e2ecfd88f21ad09d10f81b0ac18f27360d
|
||||
lib/codeql/rust/elements/internal/BlockExprConstructor.qll 438337c807645e98a01440f3f4610d68b0567ba15c8f51dc43bf5a30c9af3696 48ce7a546910c884619762349b8ada9836284f8008298fdb0070a38f7ddf25a0
|
||||
lib/codeql/rust/elements/internal/BlockExprImpl.qll 36ac09e4a6eeeec22919b62b1d004bdb5bb2527e67932c308aec383a770768d6 3b4b2a2014f6fe075c63a2d633b297566b548ef2e4343cadf067a9edbcadc876
|
||||
lib/codeql/rust/elements/internal/BoxPatConstructor.qll 153f110ba25fd6c889092bfd16f73bb610fa60d6e0c8965d5f44d2446fcd48a2 9324cf0d8aa29945551bf8ab64801d598f57aab8cd4e19bcd4e9ef8a4a4e06eb
|
||||
@@ -329,7 +328,6 @@ lib/codeql/rust/elements/internal/PathSegmentImpl.qll f8679dc63f0d71d412c3e1ce76
|
||||
lib/codeql/rust/elements/internal/PathTypeConstructor.qll 8949742c7ab7fcfa3a3f6469e87355a6888931ab9ac7a6a07d2bd51e3fdf8283 fb1a402e94e9a1f33b7757338d7e95b107933339615a4fe86de33e41206dd94a
|
||||
lib/codeql/rust/elements/internal/PathTypeImpl.qll 0e3b85df054d1194505796e457ee31a8dac2a2a77284c077cbf1a3bfc179294e c198d4fdf8d1d55f1cf57685a9ad2adf88cc2d6d4f84bafa1e9f039192761399
|
||||
lib/codeql/rust/elements/internal/PrefixExprConstructor.qll 90c50b0df2d4b4cbf5e2b7d67a9d243a1af9bfff660b7a70d8b9c7859c28bca7 1a1b5ea1f06ed8d41a658c872e8e1915c241a7c799c691df81b9a7b55d8f2f1e
|
||||
lib/codeql/rust/elements/internal/PrefixExprImpl.qll f3c6a88cead13fb88f5be170123e9d5fc0819e6626602c42d38e756ef5a46213 e5cd78e6a77484e164334befd533d52e4de00c0c3b30dd2fa03f412f669cf369
|
||||
lib/codeql/rust/elements/internal/PtrTypeConstructor.qll ee3c4326ea3f198d2537a914dd6eb51d0cf247310f037e13e87632fbd6cfb50a 3814218b5271f3c6c45b52082cca2a3250a2573abced43fe53e1b4145374afe3
|
||||
lib/codeql/rust/elements/internal/PtrTypeImpl.qll ff4283ffab39b4a3c0e55e7d655dfdb846171cde0907bf1f893c86b35d2c1135 e54d3a6fb0b5a1484f00fd5a4631455902bab80642c3bb076e538ddcc29a85a4
|
||||
lib/codeql/rust/elements/internal/RangeExprConstructor.qll a0aa90a1c38c5deea56475399016afae2a00a858b961fbbab8ddeb3bc6a08103 0ddf1bcf28aafc56d7334e6138fb268f9b36a429e4cbdd982cd8384e0644076b
|
||||
|
||||
2
rust/ql/.gitattributes
generated
vendored
2
rust/ql/.gitattributes
generated
vendored
@@ -178,7 +178,6 @@
|
||||
/lib/codeql/rust/elements/internal/BecomeExprConstructor.qll linguist-generated
|
||||
/lib/codeql/rust/elements/internal/BecomeExprImpl.qll linguist-generated
|
||||
/lib/codeql/rust/elements/internal/BinaryExprConstructor.qll linguist-generated
|
||||
/lib/codeql/rust/elements/internal/BinaryExprImpl.qll linguist-generated
|
||||
/lib/codeql/rust/elements/internal/BlockExprConstructor.qll linguist-generated
|
||||
/lib/codeql/rust/elements/internal/BlockExprImpl.qll linguist-generated
|
||||
/lib/codeql/rust/elements/internal/BoxPatConstructor.qll linguist-generated
|
||||
@@ -331,7 +330,6 @@
|
||||
/lib/codeql/rust/elements/internal/PathTypeConstructor.qll linguist-generated
|
||||
/lib/codeql/rust/elements/internal/PathTypeImpl.qll linguist-generated
|
||||
/lib/codeql/rust/elements/internal/PrefixExprConstructor.qll linguist-generated
|
||||
/lib/codeql/rust/elements/internal/PrefixExprImpl.qll linguist-generated
|
||||
/lib/codeql/rust/elements/internal/PtrTypeConstructor.qll linguist-generated
|
||||
/lib/codeql/rust/elements/internal/PtrTypeImpl.qll linguist-generated
|
||||
/lib/codeql/rust/elements/internal/RangeExprConstructor.qll linguist-generated
|
||||
|
||||
19
rust/ql/consistency-queries/CfgConsistency.ql
Normal file
19
rust/ql/consistency-queries/CfgConsistency.ql
Normal file
@@ -0,0 +1,19 @@
|
||||
import rust
|
||||
import codeql.rust.controlflow.internal.ControlFlowGraphImpl::Consistency
|
||||
import codeql.rust.controlflow.internal.ControlFlowGraphImpl as CfgImpl
|
||||
import codeql.rust.controlflow.internal.Completion
|
||||
|
||||
/**
|
||||
* All `Expr` nodes are `PostOrderTree`s
|
||||
*/
|
||||
query predicate nonPostOrderExpr(Expr e, string cls) {
|
||||
cls = e.getPrimaryQlClasses() and
|
||||
not e instanceof LetExpr and
|
||||
not e instanceof LogicalAndExpr and // todo
|
||||
not e instanceof LogicalOrExpr and
|
||||
exists(AstNode last, Completion c |
|
||||
CfgImpl::last(e, last, c) and
|
||||
last != e and
|
||||
c instanceof NormalCompletion
|
||||
)
|
||||
}
|
||||
@@ -1,3 +0,0 @@
|
||||
from boolean b
|
||||
where b = true and b = false
|
||||
select b
|
||||
@@ -73,7 +73,7 @@ class BecomeExprTree extends StandardPostOrderTree instanceof BecomeExpr {
|
||||
}
|
||||
|
||||
class BinaryOpExprTree extends StandardPostOrderTree instanceof BinaryExpr {
|
||||
BinaryOpExprTree() { super.getOperatorName() != "&&" and super.getOperatorName() != "||" }
|
||||
BinaryOpExprTree() { not this instanceof BinaryLogicalOperation }
|
||||
|
||||
override ControlFlowTree getChildNode(int i) {
|
||||
i = 0 and result = super.getLhs()
|
||||
@@ -82,61 +82,53 @@ class BinaryOpExprTree extends StandardPostOrderTree instanceof BinaryExpr {
|
||||
}
|
||||
}
|
||||
|
||||
class LogicalOrBinaryOpExprTree extends PreOrderTree instanceof BinaryExpr {
|
||||
LogicalOrBinaryOpExprTree() { super.getOperatorName() = "||" }
|
||||
|
||||
final override predicate propagatesAbnormal(AstNode child) {
|
||||
child = [super.getRhs(), super.getLhs()]
|
||||
}
|
||||
class LogicalOrBinaryOpExprTree extends PreOrderTree, LogicalOrExpr {
|
||||
final override predicate propagatesAbnormal(AstNode child) { child = this.getAnOperand() }
|
||||
|
||||
override predicate succ(AstNode pred, AstNode succ, Completion c) {
|
||||
// Edge to the first node in the lhs
|
||||
pred = this and
|
||||
first(super.getLhs(), succ) and
|
||||
first(this.getLhs(), succ) and
|
||||
completionIsSimple(c)
|
||||
or
|
||||
// Edge from the last node in the lhs to the first node in the rhs
|
||||
last(super.getLhs(), pred, c) and
|
||||
first(super.getRhs(), succ) and
|
||||
last(this.getLhs(), pred, c) and
|
||||
first(this.getRhs(), succ) and
|
||||
c.(BooleanCompletion).failed()
|
||||
}
|
||||
|
||||
override predicate last(AstNode node, Completion c) {
|
||||
// Lhs. as the last node
|
||||
last(super.getLhs(), node, c) and
|
||||
last(this.getLhs(), node, c) and
|
||||
c.(BooleanCompletion).succeeded()
|
||||
or
|
||||
// Rhs. as the last node
|
||||
last(super.getRhs(), node, c)
|
||||
last(this.getRhs(), node, c)
|
||||
}
|
||||
}
|
||||
|
||||
class LogicalAndBinaryOpExprTree extends PreOrderTree instanceof BinaryExpr {
|
||||
LogicalAndBinaryOpExprTree() { super.getOperatorName() = "&&" }
|
||||
|
||||
final override predicate propagatesAbnormal(AstNode child) {
|
||||
child = [super.getRhs(), super.getLhs()]
|
||||
}
|
||||
class LogicalAndBinaryOpExprTree extends PreOrderTree, LogicalAndExpr {
|
||||
final override predicate propagatesAbnormal(AstNode child) { child = this.getAnOperand() }
|
||||
|
||||
override predicate succ(AstNode pred, AstNode succ, Completion c) {
|
||||
// Edge to the first node in the lhs
|
||||
pred = this and
|
||||
first(super.getLhs(), succ) and
|
||||
first(this.getLhs(), succ) and
|
||||
completionIsSimple(c)
|
||||
or
|
||||
// Edge from the last node in the lhs to the first node in the rhs
|
||||
last(super.getLhs(), pred, c) and
|
||||
first(super.getRhs(), succ) and
|
||||
last(this.getLhs(), pred, c) and
|
||||
first(this.getRhs(), succ) and
|
||||
c.(BooleanCompletion).succeeded()
|
||||
}
|
||||
|
||||
override predicate last(AstNode node, Completion c) {
|
||||
// Lhs. as the last node
|
||||
last(super.getLhs(), node, c) and
|
||||
last(this.getLhs(), node, c) and
|
||||
c.(BooleanCompletion).failed()
|
||||
or
|
||||
// Rhs. as the last node
|
||||
last(super.getRhs(), node, c)
|
||||
last(this.getRhs(), node, c)
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
33
rust/ql/lib/codeql/rust/elements/LogicalOperation.qll
Normal file
33
rust/ql/lib/codeql/rust/elements/LogicalOperation.qll
Normal file
@@ -0,0 +1,33 @@
|
||||
private import codeql.rust.elements.Expr
|
||||
private import codeql.rust.elements.BinaryExpr
|
||||
private import codeql.rust.elements.PrefixExpr
|
||||
|
||||
abstract private class LogicalOperationImpl extends Expr {
|
||||
abstract Expr getAnOperand();
|
||||
}
|
||||
|
||||
final class LogicalOperation = LogicalOperationImpl;
|
||||
|
||||
abstract private class BinaryLogicalOperationImpl extends BinaryExpr, LogicalOperationImpl {
|
||||
override Expr getAnOperand() { result = [this.getLhs(), this.getRhs()] }
|
||||
}
|
||||
|
||||
final class BinaryLogicalOperation = BinaryLogicalOperationImpl;
|
||||
|
||||
final class LogicalAndExpr extends BinaryLogicalOperationImpl, BinaryExpr {
|
||||
LogicalAndExpr() { this.getOperatorName() = "&&" }
|
||||
}
|
||||
|
||||
final class LogicalOrExpr extends BinaryLogicalOperationImpl {
|
||||
LogicalOrExpr() { this.getOperatorName() = "||" }
|
||||
}
|
||||
|
||||
abstract private class UnaryLogicalOperationImpl extends PrefixExpr, LogicalOperationImpl { }
|
||||
|
||||
final class UnaryLogicalOperation = UnaryLogicalOperationImpl;
|
||||
|
||||
final class LogicalNotExpr extends UnaryLogicalOperationImpl {
|
||||
LogicalNotExpr() { this.getOperatorName() = "!" }
|
||||
|
||||
override Expr getAnOperand() { result = this.getExpr() }
|
||||
}
|
||||
@@ -1,4 +1,3 @@
|
||||
// generated by codegen, remove this comment if you wish to edit this file
|
||||
/**
|
||||
* This module provides a hand-modifiable wrapper around the generated class `BinaryExpr`.
|
||||
*
|
||||
@@ -12,6 +11,7 @@ private import codeql.rust.elements.internal.generated.BinaryExpr
|
||||
* be referenced directly.
|
||||
*/
|
||||
module Impl {
|
||||
// the following QLdoc is generated: if you need to edit it, do it in the schema file
|
||||
/**
|
||||
* A binary operation expression. For example:
|
||||
* ```rust
|
||||
@@ -22,5 +22,7 @@ module Impl {
|
||||
* x += y;
|
||||
* ```
|
||||
*/
|
||||
class BinaryExpr extends Generated::BinaryExpr { }
|
||||
class BinaryExpr extends Generated::BinaryExpr {
|
||||
override string toString() { result = "... " + this.getOperatorName() + " ..." }
|
||||
}
|
||||
}
|
||||
|
||||
@@ -1,4 +1,3 @@
|
||||
// generated by codegen, remove this comment if you wish to edit this file
|
||||
/**
|
||||
* This module provides a hand-modifiable wrapper around the generated class `PrefixExpr`.
|
||||
*
|
||||
@@ -12,6 +11,7 @@ private import codeql.rust.elements.internal.generated.PrefixExpr
|
||||
* be referenced directly.
|
||||
*/
|
||||
module Impl {
|
||||
// the following QLdoc is generated: if you need to edit it, do it in the schema file
|
||||
/**
|
||||
* A unary operation expression. For example:
|
||||
* ```rust
|
||||
@@ -20,5 +20,7 @@ module Impl {
|
||||
* let z = *ptr
|
||||
* ```
|
||||
*/
|
||||
class PrefixExpr extends Generated::PrefixExpr { }
|
||||
class PrefixExpr extends Generated::PrefixExpr {
|
||||
override string toString() { result = this.getOperatorName() + " ..." }
|
||||
}
|
||||
}
|
||||
|
||||
@@ -3,3 +3,4 @@
|
||||
import codeql.rust.elements
|
||||
import codeql.Locations
|
||||
import codeql.files.FileSystem
|
||||
import codeql.rust.elements.LogicalOperation
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
| gen_binary_expr.rs:5:5:5:9 | BinaryExpr | getNumberOfAttrs: | 0 | hasLhs: | yes | hasOperatorName: | yes | hasRhs: | yes |
|
||||
| gen_binary_expr.rs:6:5:6:10 | BinaryExpr | getNumberOfAttrs: | 0 | hasLhs: | yes | hasOperatorName: | yes | hasRhs: | yes |
|
||||
| gen_binary_expr.rs:7:5:7:10 | BinaryExpr | getNumberOfAttrs: | 0 | hasLhs: | yes | hasOperatorName: | yes | hasRhs: | yes |
|
||||
| gen_binary_expr.rs:8:5:8:9 | BinaryExpr | getNumberOfAttrs: | 0 | hasLhs: | yes | hasOperatorName: | yes | hasRhs: | yes |
|
||||
| gen_binary_expr.rs:9:5:9:10 | BinaryExpr | getNumberOfAttrs: | 0 | hasLhs: | yes | hasOperatorName: | yes | hasRhs: | yes |
|
||||
| gen_binary_expr.rs:5:5:5:9 | ... + ... | getNumberOfAttrs: | 0 | hasLhs: | yes | hasOperatorName: | yes | hasRhs: | yes |
|
||||
| gen_binary_expr.rs:6:5:6:10 | ... && ... | getNumberOfAttrs: | 0 | hasLhs: | yes | hasOperatorName: | yes | hasRhs: | yes |
|
||||
| gen_binary_expr.rs:7:5:7:10 | ... <= ... | getNumberOfAttrs: | 0 | hasLhs: | yes | hasOperatorName: | yes | hasRhs: | yes |
|
||||
| gen_binary_expr.rs:8:5:8:9 | ... = ... | getNumberOfAttrs: | 0 | hasLhs: | yes | hasOperatorName: | yes | hasRhs: | yes |
|
||||
| gen_binary_expr.rs:9:5:9:10 | ... += ... | getNumberOfAttrs: | 0 | hasLhs: | yes | hasOperatorName: | yes | hasRhs: | yes |
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
| gen_binary_expr.rs:5:5:5:9 | BinaryExpr | gen_binary_expr.rs:5:5:5:5 | PathExpr |
|
||||
| gen_binary_expr.rs:6:5:6:10 | BinaryExpr | gen_binary_expr.rs:6:5:6:5 | PathExpr |
|
||||
| gen_binary_expr.rs:7:5:7:10 | BinaryExpr | gen_binary_expr.rs:7:5:7:5 | PathExpr |
|
||||
| gen_binary_expr.rs:8:5:8:9 | BinaryExpr | gen_binary_expr.rs:8:5:8:5 | PathExpr |
|
||||
| gen_binary_expr.rs:9:5:9:10 | BinaryExpr | gen_binary_expr.rs:9:5:9:5 | PathExpr |
|
||||
| gen_binary_expr.rs:5:5:5:9 | ... + ... | gen_binary_expr.rs:5:5:5:5 | PathExpr |
|
||||
| gen_binary_expr.rs:6:5:6:10 | ... && ... | gen_binary_expr.rs:6:5:6:5 | PathExpr |
|
||||
| gen_binary_expr.rs:7:5:7:10 | ... <= ... | gen_binary_expr.rs:7:5:7:5 | PathExpr |
|
||||
| gen_binary_expr.rs:8:5:8:9 | ... = ... | gen_binary_expr.rs:8:5:8:5 | PathExpr |
|
||||
| gen_binary_expr.rs:9:5:9:10 | ... += ... | gen_binary_expr.rs:9:5:9:5 | PathExpr |
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
| gen_binary_expr.rs:5:5:5:9 | BinaryExpr | + |
|
||||
| gen_binary_expr.rs:6:5:6:10 | BinaryExpr | && |
|
||||
| gen_binary_expr.rs:7:5:7:10 | BinaryExpr | <= |
|
||||
| gen_binary_expr.rs:8:5:8:9 | BinaryExpr | = |
|
||||
| gen_binary_expr.rs:9:5:9:10 | BinaryExpr | += |
|
||||
| gen_binary_expr.rs:5:5:5:9 | ... + ... | + |
|
||||
| gen_binary_expr.rs:6:5:6:10 | ... && ... | && |
|
||||
| gen_binary_expr.rs:7:5:7:10 | ... <= ... | <= |
|
||||
| gen_binary_expr.rs:8:5:8:9 | ... = ... | = |
|
||||
| gen_binary_expr.rs:9:5:9:10 | ... += ... | += |
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
| gen_binary_expr.rs:5:5:5:9 | BinaryExpr | gen_binary_expr.rs:5:9:5:9 | PathExpr |
|
||||
| gen_binary_expr.rs:6:5:6:10 | BinaryExpr | gen_binary_expr.rs:6:10:6:10 | PathExpr |
|
||||
| gen_binary_expr.rs:7:5:7:10 | BinaryExpr | gen_binary_expr.rs:7:10:7:10 | PathExpr |
|
||||
| gen_binary_expr.rs:8:5:8:9 | BinaryExpr | gen_binary_expr.rs:8:9:8:9 | PathExpr |
|
||||
| gen_binary_expr.rs:9:5:9:10 | BinaryExpr | gen_binary_expr.rs:9:10:9:10 | PathExpr |
|
||||
| gen_binary_expr.rs:5:5:5:9 | ... + ... | gen_binary_expr.rs:5:9:5:9 | PathExpr |
|
||||
| gen_binary_expr.rs:6:5:6:10 | ... && ... | gen_binary_expr.rs:6:10:6:10 | PathExpr |
|
||||
| gen_binary_expr.rs:7:5:7:10 | ... <= ... | gen_binary_expr.rs:7:10:7:10 | PathExpr |
|
||||
| gen_binary_expr.rs:8:5:8:9 | ... = ... | gen_binary_expr.rs:8:9:8:9 | PathExpr |
|
||||
| gen_binary_expr.rs:9:5:9:10 | ... += ... | gen_binary_expr.rs:9:10:9:10 | PathExpr |
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
| gen_closure_expr.rs:5:5:5:13 | ClosureExpr | gen_closure_expr.rs:5:9:5:13 | BinaryExpr |
|
||||
| gen_closure_expr.rs:5:5:5:13 | ClosureExpr | gen_closure_expr.rs:5:9:5:13 | ... + ... |
|
||||
| gen_closure_expr.rs:6:5:6:34 | ClosureExpr | gen_closure_expr.rs:6:26:6:34 | BlockExpr |
|
||||
| gen_closure_expr.rs:7:5:7:27 | ClosureExpr | gen_closure_expr.rs:7:23:7:27 | BinaryExpr |
|
||||
| gen_closure_expr.rs:7:5:7:27 | ClosureExpr | gen_closure_expr.rs:7:23:7:27 | ... + ... |
|
||||
| gen_closure_expr.rs:8:6:9:15 | ClosureExpr | gen_closure_expr.rs:9:9:9:15 | YieldExpr |
|
||||
| gen_closure_expr.rs:10:6:11:23 | ClosureExpr | gen_closure_expr.rs:11:17:11:23 | YieldExpr |
|
||||
|
||||
@@ -1,2 +1,2 @@
|
||||
| gen_if_expr.rs:5:5:7:5 | IfExpr | gen_if_expr.rs:5:8:5:14 | BinaryExpr |
|
||||
| gen_if_expr.rs:8:13:12:5 | IfExpr | gen_if_expr.rs:8:16:8:20 | BinaryExpr |
|
||||
| gen_if_expr.rs:5:5:7:5 | IfExpr | gen_if_expr.rs:5:8:5:14 | ... == ... |
|
||||
| gen_if_expr.rs:8:13:12:5 | IfExpr | gen_if_expr.rs:8:16:8:20 | ... > ... |
|
||||
|
||||
@@ -0,0 +1,2 @@
|
||||
deadEnd
|
||||
| gen_match_arm.rs:10:20:10:25 | ... != ... |
|
||||
@@ -1,4 +1,4 @@
|
||||
| gen_match_arm.rs:6:9:6:29 | MatchArm | gen_match_arm.rs:6:28:6:28 | PathExpr |
|
||||
| gen_match_arm.rs:7:9:7:26 | MatchArm | gen_match_arm.rs:7:25:7:25 | LiteralExpr |
|
||||
| gen_match_arm.rs:10:9:10:35 | MatchArm | gen_match_arm.rs:10:30:10:34 | BinaryExpr |
|
||||
| gen_match_arm.rs:10:9:10:35 | MatchArm | gen_match_arm.rs:10:30:10:34 | ... / ... |
|
||||
| gen_match_arm.rs:11:9:11:15 | MatchArm | gen_match_arm.rs:11:14:11:14 | LiteralExpr |
|
||||
|
||||
@@ -0,0 +1,2 @@
|
||||
deadEnd
|
||||
| gen_match_expr.rs:10:20:10:25 | ... != ... |
|
||||
@@ -1,3 +1,3 @@
|
||||
| gen_prefix_expr.rs:5:13:5:15 | PrefixExpr | getNumberOfAttrs: | 0 | hasExpr: | yes | hasOperatorName: | yes |
|
||||
| gen_prefix_expr.rs:6:13:6:17 | PrefixExpr | getNumberOfAttrs: | 0 | hasExpr: | yes | hasOperatorName: | yes |
|
||||
| gen_prefix_expr.rs:7:13:7:16 | PrefixExpr | getNumberOfAttrs: | 0 | hasExpr: | yes | hasOperatorName: | yes |
|
||||
| gen_prefix_expr.rs:5:13:5:15 | - ... | getNumberOfAttrs: | 0 | hasExpr: | yes | hasOperatorName: | yes |
|
||||
| gen_prefix_expr.rs:6:13:6:17 | ! ... | getNumberOfAttrs: | 0 | hasExpr: | yes | hasOperatorName: | yes |
|
||||
| gen_prefix_expr.rs:7:13:7:16 | * ... | getNumberOfAttrs: | 0 | hasExpr: | yes | hasOperatorName: | yes |
|
||||
|
||||
@@ -1,3 +1,3 @@
|
||||
| gen_prefix_expr.rs:5:13:5:15 | PrefixExpr | gen_prefix_expr.rs:5:14:5:15 | LiteralExpr |
|
||||
| gen_prefix_expr.rs:6:13:6:17 | PrefixExpr | gen_prefix_expr.rs:6:14:6:17 | LiteralExpr |
|
||||
| gen_prefix_expr.rs:7:13:7:16 | PrefixExpr | gen_prefix_expr.rs:7:14:7:16 | PathExpr |
|
||||
| gen_prefix_expr.rs:5:13:5:15 | - ... | gen_prefix_expr.rs:5:14:5:15 | LiteralExpr |
|
||||
| gen_prefix_expr.rs:6:13:6:17 | ! ... | gen_prefix_expr.rs:6:14:6:17 | LiteralExpr |
|
||||
| gen_prefix_expr.rs:7:13:7:16 | * ... | gen_prefix_expr.rs:7:14:7:16 | PathExpr |
|
||||
|
||||
@@ -1,3 +1,3 @@
|
||||
| gen_prefix_expr.rs:5:13:5:15 | PrefixExpr | - |
|
||||
| gen_prefix_expr.rs:6:13:6:17 | PrefixExpr | ! |
|
||||
| gen_prefix_expr.rs:7:13:7:16 | PrefixExpr | * |
|
||||
| gen_prefix_expr.rs:5:13:5:15 | - ... | - |
|
||||
| gen_prefix_expr.rs:6:13:6:17 | ! ... | ! |
|
||||
| gen_prefix_expr.rs:7:13:7:16 | * ... | * |
|
||||
|
||||
@@ -0,0 +1,3 @@
|
||||
deadEnd
|
||||
| test.rs:124:28:124:33 | ... < ... |
|
||||
| test.rs:139:30:141:9 | BlockExpr |
|
||||
@@ -20,43 +20,43 @@
|
||||
| test.rs:10:9:22:9 | LoopExpr | test.rs:23:9:23:20 | ExprStmt | |
|
||||
| test.rs:10:14:22:9 | BlockExpr | test.rs:11:13:11:24 | ExprStmt | |
|
||||
| test.rs:11:13:11:13 | PathExpr | test.rs:11:17:11:20 | PathExpr | |
|
||||
| test.rs:11:13:11:23 | BinaryExpr | test.rs:12:13:14:13 | ExprStmt | |
|
||||
| test.rs:11:13:11:23 | ... = ... | test.rs:12:13:14:13 | ExprStmt | |
|
||||
| test.rs:11:13:11:24 | ExprStmt | test.rs:11:13:11:13 | PathExpr | |
|
||||
| test.rs:11:17:11:20 | PathExpr | test.rs:11:22:11:22 | PathExpr | |
|
||||
| test.rs:11:17:11:23 | CallExpr | test.rs:11:13:11:23 | BinaryExpr | |
|
||||
| test.rs:11:17:11:23 | CallExpr | test.rs:11:13:11:23 | ... = ... | |
|
||||
| test.rs:11:22:11:22 | PathExpr | test.rs:11:17:11:23 | CallExpr | |
|
||||
| test.rs:12:13:14:13 | ExprStmt | test.rs:12:16:12:16 | PathExpr | |
|
||||
| test.rs:12:13:14:13 | IfExpr | test.rs:15:13:17:13 | ExprStmt | |
|
||||
| test.rs:12:16:12:16 | PathExpr | test.rs:12:20:12:24 | LiteralExpr | |
|
||||
| test.rs:12:16:12:24 | BinaryExpr | test.rs:12:13:14:13 | IfExpr | false |
|
||||
| test.rs:12:16:12:24 | BinaryExpr | test.rs:13:17:13:29 | ExprStmt | true |
|
||||
| test.rs:12:20:12:24 | LiteralExpr | test.rs:12:16:12:24 | BinaryExpr | |
|
||||
| test.rs:12:16:12:24 | ... > ... | test.rs:12:13:14:13 | IfExpr | false |
|
||||
| test.rs:12:16:12:24 | ... > ... | test.rs:13:17:13:29 | ExprStmt | true |
|
||||
| test.rs:12:20:12:24 | LiteralExpr | test.rs:12:16:12:24 | ... > ... | |
|
||||
| test.rs:13:17:13:28 | ReturnExpr | test.rs:8:5:24:5 | exit test_break_and_continue (normal) | return |
|
||||
| test.rs:13:17:13:29 | ExprStmt | test.rs:13:24:13:28 | LiteralExpr | |
|
||||
| test.rs:13:24:13:28 | LiteralExpr | test.rs:13:17:13:28 | ReturnExpr | |
|
||||
| test.rs:15:13:17:13 | ExprStmt | test.rs:15:16:15:16 | PathExpr | |
|
||||
| test.rs:15:13:17:13 | IfExpr | test.rs:18:13:20:13 | ExprStmt | |
|
||||
| test.rs:15:16:15:16 | PathExpr | test.rs:15:21:15:21 | LiteralExpr | |
|
||||
| test.rs:15:16:15:21 | BinaryExpr | test.rs:15:13:17:13 | IfExpr | false |
|
||||
| test.rs:15:16:15:21 | BinaryExpr | test.rs:16:17:16:22 | ExprStmt | true |
|
||||
| test.rs:15:21:15:21 | LiteralExpr | test.rs:15:16:15:21 | BinaryExpr | |
|
||||
| test.rs:15:16:15:21 | ... == ... | test.rs:15:13:17:13 | IfExpr | false |
|
||||
| test.rs:15:16:15:21 | ... == ... | test.rs:16:17:16:22 | ExprStmt | true |
|
||||
| test.rs:15:21:15:21 | LiteralExpr | test.rs:15:16:15:21 | ... == ... | |
|
||||
| test.rs:16:17:16:21 | BreakExpr | test.rs:10:9:22:9 | LoopExpr | break |
|
||||
| test.rs:16:17:16:22 | ExprStmt | test.rs:16:17:16:21 | BreakExpr | |
|
||||
| test.rs:18:13:20:13 | ExprStmt | test.rs:18:16:18:16 | PathExpr | |
|
||||
| test.rs:18:13:20:13 | IfExpr | test.rs:21:13:21:13 | PathExpr | |
|
||||
| test.rs:18:16:18:16 | PathExpr | test.rs:18:20:18:20 | LiteralExpr | |
|
||||
| test.rs:18:16:18:20 | BinaryExpr | test.rs:18:25:18:25 | LiteralExpr | |
|
||||
| test.rs:18:16:18:25 | BinaryExpr | test.rs:18:13:20:13 | IfExpr | false |
|
||||
| test.rs:18:16:18:25 | BinaryExpr | test.rs:19:17:19:25 | ExprStmt | true |
|
||||
| test.rs:18:20:18:20 | LiteralExpr | test.rs:18:16:18:20 | BinaryExpr | |
|
||||
| test.rs:18:25:18:25 | LiteralExpr | test.rs:18:16:18:25 | BinaryExpr | |
|
||||
| test.rs:18:16:18:20 | ... % ... | test.rs:18:25:18:25 | LiteralExpr | |
|
||||
| test.rs:18:16:18:25 | ... != ... | test.rs:18:13:20:13 | IfExpr | false |
|
||||
| test.rs:18:16:18:25 | ... != ... | test.rs:19:17:19:25 | ExprStmt | true |
|
||||
| test.rs:18:20:18:20 | LiteralExpr | test.rs:18:16:18:20 | ... % ... | |
|
||||
| test.rs:18:25:18:25 | LiteralExpr | test.rs:18:16:18:25 | ... != ... | |
|
||||
| test.rs:19:17:19:24 | ContinueExpr | test.rs:11:13:11:24 | ExprStmt | continue |
|
||||
| test.rs:19:17:19:25 | ExprStmt | test.rs:19:17:19:24 | ContinueExpr | |
|
||||
| test.rs:21:13:21:13 | PathExpr | test.rs:21:17:21:17 | PathExpr | |
|
||||
| test.rs:21:13:21:21 | BinaryExpr | test.rs:10:14:22:9 | BlockExpr | |
|
||||
| test.rs:21:13:21:21 | ... = ... | test.rs:10:14:22:9 | BlockExpr | |
|
||||
| test.rs:21:17:21:17 | PathExpr | test.rs:21:21:21:21 | LiteralExpr | |
|
||||
| test.rs:21:17:21:21 | BinaryExpr | test.rs:21:13:21:21 | BinaryExpr | |
|
||||
| test.rs:21:21:21:21 | LiteralExpr | test.rs:21:17:21:21 | BinaryExpr | |
|
||||
| test.rs:21:17:21:21 | ... / ... | test.rs:21:13:21:21 | ... = ... | |
|
||||
| test.rs:21:21:21:21 | LiteralExpr | test.rs:21:17:21:21 | ... / ... | |
|
||||
| test.rs:23:9:23:19 | ReturnExpr | test.rs:8:5:24:5 | exit test_break_and_continue (normal) | return |
|
||||
| test.rs:23:9:23:20 | ExprStmt | test.rs:23:16:23:19 | LiteralExpr | |
|
||||
| test.rs:23:16:23:19 | LiteralExpr | test.rs:23:9:23:19 | ReturnExpr | |
|
||||
@@ -106,8 +106,8 @@
|
||||
| test.rs:56:19:56:27 | enter ClosureExpr | test.rs:56:23:56:23 | PathExpr | |
|
||||
| test.rs:56:19:56:27 | exit ClosureExpr (normal) | test.rs:56:19:56:27 | exit ClosureExpr | |
|
||||
| test.rs:56:23:56:23 | PathExpr | test.rs:56:27:56:27 | LiteralExpr | |
|
||||
| test.rs:56:23:56:27 | BinaryExpr | test.rs:56:19:56:27 | exit ClosureExpr (normal) | |
|
||||
| test.rs:56:27:56:27 | LiteralExpr | test.rs:56:23:56:27 | BinaryExpr | |
|
||||
| test.rs:56:23:56:27 | ... + ... | test.rs:56:19:56:27 | exit ClosureExpr (normal) | |
|
||||
| test.rs:56:27:56:27 | LiteralExpr | test.rs:56:23:56:27 | ... + ... | |
|
||||
| test.rs:57:5:57:11 | PathExpr | test.rs:57:13:57:19 | PathExpr | |
|
||||
| test.rs:57:5:57:23 | CallExpr | test.rs:55:40:58:1 | BlockExpr | |
|
||||
| test.rs:57:13:57:19 | PathExpr | test.rs:57:21:57:21 | PathExpr | |
|
||||
@@ -118,15 +118,15 @@
|
||||
| test.rs:62:36:68:5 | BlockExpr | test.rs:62:5:68:5 | exit test_if_else (normal) | |
|
||||
| test.rs:63:9:67:9 | IfExpr | test.rs:62:36:68:5 | BlockExpr | |
|
||||
| test.rs:63:12:63:12 | PathExpr | test.rs:63:17:63:17 | LiteralExpr | |
|
||||
| test.rs:63:12:63:17 | BinaryExpr | test.rs:64:13:64:13 | LiteralExpr | true |
|
||||
| test.rs:63:12:63:17 | BinaryExpr | test.rs:66:13:66:13 | PathExpr | false |
|
||||
| test.rs:63:17:63:17 | LiteralExpr | test.rs:63:12:63:17 | BinaryExpr | |
|
||||
| test.rs:63:12:63:17 | ... <= ... | test.rs:64:13:64:13 | LiteralExpr | true |
|
||||
| test.rs:63:12:63:17 | ... <= ... | test.rs:66:13:66:13 | PathExpr | false |
|
||||
| test.rs:63:17:63:17 | LiteralExpr | test.rs:63:12:63:17 | ... <= ... | |
|
||||
| test.rs:63:19:65:9 | BlockExpr | test.rs:63:9:67:9 | IfExpr | |
|
||||
| test.rs:64:13:64:13 | LiteralExpr | test.rs:63:19:65:9 | BlockExpr | |
|
||||
| test.rs:65:16:67:9 | BlockExpr | test.rs:63:9:67:9 | IfExpr | |
|
||||
| test.rs:66:13:66:13 | PathExpr | test.rs:66:17:66:17 | LiteralExpr | |
|
||||
| test.rs:66:13:66:17 | BinaryExpr | test.rs:65:16:67:9 | BlockExpr | |
|
||||
| test.rs:66:17:66:17 | LiteralExpr | test.rs:66:13:66:17 | BinaryExpr | |
|
||||
| test.rs:66:13:66:17 | ... - ... | test.rs:65:16:67:9 | BlockExpr | |
|
||||
| test.rs:66:17:66:17 | LiteralExpr | test.rs:66:13:66:17 | ... - ... | |
|
||||
| test.rs:70:5:76:5 | enter test_if_let_else | test.rs:71:12:71:26 | LetExpr | |
|
||||
| test.rs:70:5:76:5 | exit test_if_let_else (normal) | test.rs:70:5:76:5 | exit test_if_let_else | |
|
||||
| test.rs:70:48:76:5 | BlockExpr | test.rs:70:5:76:5 | exit test_if_let_else (normal) | |
|
||||
@@ -157,18 +157,18 @@
|
||||
| test.rs:86:12:86:48 | ParenExpr | test.rs:89:13:89:13 | LiteralExpr | false |
|
||||
| test.rs:86:13:86:47 | IfExpr | test.rs:86:12:86:48 | ParenExpr | |
|
||||
| test.rs:86:16:86:16 | PathExpr | test.rs:86:20:86:20 | LiteralExpr | |
|
||||
| test.rs:86:16:86:20 | BinaryExpr | test.rs:86:24:86:24 | PathExpr | true |
|
||||
| test.rs:86:16:86:20 | BinaryExpr | test.rs:86:41:86:41 | PathExpr | false |
|
||||
| test.rs:86:20:86:20 | LiteralExpr | test.rs:86:16:86:20 | BinaryExpr | |
|
||||
| test.rs:86:16:86:20 | ... < ... | test.rs:86:24:86:24 | PathExpr | true |
|
||||
| test.rs:86:16:86:20 | ... < ... | test.rs:86:41:86:41 | PathExpr | false |
|
||||
| test.rs:86:20:86:20 | LiteralExpr | test.rs:86:16:86:20 | ... < ... | |
|
||||
| test.rs:86:22:86:32 | BlockExpr | test.rs:86:13:86:47 | IfExpr | |
|
||||
| test.rs:86:24:86:24 | PathExpr | test.rs:86:29:86:30 | LiteralExpr | |
|
||||
| test.rs:86:24:86:30 | BinaryExpr | test.rs:86:22:86:32 | BlockExpr | |
|
||||
| test.rs:86:28:86:30 | PrefixExpr | test.rs:86:24:86:30 | BinaryExpr | |
|
||||
| test.rs:86:29:86:30 | LiteralExpr | test.rs:86:28:86:30 | PrefixExpr | |
|
||||
| test.rs:86:24:86:30 | ... < ... | test.rs:86:22:86:32 | BlockExpr | |
|
||||
| test.rs:86:28:86:30 | - ... | test.rs:86:24:86:30 | ... < ... | |
|
||||
| test.rs:86:29:86:30 | LiteralExpr | test.rs:86:28:86:30 | - ... | |
|
||||
| test.rs:86:39:86:47 | BlockExpr | test.rs:86:13:86:47 | IfExpr | |
|
||||
| test.rs:86:41:86:41 | PathExpr | test.rs:86:45:86:46 | LiteralExpr | |
|
||||
| test.rs:86:41:86:46 | BinaryExpr | test.rs:86:39:86:47 | BlockExpr | |
|
||||
| test.rs:86:45:86:46 | LiteralExpr | test.rs:86:41:86:46 | BinaryExpr | |
|
||||
| test.rs:86:41:86:46 | ... > ... | test.rs:86:39:86:47 | BlockExpr | |
|
||||
| test.rs:86:45:86:46 | LiteralExpr | test.rs:86:41:86:46 | ... > ... | |
|
||||
| test.rs:86:50:88:9 | BlockExpr | test.rs:86:9:90:9 | IfExpr | |
|
||||
| test.rs:87:13:87:13 | LiteralExpr | test.rs:86:50:88:9 | BlockExpr | |
|
||||
| test.rs:88:16:90:9 | BlockExpr | test.rs:86:9:90:9 | IfExpr | |
|
||||
@@ -193,12 +193,12 @@
|
||||
| test.rs:105:5:108:5 | enter test_and_operator | test.rs:106:9:106:28 | LetStmt | |
|
||||
| test.rs:105:5:108:5 | exit test_and_operator (normal) | test.rs:105:5:108:5 | exit test_and_operator | |
|
||||
| test.rs:105:61:108:5 | BlockExpr | test.rs:105:5:108:5 | exit test_and_operator (normal) | |
|
||||
| test.rs:106:9:106:28 | LetStmt | test.rs:106:17:106:27 | BinaryExpr | |
|
||||
| test.rs:106:9:106:28 | LetStmt | test.rs:106:17:106:27 | ... && ... | |
|
||||
| test.rs:106:13:106:13 | IdentPat | test.rs:107:9:107:9 | PathExpr | match, no-match |
|
||||
| test.rs:106:17:106:17 | PathExpr | test.rs:106:13:106:13 | IdentPat | false |
|
||||
| test.rs:106:17:106:17 | PathExpr | test.rs:106:22:106:22 | PathExpr | true |
|
||||
| test.rs:106:17:106:22 | BinaryExpr | test.rs:106:17:106:17 | PathExpr | |
|
||||
| test.rs:106:17:106:27 | BinaryExpr | test.rs:106:17:106:22 | BinaryExpr | |
|
||||
| test.rs:106:17:106:22 | ... && ... | test.rs:106:17:106:17 | PathExpr | |
|
||||
| test.rs:106:17:106:27 | ... && ... | test.rs:106:17:106:22 | ... && ... | |
|
||||
| test.rs:106:22:106:22 | PathExpr | test.rs:106:13:106:13 | IdentPat | false |
|
||||
| test.rs:106:22:106:22 | PathExpr | test.rs:106:27:106:27 | PathExpr | true |
|
||||
| test.rs:106:27:106:27 | PathExpr | test.rs:106:13:106:13 | IdentPat | |
|
||||
@@ -206,12 +206,12 @@
|
||||
| test.rs:110:5:113:5 | enter test_or_operator | test.rs:111:9:111:28 | LetStmt | |
|
||||
| test.rs:110:5:113:5 | exit test_or_operator (normal) | test.rs:110:5:113:5 | exit test_or_operator | |
|
||||
| test.rs:110:60:113:5 | BlockExpr | test.rs:110:5:113:5 | exit test_or_operator (normal) | |
|
||||
| test.rs:111:9:111:28 | LetStmt | test.rs:111:17:111:27 | BinaryExpr | |
|
||||
| test.rs:111:9:111:28 | LetStmt | test.rs:111:17:111:27 | ... \|\| ... | |
|
||||
| test.rs:111:13:111:13 | IdentPat | test.rs:112:9:112:9 | PathExpr | match, no-match |
|
||||
| test.rs:111:17:111:17 | PathExpr | test.rs:111:13:111:13 | IdentPat | true |
|
||||
| test.rs:111:17:111:17 | PathExpr | test.rs:111:22:111:22 | PathExpr | false |
|
||||
| test.rs:111:17:111:22 | BinaryExpr | test.rs:111:17:111:17 | PathExpr | |
|
||||
| test.rs:111:17:111:27 | BinaryExpr | test.rs:111:17:111:22 | BinaryExpr | |
|
||||
| test.rs:111:17:111:22 | ... \|\| ... | test.rs:111:17:111:17 | PathExpr | |
|
||||
| test.rs:111:17:111:27 | ... \|\| ... | test.rs:111:17:111:22 | ... \|\| ... | |
|
||||
| test.rs:111:22:111:22 | PathExpr | test.rs:111:13:111:13 | IdentPat | true |
|
||||
| test.rs:111:22:111:22 | PathExpr | test.rs:111:27:111:27 | PathExpr | false |
|
||||
| test.rs:111:27:111:27 | PathExpr | test.rs:111:13:111:13 | IdentPat | |
|
||||
@@ -219,17 +219,17 @@
|
||||
| test.rs:115:5:118:5 | enter test_or_operator_2 | test.rs:116:9:116:36 | LetStmt | |
|
||||
| test.rs:115:5:118:5 | exit test_or_operator_2 (normal) | test.rs:115:5:118:5 | exit test_or_operator_2 | |
|
||||
| test.rs:115:61:118:5 | BlockExpr | test.rs:115:5:118:5 | exit test_or_operator_2 (normal) | |
|
||||
| test.rs:116:9:116:36 | LetStmt | test.rs:116:17:116:35 | BinaryExpr | |
|
||||
| test.rs:116:9:116:36 | LetStmt | test.rs:116:17:116:35 | ... \|\| ... | |
|
||||
| test.rs:116:13:116:13 | IdentPat | test.rs:117:9:117:9 | PathExpr | match, no-match |
|
||||
| test.rs:116:17:116:17 | PathExpr | test.rs:116:13:116:13 | IdentPat | true |
|
||||
| test.rs:116:17:116:17 | PathExpr | test.rs:116:23:116:23 | PathExpr | false |
|
||||
| test.rs:116:17:116:30 | BinaryExpr | test.rs:116:17:116:17 | PathExpr | |
|
||||
| test.rs:116:17:116:35 | BinaryExpr | test.rs:116:17:116:30 | BinaryExpr | |
|
||||
| test.rs:116:17:116:30 | ... \|\| ... | test.rs:116:17:116:17 | PathExpr | |
|
||||
| test.rs:116:17:116:35 | ... \|\| ... | test.rs:116:17:116:30 | ... \|\| ... | |
|
||||
| test.rs:116:22:116:30 | ParenExpr | test.rs:116:13:116:13 | IdentPat | true |
|
||||
| test.rs:116:22:116:30 | ParenExpr | test.rs:116:35:116:35 | PathExpr | false |
|
||||
| test.rs:116:23:116:23 | PathExpr | test.rs:116:28:116:29 | LiteralExpr | |
|
||||
| test.rs:116:23:116:29 | BinaryExpr | test.rs:116:22:116:30 | ParenExpr | |
|
||||
| test.rs:116:28:116:29 | LiteralExpr | test.rs:116:23:116:29 | BinaryExpr | |
|
||||
| test.rs:116:23:116:29 | ... == ... | test.rs:116:22:116:30 | ParenExpr | |
|
||||
| test.rs:116:28:116:29 | LiteralExpr | test.rs:116:23:116:29 | ... == ... | |
|
||||
| test.rs:116:35:116:35 | PathExpr | test.rs:116:13:116:13 | IdentPat | |
|
||||
| test.rs:117:9:117:9 | PathExpr | test.rs:115:61:118:5 | BlockExpr | |
|
||||
| test.rs:122:1:128:1 | enter test_match | test.rs:123:11:123:21 | PathExpr | |
|
||||
@@ -240,7 +240,7 @@
|
||||
| test.rs:124:9:124:23 | TupleStructPat | test.rs:124:28:124:28 | PathExpr | match |
|
||||
| test.rs:124:9:124:23 | TupleStructPat | test.rs:125:9:125:23 | TupleStructPat | no-match |
|
||||
| test.rs:124:28:124:28 | PathExpr | test.rs:124:32:124:33 | LiteralExpr | |
|
||||
| test.rs:124:32:124:33 | LiteralExpr | test.rs:124:28:124:33 | BinaryExpr | |
|
||||
| test.rs:124:32:124:33 | LiteralExpr | test.rs:124:28:124:33 | ... < ... | |
|
||||
| test.rs:125:9:125:23 | TupleStructPat | test.rs:125:28:125:28 | PathExpr | match |
|
||||
| test.rs:125:9:125:23 | TupleStructPat | test.rs:126:9:126:20 | PathPat | no-match |
|
||||
| test.rs:125:28:125:28 | PathExpr | test.rs:123:5:127:5 | MatchExpr | |
|
||||
|
||||
@@ -1386,5 +1386,10 @@ module Make<LocationSig Location, InputSig<Location> Input> {
|
||||
ord = sk.getListOrder() and
|
||||
strictcount(sk.getListOrder()) > 1
|
||||
}
|
||||
|
||||
query predicate multipleToString(Node n, string s) {
|
||||
s = strictconcat(n.toString(), ",") and
|
||||
strictcount(n.toString()) > 1
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user