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

Add default parameter support #1273

Merged
merged 6 commits into from
May 27, 2021
Merged

Add default parameter support #1273

merged 6 commits into from
May 27, 2021

Conversation

0x7D2B
Copy link
Contributor

@0x7D2B 0x7D2B commented May 22, 2021

This PR is a rewrite of #988, implementing default parameter support and merging call and construct implementations into a single internal method.


Modern JavaScript has support for default parameters in functions. Boa has support for the syntax but currently default parameters are ignored. For example, this code:

function test(a, b = 2, c = a + b) {
    console.log(a, b, c);
}
test()
test(1)

Result produced by current Boa master:

undefined undefined undefined
1 undefined undefined
undefined

Expected result:

undefined 2 NaN
1 2 3
undefined

@github-actions
Copy link

github-actions bot commented May 22, 2021

Test262 conformance changes:

Test result master count PR count difference
Total 78,873 78,873 0
Passed 26,498 26,533 +35
Ignored 15,604 15,604 0
Failed 36,771 36,736 -35
Panics 27 19 -8
Conformance 33.60% 33.64% +0.04%

@0x7D2B 0x7D2B added execution Issues or PRs related to code execution rust Pull requests that update Rust code technical debt labels May 22, 2021
@0x7D2B 0x7D2B requested review from RageKnify and Razican May 22, 2021 12:55
Copy link
Member

@RageKnify RageKnify left a comment

Choose a reason for hiding this comment

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

Noted a few things that are a bit off.
I'll give a more thorough look comparing with the spec, but the numbers seem to indicate that it's great.

boa/src/object/gcobject.rs Outdated Show resolved Hide resolved
boa/src/object/gcobject.rs Outdated Show resolved Hide resolved
boa/src/object/gcobject.rs Outdated Show resolved Hide resolved
@github-actions
Copy link

Benchmark for a84880f

