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

Fix runtime cost ref.Val stack #517

Merged
merged 3 commits into from Mar 22, 2022
Merged

Fix runtime cost ref.Val stack #517

merged 3 commits into from Mar 22, 2022

Conversation

jpbetz
Copy link
Collaborator

@jpbetz jpbetz commented Mar 22, 2022

I discovered that the stack that I had introduced in #494 as part of the introduction of runtime cost budgeting was not being managed correctly. Specifically, not all stack items pushed were being properly popped.

This PR fixes the stack by tracking the expression IDs associated with each stack value. The pop operations then specify the expression IDs of the stack items they wish to pop. If any spurious values are above the stack item being popped, they are removed from the stack as part of the pop.

This solves a bunch of problems and generally makes the stack much safer to use.

I have also improved the stack handling overall, which helps keep memory usage to a minimum. The only remaining case where I am certain that spurious stack items are left behind is the case where top-level variable lookup not being accounted for correctly.

@jpbetz
Copy link
Collaborator Author

jpbetz commented Mar 22, 2022

/assign @TristonianJones

@jpbetz
Copy link
Collaborator Author

jpbetz commented Mar 22, 2022

Feedback applied @TristonianJones

interpreter/runtimecost.go Show resolved Hide resolved
// the stack.
// WARNING: It is possible for multiple expressions with the same ID to exist (due to how macros are implemented) so it's
// possible that a dropped ID will remain on the stack. They should be removed when IDs on the stack are popped.
func (s *refValStack) popArgs(args []Interpretable) ([]ref.Val, bool) {
Copy link
Collaborator

Choose a reason for hiding this comment

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

nit: consider calling this dropArgs

@jpbetz jpbetz merged commit ffa9b84 into google:master Mar 22, 2022
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

Successfully merging this pull request may close these issues.

None yet

2 participants