Skip to content

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

Merged
jdconrad merged 27 commits intoelastic:masterfrom
jdconrad:trees13
Mar 13, 2020
Merged

Move AStatement mutable members into isolated Input/Output objects#53348
jdconrad merged 27 commits intoelastic:masterfrom
jdconrad:trees13

Conversation

@jdconrad
Copy link
Copy Markdown
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
@jdconrad jdconrad requested review from rjernst and stu-elastic March 10, 2020 16:01
@elasticmachine
Copy link
Copy Markdown
Collaborator

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

@jdconrad
Copy link
Copy Markdown
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
Copy Markdown
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
Copy Markdown
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
Copy Markdown
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
Copy Markdown
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
Copy Markdown
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
Copy Markdown
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
Copy Markdown
Contributor Author

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

@jdconrad
Copy link
Copy Markdown
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