Click to view benchmark
Test PR Benchmark Master Benchmark %
Arithmetic operations (Execution) 309.4±11.93ns 311.1±11.62ns -0.55%
Arithmetic operations (Full) 237.7±10.65µs 234.9±8.10µs +1.19%
Array access (Execution) 5.4±0.24µs 5.4±0.20µs 0.00%
Array access (Full) 263.1±13.83µs 264.0±11.43µs -0.34%
Array creation (Execution) 2.6±0.14ms 2.6±0.16ms 0.00%
Array creation (Full) 2.7±0.19ms 2.8±0.09ms -3.57%
Array pop (Execution) 793.7±29.31µs 785.6±25.24µs +1.03%
Array pop (Full) 1270.3±38.81µs 1258.1±58.76µs +0.97%
Boolean Object Access (Execution) 4.6±0.17µs 4.5±0.16µs +2.22%
Boolean Object Access (Full) 253.6±10.06µs 262.5±16.05µs -3.39%
Clean js (Execution) 579.1±35.26µs 583.0±26.65µs -0.67%
Clean js (Full) 843.5±32.13µs 849.9±28.79µs -0.75%
Clean js (Parser) 35.5±1.25µs 35.1±1.65µs +1.14%
Create Realm 379.4±25.94ns 402.6±27.83ns -5.76%
Dynamic Object Property Access (Execution) 4.4±0.16µs 4.5±0.20µs -2.22%
Dynamic Object Property Access (Full) 260.1±16.28µs 252.2±10.90µs +3.13%
Expression (Parser) 6.5±0.47µs 6.4±0.42µs +1.56%
Fibonacci (Execution) 674.0±28.09µs 665.1±29.63µs +1.34%
Fibonacci (Full) 958.3±40.02µs 927.1±36.16µs +3.37%
For loop (Execution) 18.9±0.76µs 19.7±0.74µs -4.06%
For loop (Full) 267.0±11.48µs 271.6±11.73µs -1.69%
For loop (Parser) 17.8±1.12µs 17.2±0.76µs +3.49%
Goal Symbols (Parser) 12.2±0.67µs 12.6±0.61µs -3.17%
Hello World (Parser) 3.6±0.18µs 3.6±0.18µs 0.00%
Long file (Parser) 722.3±31.79ns 703.6±28.70ns +2.66%
Mini js (Execution) 534.6±24.59µs 509.9±20.99µs +4.84%
Mini js (Full) 797.8±35.12µs 825.6±43.46µs -3.37%
Mini js (Parser) 32.1±1.44µs 32.0±1.62µs +0.31%
Number Object Access (Execution) 3.8±0.19µs 3.7±0.15µs +2.70%
Number Object Access (Full) 251.9±9.89µs 249.8±11.10µs +0.84%
Object Creation (Execution) 3.8±0.16µs 3.8±0.18µs 0.00%
Object Creation (Full) 252.6±11.97µs 252.4±10.57µs +0.08%
RegExp (Execution) 9.5±0.39µs 9.6±0.44µs -1.04%
RegExp (Full) 271.0±17.43µs 275.4±20.69µs -1.60%
RegExp Literal (Execution) 9.5±0.52µs 9.5±0.48µs 0.00%
RegExp Literal (Full) 277.8±10.79µs 260.9±13.32µs +6.48%
RegExp Literal Creation (Execution) 8.2±0.40µs 8.3±0.40µs -1.20%
RegExp Literal Creation (Full) 269.5±10.43µs 268.2±11.70µs +0.48%
Static Object Property Access (Execution) 4.2±0.29µs 3.9±0.17µs +7.69%
Static Object Property Access (Full) 252.6±10.37µs 260.8±11.11µs -3.14%
String Object Access (Execution) 6.5±0.35µs 6.4±0.32µs +1.56%
String Object Access (Full) 258.9±11.92µs 264.8±11.25µs -2.23%
String comparison (Execution) 5.5±0.25µs 5.6±0.19µs -1.79%
String comparison (Full) 258.4±11.91µs 258.7±13.17µs -0.12%
String concatenation (Execution) 4.6±0.24µs 4.6±0.22µs 0.00%
String concatenation (Full) 253.4±18.97µs 252.1±11.74µs +0.52%
String copy (Execution) 3.4±0.19µs 3.4±0.15µs 0.00%
String copy (Full) 243.3±8.40µs 247.8±12.87µs -1.82%
Symbols (Execution) 3.0±0.19µs 2.9±0.15µs +3.45%
Symbols (Full) 238.6±11.07µs 240.3±10.49µs -0.71%

@0x7D2B 0x7D2B requested a review from RageKnify May 22, 2021 13:21
@github-actions
Copy link

Benchmark for 342aa2c

