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

Move AStatement mutable members into isolated Input/Output objects #53348

Merged
merged 27 commits into from
Mar 13, 2020

Conversation

jdconrad
Copy link
Contributor

This is the follow up to #53075, isolating the mutable data on the statement nodes as the referenced change did the expression nodes.

This is a step toward the long-term goal of making the "user" trees nodes immutable. This change isolates the mutable data for statement nodes in the "user" tree during the semantic (analysis) phase by moving the mutable data into Input and Output objects. These objects are created locally during the semantic phase to share information required for semantic checking between parent-child nodes.

Note that for this change, Input and Output are still stored in a mutable way on the statement nodes. This will not be the case once the semantic (analysis) phase and ir generation (write) phase are combined in a future change.

Relates #49869

@jdconrad jdconrad added :Core/Infra/Scripting Scripting abstractions, Painless, and Mustache >refactoring v8.0.0 labels Mar 10, 2020
@elasticmachine
Copy link
Collaborator

Pinging @elastic/es-core-infra (:Core/Infra/Scripting)

@jdconrad
Copy link
Contributor Author

@elasticmachine run elasticsearch-ci/2

* infinite loops during runtime.
*/
int statementCount = 0;
// TODO: remove placeholders once analysis and write are combined into build
Copy link
Contributor

Choose a reason for hiding this comment

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

Can you ref issues in TODO's like this? eg TODO: ..., see #12345.

Copy link
Contributor Author

Choose a reason for hiding this comment

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

void analyze(ScriptRoot scriptRoot, Scope scope) {
Output analyze(ScriptRoot scriptRoot, Scope scope, Input input) {
this.input = input;
output = new Output();
Copy link
Contributor

Choose a reason for hiding this comment

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

Consider creating output close to it's first use, at line 68.

Copy link
Contributor Author

Choose a reason for hiding this comment

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

Done.

void analyze(ScriptRoot scriptRoot, Scope scope) {
Output analyze(ScriptRoot scriptRoot, Scope scope, Input input) {
this.input = input;
output = new Output();
Copy link
Contributor

Choose a reason for hiding this comment

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

Same as above, consider changing where this creation occurs. It's about ~50 lines away from actual use.

Copy link
Contributor Author

Choose a reason for hiding this comment

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

Done.

@jdconrad
Copy link
Contributor Author

@stu-elastic Thanks for the review! Will address your comments soon.

@jdconrad
Copy link
Contributor Author

@rjernst Thanks for the review. Will commit as soon as CI completes.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
:Core/Infra/Scripting Scripting abstractions, Painless, and Mustache >refactoring v8.0.0-alpha1
Projects
None yet
Development

Successfully merging this pull request may close these issues.

5 participants