boa icon indicating copy to clipboard operation
boa copied to clipboard

Fix spread arguments in function calls

Open raskad opened this issue 2 years ago • 2 comments

Currently we only spread spread-expressions if they are the last argument in the function call. With this fix all arguments are spread if needed. The downside is that an array object is allocated to store all arguments if the arguments contain a spread-expression. But with dense indexed properties inplemented in #2167 this should be reasonably fast.

raskad avatar Aug 03 '22 22:08 raskad

Test262 conformance changes

VM implementation

Test result main count PR count difference
Total 91,573 91,573 0
Passed 64,752 64,828 +76
Ignored 14,606 14,606 0
Failed 12,215 12,139 -76
Panics 0 0 0
Conformance 70.71% 70.79% +0.08%
Fixed tests (76):
test/language/expressions/call/eval-spread-empty-leading.js [strict mode] (previously Failed)
test/language/expressions/call/eval-spread-empty-leading.js (previously Failed)
test/language/expressions/call/spread-mult-literal.js [strict mode] (previously Failed)
test/language/expressions/call/spread-mult-literal.js (previously Failed)
test/language/expressions/new/spread-mult-literal.js [strict mode] (previously Failed)
test/language/expressions/new/spread-mult-literal.js (previously Failed)
test/language/expressions/super/call-spread-mult-literal.js [strict mode] (previously Failed)
test/language/expressions/super/call-spread-mult-literal.js (previously Failed)
test/language/arguments-object/async-gen-named-func-expr-args-trailing-comma-spread-operator.js [strict mode] (previously Failed)
test/language/arguments-object/async-gen-named-func-expr-args-trailing-comma-spread-operator.js (previously Failed)
test/language/arguments-object/cls-expr-async-private-gen-meth-args-trailing-comma-spread-operator.js [strict mode] (previously Failed)
test/language/arguments-object/cls-expr-async-private-gen-meth-args-trailing-comma-spread-operator.js (previously Failed)
test/language/arguments-object/cls-decl-async-gen-meth-args-trailing-comma-spread-operator.js [strict mode] (previously Failed)
test/language/arguments-object/cls-decl-async-gen-meth-args-trailing-comma-spread-operator.js (previously Failed)
test/language/arguments-object/cls-decl-private-gen-meth-static-args-trailing-comma-spread-operator.js [strict mode] (previously Failed)
test/language/arguments-object/cls-decl-private-gen-meth-static-args-trailing-comma-spread-operator.js (previously Failed)
test/language/arguments-object/cls-decl-meth-static-args-trailing-comma-spread-operator.js [strict mode] (previously Failed)
test/language/arguments-object/cls-decl-meth-static-args-trailing-comma-spread-operator.js (previously Failed)
test/language/arguments-object/cls-expr-gen-meth-static-args-trailing-comma-spread-operator.js [strict mode] (previously Failed)
test/language/arguments-object/cls-expr-gen-meth-static-args-trailing-comma-spread-operator.js (previously Failed)
test/language/arguments-object/cls-expr-private-meth-args-trailing-comma-spread-operator.js [strict mode] (previously Failed)
test/language/arguments-object/cls-expr-private-meth-args-trailing-comma-spread-operator.js (previously Failed)
test/language/arguments-object/cls-decl-private-meth-static-args-trailing-comma-spread-operator.js [strict mode] (previously Failed)
test/language/arguments-object/cls-decl-private-meth-static-args-trailing-comma-spread-operator.js (previously Failed)
test/language/arguments-object/cls-expr-private-gen-meth-static-args-trailing-comma-spread-operator.js [strict mode] (previously Failed)
test/language/arguments-object/cls-expr-private-gen-meth-static-args-trailing-comma-spread-operator.js (previously Failed)
test/language/arguments-object/async-gen-meth-args-trailing-comma-spread-operator.js [strict mode] (previously Failed)
test/language/arguments-object/async-gen-meth-args-trailing-comma-spread-operator.js (previously Failed)
test/language/arguments-object/func-decl-args-trailing-comma-spread-operator.js [strict mode] (previously Failed)
test/language/arguments-object/func-decl-args-trailing-comma-spread-operator.js (previously Failed)
test/language/arguments-object/cls-decl-async-gen-func-args-trailing-comma-spread-operator.js [strict mode] (previously Failed)
test/language/arguments-object/cls-decl-async-gen-func-args-trailing-comma-spread-operator.js (previously Failed)
test/language/arguments-object/cls-decl-async-gen-meth-static-args-trailing-comma-spread-operator.js [strict mode] (previously Failed)
test/language/arguments-object/cls-decl-async-gen-meth-static-args-trailing-comma-spread-operator.js (previously Failed)
test/language/arguments-object/cls-expr-private-meth-static-args-trailing-comma-spread-operator.js [strict mode] (previously Failed)
test/language/arguments-object/cls-expr-private-meth-static-args-trailing-comma-spread-operator.js (previously Failed)
test/language/arguments-object/gen-meth-args-trailing-comma-spread-operator.js [strict mode] (previously Failed)
test/language/arguments-object/gen-meth-args-trailing-comma-spread-operator.js (previously Failed)
test/language/arguments-object/cls-decl-gen-meth-static-args-trailing-comma-spread-operator.js [strict mode] (previously Failed)
test/language/arguments-object/cls-decl-gen-meth-static-args-trailing-comma-spread-operator.js (previously Failed)
test/language/arguments-object/cls-expr-async-gen-func-args-trailing-comma-spread-operator.js [strict mode] (previously Failed)
test/language/arguments-object/cls-expr-async-gen-func-args-trailing-comma-spread-operator.js (previously Failed)
test/language/arguments-object/cls-decl-meth-args-trailing-comma-spread-operator.js [strict mode] (previously Failed)
test/language/arguments-object/cls-decl-meth-args-trailing-comma-spread-operator.js (previously Failed)
test/language/arguments-object/cls-expr-async-gen-meth-args-trailing-comma-spread-operator.js [strict mode] (previously Failed)
test/language/arguments-object/cls-expr-async-gen-meth-args-trailing-comma-spread-operator.js (previously Failed)
test/language/arguments-object/gen-func-expr-args-trailing-comma-spread-operator.js [strict mode] (previously Failed)
test/language/arguments-object/gen-func-expr-args-trailing-comma-spread-operator.js (previously Failed)
test/language/arguments-object/func-expr-args-trailing-comma-spread-operator.js [strict mode] (previously Failed)
test/language/arguments-object/func-expr-args-trailing-comma-spread-operator.js (previously Failed)
test/language/arguments-object/cls-expr-meth-args-trailing-comma-spread-operator.js [strict mode] (previously Failed)
test/language/arguments-object/cls-expr-meth-args-trailing-comma-spread-operator.js (previously Failed)
test/language/arguments-object/cls-expr-private-gen-meth-args-trailing-comma-spread-operator.js [strict mode] (previously Failed)
test/language/arguments-object/cls-expr-private-gen-meth-args-trailing-comma-spread-operator.js (previously Failed)
test/language/arguments-object/cls-decl-async-private-gen-meth-args-trailing-comma-spread-operator.js [strict mode] (previously Failed)
test/language/arguments-object/cls-decl-async-private-gen-meth-args-trailing-comma-spread-operator.js (previously Failed)
test/language/arguments-object/cls-decl-private-meth-args-trailing-comma-spread-operator.js [strict mode] (previously Failed)
test/language/arguments-object/cls-decl-private-meth-args-trailing-comma-spread-operator.js (previously Failed)
test/language/arguments-object/cls-expr-async-gen-meth-static-args-trailing-comma-spread-operator.js [strict mode] (previously Failed)
test/language/arguments-object/cls-expr-async-gen-meth-static-args-trailing-comma-spread-operator.js (previously Failed)
test/language/arguments-object/cls-decl-async-private-gen-meth-static-args-trailing-comma-spread-operator.js [strict mode] (previously Failed)
test/language/arguments-object/cls-decl-async-private-gen-meth-static-args-trailing-comma-spread-operator.js (previously Failed)
test/language/arguments-object/cls-decl-private-gen-meth-args-trailing-comma-spread-operator.js [strict mode] (previously Failed)
test/language/arguments-object/cls-decl-private-gen-meth-args-trailing-comma-spread-operator.js (previously Failed)
test/language/arguments-object/cls-expr-async-private-gen-meth-static-args-trailing-comma-spread-operator.js [strict mode] (previously Failed)
test/language/arguments-object/cls-expr-async-private-gen-meth-static-args-trailing-comma-spread-operator.js (previously Failed)
test/language/arguments-object/cls-expr-gen-meth-args-trailing-comma-spread-operator.js [strict mode] (previously Failed)
test/language/arguments-object/cls-expr-gen-meth-args-trailing-comma-spread-operator.js (previously Failed)
test/language/arguments-object/gen-func-decl-args-trailing-comma-spread-operator.js [strict mode] (previously Failed)
test/language/arguments-object/gen-func-decl-args-trailing-comma-spread-operator.js (previously Failed)
test/language/arguments-object/cls-expr-meth-static-args-trailing-comma-spread-operator.js [strict mode] (previously Failed)
test/language/arguments-object/cls-expr-meth-static-args-trailing-comma-spread-operator.js (previously Failed)
test/language/arguments-object/meth-args-trailing-comma-spread-operator.js [strict mode] (previously Failed)
test/language/arguments-object/meth-args-trailing-comma-spread-operator.js (previously Failed)
test/language/arguments-object/cls-decl-gen-meth-args-trailing-comma-spread-operator.js [strict mode] (previously Failed)
test/language/arguments-object/cls-decl-gen-meth-args-trailing-comma-spread-operator.js (previously Failed)