Click to view benchmark
Test PR Benchmark Master Benchmark %
Arithmetic operations (Execution) 321.1±9.71ns 314.6±7.39ns +2.07%
Arithmetic operations (Full) 259.4±9.92µs 257.4±11.01µs +0.78%
Array access (Execution) 6.2±0.25µs 6.0±0.26µs +3.33%
Array access (Full) 289.3±27.26µs 283.0±11.81µs +2.23%
Array creation (Execution) 2.4±0.09ms 2.4±0.09ms 0.00%
Array creation (Full) 2.7±0.12ms 2.7±0.09ms 0.00%
Array pop (Execution) 771.7±25.73µs 767.2±28.71µs +0.59%
Array pop (Full) 1215.0±41.44µs 1228.5±50.87µs -1.10%
Boolean Object Access (Execution) 5.0±0.23µs 5.0±0.29µs 0.00%
Boolean Object Access (Full) 278.1±8.70µs 277.1±9.91µs +0.36%
Clean js (Execution) 606.3±23.37µs 616.7±25.21µs -1.69%
Clean js (Full) 884.0±33.49µs 901.1±55.85µs -1.90%
Clean js (Parser) 37.9±1.52µs 37.4±1.18µs +1.34%
Create Realm 373.8±9.53ns 377.4±16.53ns -0.95%
Dynamic Object Property Access (Execution) 5.2±0.36µs 4.9±0.16µs +6.12%
Dynamic Object Property Access (Full) 278.7±7.55µs 278.6±13.73µs +0.04%
Expression (Parser) 6.3±0.26µs 6.5±0.20µs -3.08%
Fibonacci (Execution) 777.2±31.75µs 758.1±23.99µs +2.52%
Fibonacci (Full) 1049.6±26.86µs 1042.7±39.75µs +0.66%
For loop (Execution) 21.0±1.17µs 20.7±0.58µs +1.45%
For loop (Full) 293.7±13.22µs 289.9±10.45µs +1.31%
For loop (Parser) 18.4±1.88µs 17.9±0.51µs +2.79%
Goal Symbols (Parser) 12.3±0.39µs 12.6±0.52µs -2.38%
Hello World (Parser) 3.5±0.10µs 3.6±0.10µs -2.78%
Long file (Parser) 695.9±22.51ns 700.1±41.78ns -0.60%
Mini js (Execution) 535.5±16.85µs 561.4±38.51µs -4.61%
Mini js (Full) 831.2±71.43µs 851.7±60.39µs -2.41%
Mini js (Parser) 32.8±0.90µs 33.0±1.34µs -0.61%
Number Object Access (Execution) 4.0±0.36µs 3.9±0.10µs +2.56%
Number Object Access (Full) 270.8±10.22µs 273.4±14.04µs -0.95%
Object Creation (Execution) 4.4±0.12µs 4.4±0.20µs 0.00%
Object Creation (Full) 282.0±11.53µs 286.5±16.16µs -1.57%
RegExp (Execution) 10.4±0.32µs 10.5±0.41µs -0.95%
RegExp (Full) 287.2±7.62µs 290.3±14.12µs -1.07%
RegExp Literal (Execution) 10.4±0.37µs 10.5±0.55µs -0.95%
RegExp Literal (Full) 291.4±13.94µs 297.9±17.41µs -2.18%
RegExp Literal Creation (Execution) 9.2±0.66µs 9.1±0.40µs +1.10%
RegExp Literal Creation (Full) 285.6±13.59µs 279.7±9.81µs +2.11%
Static Object Property Access (Execution) 4.7±0.21µs 4.6±0.39µs +2.17%
Static Object Property Access (Full) 275.8±10.17µs 277.4±9.14µs -0.58%
String Object Access (Execution) 6.7±0.33µs 6.8±0.17µs -1.47%
String Object Access (Full) 274.7±6.06µs 282.8±11.48µs -2.86%
String comparison (Execution) 6.2±0.33µs 6.1±0.17µs +1.64%
String comparison (Full) 276.1±7.22µs 280.2±14.07µs -1.46%
String concatenation (Execution) 5.0±0.23µs 5.0±0.16µs 0.00%
String concatenation (Full) 273.8±7.31µs 274.6±10.55µs -0.29%
String copy (Execution) 3.9±0.20µs 3.9±0.12µs 0.00%
String copy (Full) 267.1±14.09µs 273.0±19.09µs -2.16%
Symbols (Execution) 3.2±0.09µs 3.3±0.12µs -3.03%
Symbols (Full) 256.1±8.17µs 259.2±6.99µs -1.20%

@github-actions
Copy link

Benchmark for 2eb9f23

