[STAL-1960] Implement ddsa Violation bridge #392
Merged
Add this suggestion to a batch that can be applied as a single commit.
This suggestion is invalid because no changes were made to the code.
Suggestions cannot be applied while the pull request is closed.
Suggestions cannot be applied while viewing a subset of changes.
Only one suggestion per line can be applied in a batch.
Add this suggestion to a batch that can be applied as a single commit.
Applying suggestions on deleted lines is not supported.
You must change the existing code in this line in order to create a valid suggestion.
Outdated suggestions cannot be applied.
This suggestion has been applied or marked resolved.
Suggestions cannot be applied from pending reviews.
Suggestions cannot be applied on multi-line comments.
Suggestions cannot be applied while the pull request is queued to merge.
Suggestion cannot be applied right now. Please check back later.
What problem are you trying to solve?
JavaScript rules need to report violations back to the Rust static-analysis-kernel.
What is your solution?
This PR is small, and implements the bridge that will be used to pass
Violation
objects from JavaScript to Rust. We do this by passing them indirectly through a pre-allocated globalv8::Array
:Flow
v8::Array
, attached toglobalThis
(for now, let's call it "ddsa_violations"). This array is empty.Violation
class instance:const violation = ddsa.Violation.new(/* ... */);
globalThis.ddsa_violations.push(violation)
; This mutates the globalv8::Array
.v8::Array
is drained: eachv8::Object
(Violation) that was pushed by JavaScript is removed from the array and converted to ajs::Violation<Instance>
struct.Alternatives considered
The JavaScript script could return a value.
What the reviewer should know