github-actions[bot] avatar Aug 03 '22 23:08 github-actions[bot]

Codecov Report

Merging #2216 (7018a0c) into main (5909e9a) will decrease coverage by 0.02%. The diff coverage is 38.46%.

@@            Coverage Diff             @@
##             main    #2216      +/-   ##
==========================================
- Coverage   41.54%   41.51%   -0.03%     
==========================================
  Files         234      234              
  Lines       21891    21878      -13     
==========================================
- Hits         9094     9083      -11     
+ Misses      12797    12795       -2     
Impacted Files Coverage Δ
boa_engine/src/vm/code_block.rs 32.80% <ø> (ø)
boa_engine/src/vm/opcode.rs 50.00% <ø> (ø)
boa_engine/src/bytecompiler/mod.rs 29.35% <32.14%> (-0.10%) :arrow_down:
boa_engine/src/object/property_map.rs 27.34% <50.00%> (+0.18%) :arrow_up:
boa_engine/src/vm/mod.rs 46.63% <55.55%> (-0.09%) :arrow_down:

Help us with your feedback. Take ten seconds to tell us how you rate us. Have a feature suggestion? Share it here.

codecov[bot] avatar Aug 03 '22 23:08 codecov[bot]

bors r+

HalidOdat avatar Aug 17 '22 10:08 HalidOdat

Pull request successfully merged into main.

Build succeeded:

bors[bot] avatar Aug 17 '22 11:08 bors[bot]