Click to view benchmark
Test PR Benchmark Master Benchmark %
Arithmetic operations (Execution) 301.5±3.96ns 303.3±0.20ns -0.59%
Arithmetic operations (Full) 230.1±0.45µs 230.7±0.51µs -0.26%
Array access (Execution) 5.2±0.02µs 5.3±0.06µs -1.89%
Array access (Full) 251.3±0.80µs 248.4±0.81µs +1.17%
Array creation (Execution) 2.4±0.00ms 2.2±0.00ms +9.09%
Array creation (Full) 2.5±0.00ms 2.7±0.00ms -7.41%
Array pop (Execution) 771.0±2.11µs 732.8±1.69µs +5.21%
Array pop (Full) 1136.9±1.88µs 1187.7±3.58µs -4.28%
Boolean Object Access (Execution) 4.5±0.01µs 4.4±0.00µs +2.27%
Boolean Object Access (Full) 247.4±0.50µs 246.9±0.34µs +0.20%
Clean js (Execution) 550.4±6.56µs 552.5±3.26µs -0.38%
Clean js (Full) 816.8±3.85µs 836.5±3.48µs -2.36%
Clean js (Parser) 36.1±0.42µs 36.3±0.05µs -0.55%
Create Realm 357.5±1.30ns 361.3±3.98ns -1.05%
Dynamic Object Property Access (Execution) 4.2±0.01µs 4.3±0.01µs -2.33%
Dynamic Object Property Access (Full) 246.1±0.56µs 249.0±0.50µs -1.16%
Expression (Parser) 6.2±0.01µs 6.1±0.00µs +1.64%
Fibonacci (Execution) 653.5±1.33µs 654.6±106.48µs -0.17%
Fibonacci (Full) 936.4±3.36µs 913.6±1.80µs +2.50%
For loop (Execution) 18.5±0.04µs 18.4±0.02µs +0.54%
For loop (Full) 261.1±0.38µs 258.7±0.56µs +0.93%
For loop (Parser) 17.2±0.03µs 17.4±0.03µs -1.15%
Goal Symbols (Parser) 12.4±0.03µs 12.5±0.05µs -0.80%
Hello World (Parser) 3.4±0.04µs 3.4±0.01µs 0.00%
Long file (Parser) 719.9±5.85ns 710.2±7.61ns +1.37%
Mini js (Execution) 498.5±6.87µs 491.7±2.09µs +1.38%
Mini js (Full) 762.0±3.93µs 770.5±2.49µs -1.10%
Mini js (Parser) 31.4±0.33µs 31.5±0.03µs -0.32%
Number Object Access (Execution) 3.6±0.00µs 3.4±0.00µs +5.88%
Number Object Access (Full) 239.9±0.50µs 239.9±0.40µs 0.00%
Object Creation (Execution) 3.6±0.01µs 3.6±0.01µs 0.00%
Object Creation (Full) 244.7±1.86µs 244.2±2.01µs +0.20%
RegExp (Execution) 9.3±0.03µs 9.3±0.03µs 0.00%
RegExp (Full) 255.5±0.36µs 258.8±0.40µs -1.28%
RegExp Literal (Execution) 9.2±0.02µs 9.3±0.03µs -1.08%
RegExp Literal (Full) 253.8±0.29µs 256.4±0.64µs -1.01%
RegExp Literal Creation (Execution) 8.0±0.04µs 8.1±0.03µs -1.23%
RegExp Literal Creation (Full) 245.8±0.29µs 248.5±0.40µs -1.09%
Static Object Property Access (Execution) 3.9±0.02µs 3.8±0.01µs +2.63%
Static Object Property Access (Full) 245.9±1.87µs 243.9±0.39µs +0.82%
String Object Access (Execution) 6.2±0.10µs 6.2±0.02µs 0.00%
String Object Access (Full) 247.7±0.37µs 247.5±0.28µs +0.08%
String comparison (Execution) 5.5±0.01µs 5.5±0.02µs 0.00%
String comparison (Full) 247.5±1.68µs 246.3±0.69µs +0.49%
String concatenation (Execution) 4.4±0.01µs 4.3±0.01µs +2.33%
String concatenation (Full) 242.7±0.50µs 243.3±0.37µs -0.25%
String copy (Execution) 3.3±0.01µs 3.4±0.01µs -2.94%
String copy (Full) 236.0±0.24µs 234.0±0.29µs +0.85%
Symbols (Execution) 2.8±0.01µs 2.8±0.01µs 0.00%
Symbols (Full) 231.6±0.49µs 230.3±0.64µs +0.56%

Copy link
Member

@Razican Razican left a comment

Choose a reason for hiding this comment

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

Looking good, I have a couple of questions / suggestions.

