Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Rust: Handle self parameters in variables and SSA library #18088

Merged
merged 3 commits into from
Nov 27, 2024

Conversation

paldepind
Copy link
Contributor

Changes in this PR:

  • Handle self parameters as variables.
  • Small refactor.

@github-actions github-actions bot added the Rust Pull requests that update Rust code label Nov 25, 2024
@paldepind paldepind changed the title Rust self parameters Rust: Handle self parameters in variables and SSA library Nov 25, 2024
@paldepind paldepind marked this pull request as ready for review November 25, 2024 18:09
Copy link
Contributor

@hvitved hvitved left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I assume you also meant to add a commit for supporting self variables, and not just a test?

@paldepind
Copy link
Contributor Author

PR now updated with the actual commit that it was supposed to contain 😅

Copy link
Contributor

@hvitved hvitved left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Looks great, some minor comments.

// exclude parameters from function pointer types (e.g. `x` in `fn(x: i32) -> i32`)
not exists(FnPtrType fp | fp.getParamList().getParam(_).getPat() = p)
private predicate variableDecl(AstNode definingNode, AstNode p, string name) {
exists(SelfParam sp | sp = p |
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

For patterns like this, I prefer p = any(SelfParam sp |

Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

That is definitely nicer to read!

not exists(Function f | not f.hasBody() and f.getParamList().getSelfParam() = sp)
)
or
exists(IdentPat pat | pat = p |
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Same

/**
* Gets the pattern that declares this variable.
* Gets the pattern that declares this variable, if one exists.
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Nit: The standard phrasing tends to be "if any".

@@ -135,7 +147,9 @@ module Impl {
predicate isCaptured() { this.getAnAccess().isCapture() }

/** Gets the parameter that introduces this variable, if any. */
Param getParameter() { parameterDeclInScope(result, this, _) }
ParamBase getParameter() {
result = this.getSelfParam() or result = getAVariablePatAncestor(this).getParentNode()
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Relying on getParentNode() is generally not good, as it is basically an untyped interface. So I would prefer if we could revert it back to using parameterDeclInScope.

Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I've now removed getParentNode on the rhs. and added getPat on the lhs.

@paldepind paldepind merged commit 8f886c6 into github:main Nov 27, 2024
15 checks passed
@paldepind
Copy link
Contributor Author

DCA looks fine. Thanks for starting the run.

@paldepind paldepind deleted the rust-self-parameters branch November 27, 2024 07:44
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
Rust Pull requests that update Rust code
Projects
None yet
Development

Successfully merging this pull request may close these issues.

2 participants