boa/src/object/gcobject.rs Show resolved Hide resolved
boa/src/object/gcobject.rs Show resolved Hide resolved
boa/src/object/gcobject.rs Show resolved Hide resolved
@Razican Razican requested a review from HalidOdat May 22, 2021 14:14
@Razican Razican added this to the v0.12.0 milestone May 22, 2021
@Razican
Copy link
Member

Razican commented May 22, 2021

This seems to fix #1062.

@Razican Razican linked an issue May 22, 2021 that may be closed by this pull request
Copy link
Member

@RageKnify RageKnify left a comment

Choose a reason for hiding this comment

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

Unsure about something, other than that it looks good.

boa/src/object/gcobject.rs Outdated Show resolved Hide resolved
Co-authored-by: Iban Eguia <razican@protonmail.ch>
@0x7D2B
Copy link
Contributor Author

0x7D2B commented May 23, 2021

This seems to fix #1062.

Only a partial fix - the issue doesn't happen when default parameters are used since arguments is declared in a different environment but it still happens without them.

@github-actions
Copy link

Benchmark for e02d2f7

Click to view benchmark
Test PR Benchmark Master Benchmark %
Arithmetic operations (Execution) 354.4±7.75ns 359.1±3.32ns -1.31%
Arithmetic operations (Full) 257.5±7.91µs 266.7±4.76µs -3.45%
Array access (Execution) 5.9±0.18µs 6.2±0.08µs -4.84%
Array access (Full) 274.6±6.97µs 287.5±3.77µs -4.49%
Array creation (Execution) 2.8±0.07ms 2.9±0.03ms -3.45%
Array creation (Full) 3.1±0.09ms 3.2±0.04ms -3.13%
Array pop (Execution) 911.0±20.99µs 921.5±11.22µs -1.14%
Array pop (Full) 1371.2±65.84µs 1406.3±18.86µs -2.50%
Boolean Object Access (Execution) 5.1±0.32µs 5.2±0.08µs -1.92%
Boolean Object Access (Full) 276.4±6.83µs 280.9±3.83µs -1.60%
Clean js (Execution) 627.7±16.74µs 655.6±9.43µs -4.26%
Clean js (Full) 948.8±30.75µs 957.0±14.07µs -0.86%
Clean js (Parser) 40.8±0.32µs 40.5±0.45µs +0.74%
Create Realm 378.1±12.50ns 418.0±6.50ns -9.55%
Dynamic Object Property Access (Execution) 5.0±0.14µs 5.0±0.07µs 0.00%
Dynamic Object Property Access (Full) 279.2±13.38µs 283.6±4.35µs -1.55%
Expression (Parser) 7.2±0.58µs 7.1±0.13µs +1.41%
Fibonacci (Execution) 753.3±18.58µs 753.3±8.41µs 0.00%
Fibonacci (Full) 1014.3±30.23µs 1056.1±9.58µs -3.96%
For loop (Execution) 21.5±0.35µs 21.4±0.35µs +0.47%
For loop (Full) 281.9±7.13µs 296.6±3.93µs -4.96%
For loop (Parser) 20.0±0.77µs 19.5±0.28µs +2.56%
Goal Symbols (Parser) 14.2±0.10µs 13.9±0.24µs +2.16%
Hello World (Parser) 3.7±0.09µs 3.9±0.06µs -5.13%
Long file (Parser) 798.8±6.04ns 778.2±11.64ns +2.65%
Mini js (Execution) 560.3±20.21µs 591.6±8.48µs -5.29%
Mini js (Full) 865.7±28.04µs 896.4±10.86µs -3.42%
Mini js (Parser) 35.1±0.61µs 35.2±0.64µs -0.28%
Number Object Access (Execution) 3.9±0.11µs 4.0±0.04µs -2.50%
Number Object Access (Full) 276.9±9.73µs 277.5±4.28µs -0.22%
Object Creation (Execution) 4.0±0.11µs 4.3±0.05µs -6.98%
Object Creation (Full) 263.4±7.52µs 279.4±4.15µs -5.73%
RegExp (Execution) 11.3±0.33µs 11.6±0.15µs -2.59%
RegExp (Full) 284.0±7.46µs 294.7±4.76µs -3.63%
RegExp Literal (Execution) 11.4±0.44µs 11.7±0.14µs -2.56%
RegExp Literal (Full) 272.3±7.32µs 294.2±4.43µs -7.44%
RegExp Literal Creation (Execution) 9.8±0.15µs 10.3±0.14µs -4.85%
RegExp Literal Creation (Full) 265.5±7.42µs 288.4±5.81µs -7.94%
Static Object Property Access (Execution) 4.3±0.11µs 4.6±0.05µs -6.52%
Static Object Property Access (Full) 264.9±7.95µs 280.7±3.42µs -5.63%
String Object Access (Execution) 6.8±0.15µs 7.1±0.09µs -4.23%
String Object Access (Full) 272.7±10.60µs 283.6±5.20µs -3.84%
String comparison (Execution) 6.1±0.20µs 6.5±0.08µs -6.15%
String comparison (Full) 271.6±8.10µs 285.3±4.25µs -4.80%
String concatenation (Execution) 5.0±0.11µs 5.2±0.06µs -3.85%
String concatenation (Full) 270.2±6.88µs 283.0±4.03µs -4.52%
String copy (Execution) 3.8±0.07µs 3.9±0.04µs -2.56%
String copy (Full) 262.9±6.33µs 275.4±4.27µs -4.54%
Symbols (Execution) 3.1±0.08µs 3.3±0.04µs -6.06%
Symbols (Full) 257.2±7.05µs 268.3±3.18µs -4.14%

@0x7D2B
Copy link
Contributor Author

0x7D2B commented May 23, 2021

Okay, I added arguments object handling as defined in the spec, so this should fix #1062 properly now.

@0x7D2B 0x7D2B mentioned this pull request May 23, 2021
@github-actions
Copy link

Benchmark for 51e56f7

Click to view benchmark
Test PR Benchmark Master Benchmark %
Arithmetic operations (Execution) 320.9±19.21ns 352.7±9.90ns -9.02%
Arithmetic operations (Full) 244.8±11.98µs 259.4±11.22µs -5.63%
Array access (Execution) 5.7±0.30µs 6.1±0.19µs -6.56%
Array access (Full) 258.4±13.62µs 281.0±9.23µs -8.04%
Array creation (Execution) 2.5±0.13ms 2.8±0.05ms -10.71%
Array creation (Full) 2.9±0.12ms 3.3±0.05ms -12.12%
Array pop (Execution) 853.0±32.63µs 909.6±21.30µs -6.22%
Array pop (Full) 1231.8±57.31µs 1400.3±29.57µs -12.03%
Boolean Object Access (Execution) 4.7±0.29µs 4.9±0.25µs -4.08%
Boolean Object Access (Full) 255.5±15.47µs 277.2±12.54µs -7.83%
Clean js (Execution) 544.4±27.52µs 641.7±15.85µs -15.16%
Clean js (Full) 818.1±34.43µs 943.8±32.01µs -13.32%
Clean js (Parser) 36.1±2.15µs 38.5±1.32µs -6.23%
Create Realm 381.4±23.40ns 418.3±9.05ns -8.82%
Dynamic Object Property Access (Execution) 4.9±0.25µs 4.9±0.14µs 0.00%
Dynamic Object Property Access (Full) 273.5±6.48µs 265.5±14.08µs +3.01%
Expression (Parser) 6.3±0.32µs 7.0±0.24µs -10.00%
Fibonacci (Execution) 728.4±32.31µs 735.7±14.33µs -0.99%
Fibonacci (Full) 973.0±44.08µs 1018.6±35.73µs -4.48%
For loop (Execution) 19.3±0.89µs 21.3±0.50µs -9.39%
For loop (Full) 265.2±14.25µs 290.5±9.94µs -8.71%
For loop (Parser) 17.5±0.94µs 18.8±0.71µs -6.91%
Goal Symbols (Parser) 12.7±0.78µs 13.2±0.63µs -3.79%
Hello World (Parser) 3.5±0.16µs 3.7±0.18µs -5.41%
Long file (Parser) 721.9±32.40ns 775.5±18.65ns -6.91%
Mini js (Execution) 482.3±23.85µs 578.6±15.60µs -16.64%
Mini js (Full) 768.0±37.73µs 882.4±29.02µs -12.96%
Mini js (Parser) 32.0±1.50µs 33.9±1.31µs -5.60%
Number Object Access (Execution) 3.5±0.17µs 3.9±0.17µs -10.26%
Number Object Access (Full) 251.0±10.05µs 274.4±12.43µs -8.53%
Object Creation (Execution) 4.0±0.20µs 4.2±0.11µs -4.76%
Object Creation (Full) 249.3±12.72µs 266.6±13.57µs -6.49%
RegExp (Execution) 9.8±0.53µs 11.6±0.28µs -15.52%
RegExp (Full) 264.1±15.85µs 294.6±7.65µs -10.35%
RegExp Literal (Execution) 9.8±0.54µs 11.3±0.32µs -13.27%
RegExp Literal (Full) 260.4±16.09µs 285.6±9.44µs -8.82%
RegExp Literal Creation (Execution) 8.9±0.44µs 9.8±0.32µs -9.18%
RegExp Literal Creation (Full) 280.5±8.36µs 266.4±19.58µs +5.29%
Static Object Property Access (Execution) 4.3±0.23µs 4.4±0.10µs -2.27%
Static Object Property Access (Full) 272.7±13.87µs 269.5±16.75µs +1.19%
String Object Access (Execution) 6.6±0.34µs 6.3±0.35µs +4.76%
String Object Access (Full) 255.6±12.92µs 280.3±7.79µs -8.81%
String comparison (Execution) 5.9±0.33µs 6.1±0.25µs -3.28%
String comparison (Full) 254.5±15.65µs 283.1±9.05µs -10.10%
String concatenation (Execution) 5.0±0.17µs 4.9±0.20µs +2.04%
String concatenation (Full) 256.9±10.82µs 274.5±8.70µs -6.41%
String copy (Execution) 3.6±0.17µs 3.7±0.13µs -2.70%
String copy (Full) 243.0±12.16µs 269.5±14.98µs -9.83%
Symbols (Execution) 3.1±0.18µs 3.3±0.04µs -6.06%
Symbols (Full) 235.1±11.37µs 263.5±9.92µs -10.78%

@0x7D2B 0x7D2B requested review from RageKnify and Razican May 23, 2021 06:46
Copy link
Member

@RageKnify RageKnify left a comment

Choose a reason for hiding this comment

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

I'd just like for the comment to be more complete to avoid confusion in the future.

boa/src/object/gcobject.rs Outdated Show resolved Hide resolved
@0x7D2B 0x7D2B requested a review from RageKnify May 24, 2021 14:14
@github-actions
Copy link

Benchmark for 9598615

Click to view benchmark
Test PR Benchmark Master Benchmark %
Arithmetic operations (Execution) 365.3±4.14ns 364.0±6.70ns +0.36%
Arithmetic operations (Full) 296.3±21.07µs 270.1±0.32µs +9.70%
Array access (Execution) 6.5±0.04µs 6.1±0.04µs +6.56%
Array access (Full) 295.0±4.00µs 292.9±1.29µs +0.72%
Array creation (Execution) 2.9±0.04ms 3.1±0.11ms -6.45%
Array creation (Full) 3.2±0.05ms 3.3±0.03ms -3.03%
Array pop (Execution) 932.6±2.24µs 929.6±6.86µs +0.32%
Array pop (Full) 1433.6±12.78µs 1434.3±6.46µs -0.05%
Boolean Object Access (Execution) 5.1±0.07µs 5.2±0.06µs -1.92%
Boolean Object Access (Full) 287.3±4.40µs 288.2±1.23µs -0.31%
Clean js (Execution) 613.3±5.11µs 661.1±7.01µs -7.23%
Clean js (Full) 1016.3±63.46µs 987.6±4.03µs +2.91%
Clean js (Parser) 40.9±0.31µs 43.6±2.07µs -6.19%
Create Realm 430.5±1.92ns 440.7±4.83ns -2.31%
Dynamic Object Property Access (Execution) 5.6±0.26µs 5.1±0.17µs +9.80%
Dynamic Object Property Access (Full) 292.2±3.01µs 291.1±1.49µs +0.38%
Expression (Parser) 7.6±0.34µs 7.6±0.28µs 0.00%
Fibonacci (Execution) 811.8±5.37µs 752.1±4.37µs +7.94%
Fibonacci (Full) 1123.1±12.52µs 1051.8±11.33µs +6.78%
For loop (Execution) 22.4±0.20µs 21.9±0.10µs +2.28%
For loop (Full) 304.7±3.12µs 303.9±1.55µs +0.26%
For loop (Parser) 19.8±0.02µs 20.0±0.06µs -1.00%
Goal Symbols (Parser) 14.1±0.04µs 14.8±0.48µs -4.73%
Hello World (Parser) 4.0±0.01µs 4.0±0.02µs 0.00%
Long file (Parser) 803.0±31.01ns 820.0±38.47ns -2.07%
Mini js (Execution) 553.2±3.19µs 625.2±32.70µs -11.52%
Mini js (Full) 922.0±23.02µs 971.3±40.81µs -5.08%
Mini js (Parser) 35.8±0.16µs 35.8±0.15µs 0.00%
Number Object Access (Execution) 4.0±0.06µs 4.1±0.04µs -2.44%
Number Object Access (Full) 280.6±4.19µs 282.1±2.18µs -0.53%
Object Creation (Execution) 4.6±0.02µs 4.2±0.08µs +9.52%
Object Creation (Full) 288.7±3.72µs 283.5±1.53µs +1.83%
RegExp (Execution) 10.9±0.20µs 11.6±0.21µs -6.03%
RegExp (Full) 301.5±0.87µs 300.3±2.56µs +0.40%
RegExp Literal (Execution) 11.0±0.13µs 11.8±0.17µs -6.78%
RegExp Literal (Full) 295.7±5.34µs 296.5±2.54µs -0.27%
RegExp Literal Creation (Execution) 9.7±0.16µs 10.3±0.15µs -5.83%
RegExp Literal Creation (Full) 285.1±4.10µs 292.5±1.69µs -2.53%
Static Object Property Access (Execution) 4.8±0.02µs 4.5±0.07µs +6.67%
Static Object Property Access (Full) 285.8±2.94µs 283.8±2.78µs +0.70%
String Object Access (Execution) 7.2±0.12µs 7.1±0.13µs +1.41%
String Object Access (Full) 294.5±3.31µs 291.7±1.20µs +0.96%
String comparison (Execution) 6.6±0.11µs 6.6±0.07µs 0.00%
String comparison (Full) 288.0±5.15µs 289.2±0.57µs -0.41%
String concatenation (Execution) 5.3±0.05µs 5.1±0.09µs +3.92%
String concatenation (Full) 281.3±4.89µs 281.2±1.04µs +0.04%
String copy (Execution) 4.0±0.05µs 3.9±0.03µs +2.56%
String copy (Full) 277.6±2.06µs 277.3±3.74µs +0.11%
Symbols (Execution) 3.4±0.01µs 3.4±0.11µs 0.00%
Symbols (Full) 273.2±2.27µs 272.8±3.50µs +0.15%

@@ -72,6 +72,16 @@ impl StatementList {
set
}

pub fn function_declared_names(&self) -> HashSet<&str> {
Copy link
Member

Choose a reason for hiding this comment

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

I would add a bit of documentation to this function, to explain what it does.

@0x7D2B 0x7D2B merged commit 3acef7b into master May 27, 2021
@0x7D2B 0x7D2B deleted the feature/default-parameters branch May 27, 2021 09:14
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
execution Issues or PRs related to code execution rust Pull requests that update Rust code technical debt
Projects
None yet
Development

Successfully merging this pull request may close these issues.

Panic trying to re-define the "arguments" identifier in a function
3 participants