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 environment record panics #1285

Merged
merged 10 commits into from
Jun 2, 2021
Merged

Fix environment record panics #1285

merged 10 commits into from
Jun 2, 2021

Conversation

0x7D2B
Copy link
Contributor

@0x7D2B 0x7D2B commented May 27, 2021

This Pull Request fixes environment record panics that appeared after #1131.

The panics were caused by creating errors inside of environment record methods which used &mut self. Creating errors would involve getting values from environment records, causing gc to panic. This is fixed by making most environment record methods use &self and relying on internal mutability instead.

@github-actions
Copy link

github-actions bot commented May 27, 2021

Test262 conformance changes:

Test result master count PR count difference
Total 78,897 78,897 0
Passed 26,719 26,719 0
Ignored 15,628 15,628 0
Failed 36,550 36,550 0
Panics 14 0 -14
Conformance 33.87% 33.87% 0.00%
Fixed panics:
test/language/statements/const/syntax/const-invalid-assignment-statement-body-for-in.js [strict mode] (previously Panic)
test/language/statements/const/syntax/const-invalid-assignment-statement-body-for-in.js (previously Panic)
test/language/statements/const/syntax/const-invalid-assignment-next-expression-for.js [strict mode] (previously Panic)
test/language/statements/const/syntax/const-invalid-assignment-next-expression-for.js (previously Panic)
test/language/statements/const/syntax/const-invalid-assignment-statement-body-for-of.js [strict mode] (previously Panic)
test/language/statements/const/syntax/const-invalid-assignment-statement-body-for-of.js (previously Panic)
test/language/statements/switch/scope-lex-close-case.js [strict mode] (previously Panic)
test/language/statements/switch/scope-lex-close-case.js (previously Panic)
test/language/statements/switch/scope-lex-open-dflt.js [strict mode] (previously Panic)
test/language/statements/switch/scope-lex-open-dflt.js (previously Panic)
test/language/statements/switch/scope-lex-open-case.js [strict mode] (previously Panic)
test/language/statements/switch/scope-lex-open-case.js (previously Panic)
test/language/statements/switch/scope-lex-close-dflt.js [strict mode] (previously Panic)
test/language/statements/switch/scope-lex-close-dflt.js (previously Panic)

@0x7D2B
Copy link
Contributor Author

0x7D2B commented May 27, 2021

I vanquished the panics!

@github-actions
Copy link

Benchmark for a29dbdc

Click to view benchmark
Test PR Benchmark Master Benchmark %
Arithmetic operations (Execution) 368.0±2.10ns 336.5±13.77ns +9.36%
Arithmetic operations (Full) 263.2±4.65µs 261.0±6.28µs +0.84%
Array access (Execution) 6.1±0.08µs 5.7±0.18µs +7.02%
Array access (Full) 287.4±6.68µs 271.6±13.68µs +5.82%
Array creation (Execution) 2.9±0.03ms 2.8±0.10ms +3.57%
Array creation (Full) 3.2±0.08ms 3.1±0.13ms +3.23%
Array pop (Execution) 920.9±13.54µs 870.8±43.69µs +5.75%
Array pop (Full) 1406.4±47.60µs 1305.8±71.98µs +7.70%
Boolean Object Access (Execution) 5.1±0.11µs 4.9±0.19µs +4.08%
Boolean Object Access (Full) 280.8±5.69µs 268.7±14.17µs +4.50%
Clean js (Execution) 620.1±24.23µs 644.0±18.92µs -3.71%
Clean js (Full) 962.7±31.87µs 967.4±16.54µs -0.49%
Clean js (Parser) 39.0±1.31µs 38.7±1.76µs +0.78%
Create Realm 427.0±10.47ns 413.0±9.01ns +3.39%
Dynamic Object Property Access (Execution) 5.0±0.06µs 4.6±0.19µs +8.70%
Dynamic Object Property Access (Full) 284.0±7.89µs 283.6±11.53µs +0.14%
Expression (Parser) 7.1±0.29µs 6.5±0.41µs +9.23%
Fibonacci (Execution) 771.6±10.09µs 724.1±17.98µs +6.56%
Fibonacci (Full) 1063.8±19.60µs 926.7±47.14µs +14.79%
For loop (Execution) 21.3±0.92µs 20.7±0.63µs +2.90%
For loop (Full) 294.3±11.18µs 280.6±14.09µs +4.88%
For loop (Parser) 18.0±0.81µs 19.0±0.67µs -5.26%
Goal Symbols (Parser) 12.3±0.62µs 12.9±0.78µs -4.65%
Hello World (Parser) 3.6±0.17µs 3.6±0.16µs 0.00%
Long file (Parser) 663.7±36.02ns 785.6±17.20ns -15.52%
Mini js (Execution) 546.6±26.62µs 556.4±19.77µs -1.76%
Mini js (Full) 886.4±23.29µs 886.0±21.74µs +0.05%
Mini js (Parser) 32.3±1.29µs 32.0±2.38µs +0.94%
Number Object Access (Execution) 4.1±0.07µs 3.7±0.16µs +10.81%
Number Object Access (Full) 276.7±5.88µs 260.1±9.49µs +6.38%
Object Creation (Execution) 4.3±0.06µs 3.8±0.16µs +13.16%
Object Creation (Full) 270.2±11.37µs 260.7±12.86µs +3.64%
RegExp (Execution) 11.3±0.33µs 10.1±0.40µs +11.88%
RegExp (Full) 294.5±9.09µs 280.0±14.96µs +5.18%
RegExp Literal (Execution) 11.8±0.16µs 9.4±0.50µs +25.53%
RegExp Literal (Full) 287.2±8.57µs 276.0±12.27µs +4.06%
RegExp Literal Creation (Execution) 10.2±0.38µs 8.5±0.32µs +20.00%
RegExp Literal Creation (Full) 272.7±13.24µs 272.1±9.71µs +0.22%
Static Object Property Access (Execution) 4.5±0.04µs 4.0±0.22µs +12.50%
Static Object Property Access (Full) 265.4±11.69µs 267.1±10.67µs -0.64%
String Object Access (Execution) 7.3±0.14µs 6.6±0.36µs +10.61%
String Object Access (Full) 290.7±3.87µs 250.1±15.59µs +16.23%
String comparison (Execution) 6.2±0.18µs 6.1±0.15µs +1.64%
String comparison (Full) 274.6±11.50µs 265.1±15.59µs +3.58%
String concatenation (Execution) 4.9±0.16µs 4.6±0.21µs +6.52%
String concatenation (Full) 275.2±8.34µs 258.1±14.58µs +6.63%
String copy (Execution) 3.8±0.10µs 3.6±0.15µs +5.56%
String copy (Full) 262.4±9.95µs 243.3±10.84µs +7.85%
Symbols (Execution) 3.1±0.12µs 3.2±0.13µs -3.13%
Symbols (Full) 262.8±6.57µs 247.6±15.77µs +6.14%

@0x7D2B 0x7D2B added this to the v0.12.0 milestone May 27, 2021
@github-actions
Copy link

Benchmark for eef5887

Click to view benchmark
Test PR Benchmark Master Benchmark %
Arithmetic operations (Execution) 356.1±10.68ns 363.8±10.34ns -2.12%
Arithmetic operations (Full) 290.1±15.87µs 295.4±8.81µs -1.79%
Array access (Execution) 6.9±0.46µs 6.9±0.28µs 0.00%
Array access (Full) 318.8±28.05µs 334.3±14.25µs -4.64%
Array creation (Execution) 2.7±0.12ms 2.8±0.13ms -3.57%
Array creation (Full) 3.1±0.13ms 3.2±0.06ms -3.13%
Array pop (Execution) 873.3±38.86µs 892.1±33.78µs -2.11%
Array pop (Full) 1395.0±82.85µs 1442.3±37.29µs -3.28%
Boolean Object Access (Execution) 5.3±0.25µs 5.5±0.21µs -3.64%
Boolean Object Access (Full) 303.0±14.44µs 315.3±6.93µs -3.90%
Clean js (Execution) 634.1±22.23µs 625.5±32.21µs +1.37%
Clean js (Full) 945.8±40.79µs 979.5±16.20µs -3.44%
Clean js (Parser) 41.1±2.43µs 44.4±2.17µs -7.43%
Create Realm 406.8±20.49ns 400.3±20.71ns +1.62%
Dynamic Object Property Access (Execution) 5.5±0.27µs 5.6±0.23µs -1.79%
Dynamic Object Property Access (Full) 309.0±14.89µs 320.3±8.58µs -3.53%
Expression (Parser) 7.1±0.31µs 7.4±0.15µs -4.05%
Fibonacci (Execution) 879.1±36.78µs 901.2±45.46µs -2.45%
Fibonacci (Full) 1341.2±64.92µs 1202.4±66.45µs +11.54%
For loop (Execution) 23.1±1.48µs 22.5±0.85µs +2.67%
For loop (Full) 322.2±11.78µs 332.4±13.26µs -3.07%
For loop (Parser) 20.1±1.17µs 21.2±0.74µs -5.19%
Goal Symbols (Parser) 14.2±0.67µs 14.6±0.48µs -2.74%
Hello World (Parser) 3.9±0.20µs 4.2±0.09µs -7.14%
Long file (Parser) 738.9±36.79ns 789.8±15.76ns -6.44%
Mini js (Execution) 554.4±29.21µs 564.6±24.22µs -1.81%
Mini js (Full) 850.3±32.19µs 912.4±18.80µs -6.81%
Mini js (Parser) 36.2±1.81µs 38.8±4.38µs -6.70%
Number Object Access (Execution) 4.2±0.20µs 4.3±0.32µs -2.33%
Number Object Access (Full) 298.0±13.85µs 313.3±7.85µs -4.88%
Object Creation (Execution) 4.9±0.25µs 4.8±0.15µs +2.08%
Object Creation (Full) 310.5±13.93µs 318.5±7.23µs -2.51%
RegExp (Execution) 11.5±0.91µs 11.9±0.41µs -3.36%
RegExp (Full) 322.9±12.40µs 333.0±8.11µs -3.03%
RegExp Literal (Execution) 11.6±0.54µs 11.7±0.48µs -0.85%
RegExp Literal (Full) 327.2±11.42µs 329.6±8.77µs -0.73%
RegExp Literal Creation (Execution) 9.9±0.43µs 10.1±0.53µs -1.98%
RegExp Literal Creation (Full) 310.1±13.64µs 325.6±12.76µs -4.76%
Static Object Property Access (Execution) 5.2±0.24µs 5.2±0.24µs 0.00%
Static Object Property Access (Full) 305.4±12.83µs 322.1±22.81µs -5.18%
String Object Access (Execution) 7.8±0.25µs 7.5±0.33µs +4.00%
String Object Access (Full) 309.4±15.58µs 319.9±9.92µs -3.28%
String comparison (Execution) 6.8±0.31µs 7.0±0.26µs -2.86%
String comparison (Full) 305.9±10.18µs 323.6±22.88µs -5.47%
String concatenation (Execution) 5.5±0.23µs 5.6±0.26µs -1.79%
String concatenation (Full) 300.1±10.58µs 314.1±8.25µs -4.46%
String copy (Execution) 4.2±0.18µs 4.4±0.35µs -4.55%
String copy (Full) 296.5±10.96µs 305.8±12.74µs -3.04%
Symbols (Execution) 3.6±0.19µs 3.5±0.13µs +2.86%
Symbols (Full) 288.2±14.42µs 285.4±12.22µs +0.98%

@0x7D2B 0x7D2B linked an issue May 27, 2021 that may be closed by this pull request
@Razican Razican added the bug Something isn't working label May 28, 2021
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.

Looks good, I would only like a better naming. Benchmarks look reasonably good :)

boa/src/environment/declarative_environment_record.rs Outdated Show resolved Hide resolved
@github-actions
Copy link

Benchmark for e6af0fd

Click to view benchmark
Test PR Benchmark Master Benchmark %
Arithmetic operations (Execution) 338.8±11.07ns 346.3±9.05ns -2.17%
Arithmetic operations (Full) 257.1±6.45µs 251.3±7.38µs +2.31%
Array access (Execution) 6.0±0.15µs 6.1±0.13µs -1.64%
Array access (Full) 275.7±8.14µs 277.8±7.14µs -0.76%
Array creation (Execution) 2.9±0.08ms 2.7±0.06ms +7.41%
Array creation (Full) 3.2±0.09ms 3.1±0.08ms +3.23%
Array pop (Execution) 916.2±22.85µs 907.4±38.89µs +0.97%
Array pop (Full) 1371.4±47.14µs 1345.0±37.22µs +1.96%
Boolean Object Access (Execution) 4.9±0.11µs 4.9±0.12µs 0.00%
Boolean Object Access (Full) 271.5±6.48µs 270.3±8.20µs +0.44%
Clean js (Execution) 603.7±14.73µs 590.0±12.80µs +2.32%
Clean js (Full) 894.2±24.57µs 885.2±25.16µs +1.02%
Clean js (Parser) 38.3±1.29µs 39.8±1.78µs -3.77%
Create Realm 420.1±15.11ns 411.5±16.48ns +2.09%
Dynamic Object Property Access (Execution) 4.8±0.15µs 5.0±0.12µs -4.00%
Dynamic Object Property Access (Full) 281.2±7.25µs 277.5±11.92µs +1.33%
Expression (Parser) 6.9±0.16µs 7.2±0.35µs -4.17%
Fibonacci (Execution) 744.4±20.37µs 777.5±18.95µs -4.26%
Fibonacci (Full) 1041.7±26.36µs 1062.7±25.67µs -1.98%
For loop (Execution) 21.0±0.71µs 21.0±0.60µs 0.00%
For loop (Full) 286.7±8.67µs 282.7±7.66µs +1.41%
For loop (Parser) 18.5±0.53µs 18.3±0.48µs +1.09%
Goal Symbols (Parser) 13.5±0.35µs 13.2±0.33µs +2.27%
Hello World (Parser) 3.8±0.10µs 3.7±0.11µs +2.70%
Long file (Parser) 748.9±17.74ns 741.2±18.56ns +1.04%
Mini js (Execution) 528.6±17.82µs 519.0±15.09µs +1.85%
Mini js (Full) 826.3±21.88µs 837.1±19.12µs -1.29%
Mini js (Parser) 34.4±1.22µs 33.8±0.75µs +1.78%
Number Object Access (Execution) 3.8±0.11µs 3.9±0.10µs -2.56%
Number Object Access (Full) 271.1±6.44µs 265.4±8.16µs +2.15%
Object Creation (Execution) 4.3±0.12µs 4.3±0.08µs 0.00%
Object Creation (Full) 274.1±7.45µs 265.2±7.77µs +3.36%
RegExp (Execution) 10.6±0.42µs 10.5±0.24µs +0.95%
RegExp (Full) 287.7±6.82µs 278.2±8.31µs +3.41%
RegExp Literal (Execution) 10.3±0.26µs 10.3±0.29µs 0.00%
RegExp Literal (Full) 282.6±7.20µs 276.9±7.29µs +2.06%
RegExp Literal Creation (Execution) 8.9±0.24µs 9.1±0.21µs -2.20%
RegExp Literal Creation (Full) 274.1±8.13µs 268.1±7.74µs +2.24%
Static Object Property Access (Execution) 4.3±0.15µs 4.7±0.24µs -8.51%
Static Object Property Access (Full) 274.1±8.31µs 276.7±12.18µs -0.94%
String Object Access (Execution) 6.8±0.20µs 6.9±0.23µs -1.45%
String Object Access (Full) 284.7±5.72µs 277.6±7.11µs +2.56%
String comparison (Execution) 6.1±0.19µs 6.3±0.16µs -3.17%
String comparison (Full) 276.5±6.89µs 273.2±8.04µs +1.21%
String concatenation (Execution) 5.0±0.09µs 5.0±0.15µs 0.00%
String concatenation (Full) 270.8±7.36µs 263.5±7.12µs +2.77%
String copy (Execution) 3.7±0.10µs 3.7±0.17µs 0.00%
String copy (Full) 266.6±7.75µs 257.9±7.25µs +3.37%
Symbols (Execution) 3.2±0.10µs 3.2±0.09µs 0.00%
Symbols (Full) 276.1±18.14µs 255.2±7.64µs +8.19%

@github-actions
Copy link

Benchmark for 92b8464

Click to view benchmark
Test PR Benchmark Master Benchmark %
Arithmetic operations (Execution) 408.0±24.48ns 401.8±27.39ns +1.54%
Arithmetic operations (Full) 318.5±21.84µs 354.5±50.28µs -10.16%
Array access (Execution) 8.6±0.91µs 8.0±0.87µs +7.50%
Array access (Full) 354.9±20.59µs 398.5±45.29µs -10.94%
Array creation (Execution) 3.2±0.24ms 3.1±0.21ms +3.23%
Array creation (Full) 3.6±0.21ms 3.7±0.46ms -2.70%
Array pop (Execution) 995.6±55.09µs 1067.2±130.90µs -6.71%
Array pop (Full) 1700.1±271.83µs 1740.7±179.77µs -2.33%
Boolean Object Access (Execution) 6.4±0.37µs 6.8±0.82µs -5.88%
Boolean Object Access (Full) 344.0±26.87µs 332.6±29.52µs +3.43%
Clean js (Execution) 795.0±88.02µs 698.6±61.54µs +13.80%
Clean js (Full) 1028.2±51.09µs 1210.3±180.93µs -15.05%
Clean js (Parser) 51.7±4.78µs 52.6±5.81µs -1.71%
Create Realm 481.5±46.87ns 503.0±62.29ns -4.27%
Dynamic Object Property Access (Execution) 6.9±0.53µs 7.0±0.68µs -1.43%
Dynamic Object Property Access (Full) 365.9±28.92µs 336.8±27.94µs +8.64%
Expression (Parser) 8.2±0.54µs 8.0±0.58µs +2.50%
Fibonacci (Execution) 1026.4±74.21µs 1012.2±62.84µs +1.40%
Fibonacci (Full) 1360.3±84.50µs 1438.3±135.29µs -5.42%
For loop (Execution) 26.3±2.33µs 26.5±3.04µs -0.75%
For loop (Full) 390.8±38.13µs 344.9±15.50µs +13.31%
For loop (Parser) 24.9±1.94µs 24.2±3.73µs +2.89%
Goal Symbols (Parser) 17.1±1.08µs 19.1±2.23µs -10.47%
Hello World (Parser) 4.6±0.55µs 4.9±0.36µs -6.12%
Long file (Parser) 961.5±135.95ns 989.6±116.52ns -2.84%
Mini js (Execution) 668.1±43.26µs 652.5±75.64µs +2.39%
Mini js (Full) 1023.4±88.78µs 967.4±58.45µs +5.79%
Mini js (Parser) 47.7±5.30µs 41.4±2.42µs +15.22%
Number Object Access (Execution) 4.8±0.35µs 5.8±0.70µs -17.24%
Number Object Access (Full) 355.0±35.97µs 327.9±21.32µs +8.26%
Object Creation (Execution) 5.4±0.42µs 6.5±0.76µs -16.92%
Object Creation (Full) 364.1±30.60µs 369.4±51.42µs -1.43%
RegExp (Execution) 12.7±0.90µs 15.9±2.44µs -20.13%
RegExp (Full) 374.1±27.03µs 434.4±59.83µs -13.88%
RegExp Literal (Execution) 13.7±1.03µs 14.9±1.64µs -8.05%
RegExp Literal (Full) 365.8±30.59µs 346.1±22.02µs +5.69%
RegExp Literal Creation (Execution) 12.0±0.84µs 12.3±1.06µs -2.44%
RegExp Literal Creation (Full) 360.8±29.49µs 344.8±20.59µs +4.64%
Static Object Property Access (Execution) 5.7±0.37µs 6.3±0.61µs -9.52%
Static Object Property Access (Full) 357.1±22.87µs 329.7±30.73µs +8.31%
String Object Access (Execution) 9.0±0.66µs 8.2±0.47µs +9.76%
String Object Access (Full) 346.0±40.69µs 407.0±48.27µs -14.99%
String comparison (Execution) 8.0±0.62µs 9.1±0.99µs -12.09%
String comparison (Full) 351.6±33.25µs 396.7±48.04µs -11.37%
String concatenation (Execution) 6.1±0.37µs 7.4±0.76µs -17.57%
String concatenation (Full) 342.2±30.90µs 398.7±62.42µs -14.17%
String copy (Execution) 4.7±0.28µs 5.5±0.77µs -14.55%
String copy (Full) 349.8±30.79µs 365.2±46.61µs -4.22%
Symbols (Execution) 4.4±0.53µs 4.3±0.41µs +2.33%
Symbols (Full) 349.3±24.12µs 323.0±45.00µs +8.14%

@github-actions
Copy link

Benchmark for 8705e2b

Click to view benchmark
Test PR Benchmark Master Benchmark %
Arithmetic operations (Execution) 357.5±6.41ns 365.2±1.78ns -2.11%
Arithmetic operations (Full) 266.6±4.28µs 270.2±4.02µs -1.33%
Array access (Execution) 6.4±0.10µs 6.5±0.06µs -1.54%
Array access (Full) 289.6±4.21µs 298.1±2.25µs -2.85%
Array creation (Execution) 3.0±0.07ms 2.9±0.02ms +3.45%
Array creation (Full) 3.4±0.06ms 3.3±0.01ms +3.03%
Array pop (Execution) 964.1±9.49µs 917.9±8.67µs +5.03%
Array pop (Full) 1468.1±17.11µs 1424.0±17.43µs +3.10%
Boolean Object Access (Execution) 5.2±0.08µs 5.3±0.02µs -1.89%
Boolean Object Access (Full) 284.9±5.20µs 288.9±5.09µs -1.38%
Clean js (Execution) 617.1±8.25µs 610.4±4.56µs +1.10%
Clean js (Full) 940.3±18.44µs 934.2±11.91µs +0.65%
Clean js (Parser) 40.3±0.59µs 40.8±0.40µs -1.23%
Create Realm 438.1±4.61ns 419.0±6.74ns +4.56%
Dynamic Object Property Access (Execution) 5.1±0.08µs 5.3±0.06µs -3.77%
Dynamic Object Property Access (Full) 288.1±4.40µs 291.7±3.12µs -1.23%
Expression (Parser) 7.2±0.15µs 7.3±0.19µs -1.37%
Fibonacci (Execution) 773.4±10.32µs 785.6±11.83µs -1.55%
Fibonacci (Full) 1093.0±19.21µs 1129.4±5.76µs -3.22%
For loop (Execution) 21.8±0.45µs 21.3±0.31µs +2.35%
For loop (Full) 297.9±4.60µs 307.3±2.76µs -3.06%
For loop (Parser) 19.5±0.32µs 19.9±0.10µs -2.01%
Goal Symbols (Parser) 13.9±0.26µs 14.0±0.13µs -0.71%
Hello World (Parser) 3.9±0.06µs 3.9±0.08µs 0.00%
Long file (Parser) 777.1±11.14ns 780.2±7.55ns -0.40%
Mini js (Execution) 556.6±8.40µs 547.2±6.14µs +1.72%
Mini js (Full) 864.7±11.14µs 876.7±11.91µs -1.37%
Mini js (Parser) 35.1±0.51µs 35.7±0.22µs -1.68%
Number Object Access (Execution) 4.1±0.02µs 4.1±0.03µs 0.00%
Number Object Access (Full) 277.5±4.86µs 279.8±4.28µs -0.82%
Object Creation (Execution) 4.4±0.03µs 4.5±0.06µs -2.22%
Object Creation (Full) 279.9±4.86µs 292.6±1.99µs -4.34%
RegExp (Execution) 10.7±0.17µs 11.0±0.15µs -2.73%
RegExp (Full) 295.8±5.11µs 297.8±5.37µs -0.67%
RegExp Literal (Execution) 10.8±0.20µs 10.8±0.15µs 0.00%
RegExp Literal (Full) 291.1±6.01µs 300.8±3.94µs -3.22%
RegExp Literal Creation (Execution) 9.3±0.14µs 9.6±0.11µs -3.12%
RegExp Literal Creation (Full) 290.0±4.79µs 301.4±1.18µs -3.78%
Static Object Property Access (Execution) 4.6±0.05µs 4.7±0.06µs -2.13%
Static Object Property Access (Full) 280.5±4.86µs 284.0±6.07µs -1.23%
String Object Access (Execution) 7.1±0.11µs 7.3±0.03µs -2.74%
String Object Access (Full) 285.8±5.69µs 289.4±6.35µs -1.24%
String comparison (Execution) 6.5±0.09µs 6.5±0.08µs 0.00%
String comparison (Full) 287.7±4.35µs 285.7±5.52µs +0.70%
String concatenation (Execution) 5.1±0.10µs 5.3±0.07µs -3.77%
String concatenation (Full) 275.8±5.99µs 284.5±6.86µs -3.06%
String copy (Execution) 4.0±0.05µs 4.0±0.06µs 0.00%
String copy (Full) 272.7±6.90µs 273.9±5.83µs -0.44%
Symbols (Execution) 3.3±0.06µs 3.3±0.05µs 0.00%
Symbols (Full) 267.8±3.67µs 273.1±2.95µs -1.94%

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.

Looks good but I'd like if @HalidOdat could give their take.

@0x7D2B
Copy link
Contributor Author

0x7D2B commented May 31, 2021

Doesn't look like that phantom panic happens here.

@github-actions
Copy link

Benchmark for a9fc9e4

Click to view benchmark
Test PR Benchmark Master Benchmark %
Arithmetic operations (Execution) 340.7±26.09ns 369.2±17.08ns -7.72%
Arithmetic operations (Full) 270.5±8.58µs 294.0±19.53µs -7.99%
Array access (Execution) 7.1±0.52µs 7.3±0.27µs -2.74%
Array access (Full) 301.4±15.60µs 327.4±10.95µs -7.94%
Array creation (Execution) 2.6±0.08ms 2.7±0.09ms -3.70%
Array creation (Full) 3.0±0.12ms 3.1±0.25ms -3.23%
Array pop (Execution) 854.3±36.28µs 893.4±36.41µs -4.38%
Array pop (Full) 1350.2±56.47µs 1370.1±65.68µs -1.45%
Boolean Object Access (Execution) 5.7±0.60µs 6.0±0.41µs -5.00%
Boolean Object Access (Full) 286.3±14.40µs 291.6±14.23µs -1.82%
Clean js (Execution) 660.7±65.33µs 657.4±45.87µs +0.50%
Clean js (Full) 929.7±33.76µs 947.8±43.82µs -1.91%
Clean js (Parser) 41.9±1.56µs 40.0±2.66µs +4.75%
Create Realm 422.7±43.35ns 420.1±19.44ns +0.62%
Dynamic Object Property Access (Execution) 5.8±0.50µs 5.7±0.24µs +1.75%
Dynamic Object Property Access (Full) 311.9±23.30µs 324.9±26.04µs -4.00%
Expression (Parser) 6.8±0.38µs 7.1±0.33µs -4.23%
Fibonacci (Execution) 873.4±32.35µs 940.6±33.93µs -7.14%
Fibonacci (Full) 1168.8±40.19µs 1229.4±49.00µs -4.93%
For loop (Execution) 23.2±2.23µs 24.8±1.31µs -6.45%
For loop (Full) 313.8±15.45µs 338.4±12.59µs -7.27%
For loop (Parser) 19.3±0.81µs 19.2±1.29µs +0.52%
Goal Symbols (Parser) 14.1±0.91µs 13.3±0.84µs +6.02%
Hello World (Parser) 3.7±0.18µs 3.7±0.17µs 0.00%
Long file (Parser) 758.7±58.44ns 748.3±33.05ns +1.39%
Mini js (Execution) 566.9±37.77µs 590.8±33.36µs -4.05%
Mini js (Full) 869.6±30.23µs 873.6±39.59µs -0.46%
Mini js (Parser) 37.5±1.94µs 34.7±1.95µs +8.07%
Number Object Access (Execution) 4.5±0.25µs 4.3±0.19µs +4.65%
Number Object Access (Full) 293.8±13.97µs 290.7±21.15µs +1.07%
Object Creation (Execution) 5.0±0.45µs 5.0±0.21µs 0.00%
Object Creation (Full) 293.1±17.22µs 297.5±15.70µs -1.48%
RegExp (Execution) 11.5±0.57µs 13.2±1.34µs -12.88%
RegExp (Full) 327.5±18.35µs 308.8±14.14µs +6.06%
RegExp Literal (Execution) 11.4±0.50µs 12.1±0.77µs -5.79%
RegExp Literal (Full) 322.5±39.02µs 307.9±14.75µs +4.74%
RegExp Literal Creation (Execution) 10.4±0.92µs 10.1±0.41µs +2.97%
RegExp Literal Creation (Full) 294.7±12.67µs 319.8±18.76µs -7.85%
Static Object Property Access (Execution) 5.1±0.22µs 5.4±0.28µs -5.56%
Static Object Property Access (Full) 297.5±12.27µs 313.6±32.54µs -5.13%
String Object Access (Execution) 7.7±0.37µs 7.8±0.38µs -1.28%
String Object Access (Full) 291.1±13.40µs 307.8±15.88µs -5.43%
String comparison (Execution) 6.7±0.29µs 7.1±0.26µs -5.63%
String comparison (Full) 303.7±12.00µs 305.2±14.98µs -0.49%
String concatenation (Execution) 5.5±0.21µs 6.0±0.45µs -8.33%
String concatenation (Full) 310.3±11.67µs 289.0±11.88µs +7.37%
String copy (Execution) 4.3±0.24µs 4.4±0.19µs -2.27%
String copy (Full) 287.0±11.72µs 293.7±19.54µs -2.28%
Symbols (Execution) 3.7±0.18µs 4.0±0.24µs -7.50%
Symbols (Full) 293.6±17.87µs 287.8±14.63µs +2.02%

Copy link
Member

@HalidOdat HalidOdat left a comment

Choose a reason for hiding this comment

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

Looks good @0x7D2B!

Since the GcCell has been placed to the inner fields of the environments and we no longer need to take it mutable. We can remove the GcCell from Environment type definition now.

@github-actions
Copy link

github-actions bot commented Jun 2, 2021

Benchmark for a559070

Click to view benchmark
Test PR Benchmark Master Benchmark %
Arithmetic operations (Execution) 312.6±0.64ns 301.3±0.15ns +3.75%
Arithmetic operations (Full) 228.7±0.34µs 232.5±0.34µs -1.63%
Array access (Execution) 4.9±0.04µs 5.6±0.04µs -12.50%
Array access (Full) 254.7±0.34µs 253.6±0.37µs +0.43%
Array creation (Execution) 2.1±0.00ms 2.3±0.00ms -8.70%
Array creation (Full) 2.9±0.01ms 2.8±0.01ms +3.57%
Array pop (Execution) 675.4±3.24µs 743.4±1.82µs -9.15%
Array pop (Full) 1251.0±2.72µs 1223.1±1.54µs +2.28%
Boolean Object Access (Execution) 4.1±0.01µs 4.6±0.01µs -10.87%
Boolean Object Access (Full) 245.8±2.61µs 249.1±1.51µs -1.32%
Clean js (Execution) 528.9±3.44µs 527.0±2.26µs +0.36%
Clean js (Full) 814.7±2.21µs 816.0±2.79µs -0.16%
Clean js (Parser) 36.1±0.05µs 35.9±0.04µs +0.56%
Create Realm 362.6±0.28ns 358.5±0.22ns +1.14%
Dynamic Object Property Access (Execution) 3.9±0.01µs 4.6±0.02µs -15.22%
Dynamic Object Property Access (Full) 248.8±0.43µs 250.1±0.46µs -0.52%
Expression (Parser) 6.1±0.00µs 6.0±0.00µs +1.67%
Fibonacci (Execution) 653.8±2.22µs 699.8±1.34µs -6.57%
Fibonacci (Full) 923.3±0.55µs 970.7±1.34µs -4.88%
For loop (Execution) 18.7±0.10µs 18.8±0.11µs -0.53%
For loop (Full) 260.7±0.82µs 266.0±0.65µs -1.99%
For loop (Parser) 17.2±0.02µs 17.2±0.02µs 0.00%
Goal Symbols (Parser) 12.2±0.12µs 12.3±0.13µs -0.81%
Hello World (Parser) 3.4±0.01µs 3.4±0.01µs 0.00%
Long file (Parser) 681.1±3.46ns 683.9±3.44ns -0.41%
Mini js (Execution) 471.9±2.73µs 471.3±2.27µs +0.13%
Mini js (Full) 757.7±2.62µs 760.0±4.78µs -0.30%
Mini js (Parser) 31.5±0.03µs 31.4±0.03µs +0.32%
Number Object Access (Execution) 3.2±0.00µs 3.7±0.01µs -13.51%
Number Object Access (Full) 241.5±4.53µs 246.9±0.42µs -2.19%
Object Creation (Execution) 3.8±0.01µs 4.0±0.02µs -5.00%
Object Creation (Full) 245.6±0.38µs 248.9±0.47µs -1.33%
RegExp (Execution) 8.5±0.04µs 9.7±0.07µs -12.37%
RegExp (Full) 258.4±0.33µs 262.2±0.60µs -1.45%
RegExp Literal (Execution) 8.5±0.02µs 9.7±0.02µs -12.37%
RegExp Literal (Full) 258.3±1.05µs 256.3±0.38µs +0.78%
RegExp Literal Creation (Execution) 8.3±0.02µs 8.5±0.03µs -2.35%
RegExp Literal Creation (Full) 248.5±0.43µs 251.9±0.41µs -1.35%
Static Object Property Access (Execution) 4.0±0.01µs 4.1±0.01µs -2.44%
Static Object Property Access (Full) 245.2±0.28µs 248.2±0.53µs -1.21%
String Object Access (Execution) 5.7±0.01µs 6.3±0.01µs -9.52%
String Object Access (Full) 249.1±0.34µs 251.7±0.39µs -1.03%
String comparison (Execution) 5.0±0.02µs 5.8±0.03µs -13.79%
String comparison (Full) 250.1±0.35µs 249.6±0.64µs +0.20%
String concatenation (Execution) 4.0±0.02µs 4.7±0.01µs -14.89%
String concatenation (Full) 242.0±1.52µs 246.9±0.66µs -1.98%
String copy (Execution) 3.1±0.00µs 3.5±0.01µs -11.43%
String copy (Full) 235.8±0.27µs 241.2±0.80µs -2.24%
Symbols (Execution) 2.9±0.00µs 3.0±0.00µs -3.33%
Symbols (Full) 232.1±0.37µs 235.3±0.49µs -1.36%

@github-actions
Copy link

github-actions bot commented Jun 2, 2021

Benchmark for e7314d2

Click to view benchmark
Test PR Benchmark Master Benchmark %
Arithmetic operations (Execution) 311.6±0.32ns 301.3±0.14ns +3.42%
Arithmetic operations (Full) 228.1±0.34µs 229.8±0.49µs -0.74%
Array access (Execution) 5.6±0.01µs 5.6±0.02µs 0.00%
Array access (Full) 249.9±0.38µs 252.4±0.38µs -0.99%
Array creation (Execution) 2.6±0.00ms 2.3±0.00ms +13.04%
Array creation (Full) 2.8±0.00ms 2.8±0.00ms 0.00%
Array pop (Execution) 836.5±2.47µs 738.7±2.87µs +13.24%
Array pop (Full) 1238.2±1.82µs 1217.2±1.70µs +1.73%
Boolean Object Access (Execution) 4.6±0.01µs 4.6±0.01µs 0.00%
Boolean Object Access (Full) 246.0±0.40µs 244.4±3.34µs +0.65%
Clean js (Execution) 533.4±4.47µs 526.5±2.17µs +1.31%
Clean js (Full) 803.8±3.66µs 809.6±2.36µs -0.72%
Clean js (Parser) 35.9±0.06µs 35.9±0.07µs 0.00%
Create Realm 372.8±0.59ns 360.6±8.47ns +3.38%
Dynamic Object Property Access (Execution) 4.6±0.02µs 4.6±0.02µs 0.00%
Dynamic Object Property Access (Full) 244.9±0.35µs 246.9±1.39µs -0.81%
Expression (Parser) 6.0±0.00µs 6.0±0.01µs 0.00%
Fibonacci (Execution) 647.1±1.97µs 693.9±1.10µs -6.74%
Fibonacci (Full) 924.2±1.14µs 958.4±1.61µs -3.57%
For loop (Execution) 18.3±0.09µs 18.9±0.08µs -3.17%
For loop (Full) 257.6±0.94µs 261.5±1.20µs -1.49%
For loop (Parser) 17.2±0.02µs 17.1±0.03µs +0.58%
Goal Symbols (Parser) 12.2±0.02µs 12.2±0.03µs 0.00%
Hello World (Parser) 3.4±0.01µs 3.4±0.01µs 0.00%
Long file (Parser) 717.5±0.47ns 708.7±0.77ns +1.24%
Mini js (Execution) 483.3±2.68µs 471.1±2.03µs +2.59%
Mini js (Full) 747.1±1.94µs 756.9±3.83µs -1.29%
Mini js (Parser) 31.4±0.03µs 31.4±0.03µs 0.00%
Number Object Access (Execution) 3.6±0.01µs 3.6±0.01µs 0.00%
Number Object Access (Full) 241.4±0.47µs 239.4±0.27µs +0.84%
Object Creation (Execution) 3.9±0.01µs 3.9±0.02µs 0.00%
Object Creation (Full) 243.9±0.57µs 242.4±0.30µs +0.62%
RegExp (Execution) 9.5±0.03µs 9.6±0.03µs -1.04%
RegExp (Full) 252.5±0.44µs 255.7±0.44µs -1.25%
RegExp Literal (Execution) 9.5±0.02µs 9.7±0.05µs -2.06%
RegExp Literal (Full) 253.3±0.40µs 253.3±0.30µs 0.00%
RegExp Literal Creation (Execution) 8.3±0.03µs 8.4±0.03µs -1.19%
RegExp Literal Creation (Full) 246.5±0.24µs 249.6±0.57µs -1.24%
Static Object Property Access (Execution) 4.1±0.01µs 4.1±0.01µs 0.00%
Static Object Property Access (Full) 243.9±0.30µs 246.7±0.28µs -1.13%
String Object Access (Execution) 6.5±0.03µs 6.3±0.02µs +3.17%
String Object Access (Full) 246.9±0.38µs 247.7±0.48µs -0.32%
String comparison (Execution) 5.7±0.02µs 5.8±0.04µs -1.72%
String comparison (Full) 243.8±0.24µs 246.4±0.49µs -1.06%
String concatenation (Execution) 4.6±0.07µs 4.7±0.02µs -2.13%
String concatenation (Full) 237.6±0.25µs 239.6±0.33µs -0.83%
String copy (Execution) 3.4±0.01µs 3.5±0.01µs -2.86%
String copy (Full) 232.1±0.31µs 237.3±0.48µs -2.19%
Symbols (Execution) 2.9±0.00µs 3.0±0.00µs -3.33%
Symbols (Full) 228.7±0.63µs 230.9±0.55µs -0.95%

@Razican Razican requested a review from HalidOdat June 2, 2021 07:23
@github-actions
Copy link

github-actions bot commented Jun 2, 2021

Benchmark for e7314d2

Click to view benchmark
Test PR Benchmark Master Benchmark %
Arithmetic operations (Execution) 311.0±0.18ns 305.6±0.98ns +1.77%
Arithmetic operations (Full) 229.6±0.26µs 227.7±0.48µs +0.83%
Array access (Execution) 5.5±0.02µs 5.5±0.03µs 0.00%
Array access (Full) 252.0±0.30µs 251.2±0.32µs +0.32%
Array creation (Execution) 2.6±0.00ms 2.3±0.00ms +13.04%
Array creation (Full) 2.8±0.02ms 2.8±0.00ms 0.00%
Array pop (Execution) 832.2±3.95µs 739.6±2.56µs +12.52%
Array pop (Full) 1244.3±2.01µs 1214.6±2.14µs +2.45%
Boolean Object Access (Execution) 4.6±0.03µs 4.6±0.01µs 0.00%
Boolean Object Access (Full) 247.6±2.14µs 243.2±0.64µs +1.81%
Clean js (Execution) 530.2±3.00µs 524.4±2.45µs +1.11%
Clean js (Full) 804.7±2.79µs 806.8±2.75µs -0.26%
Clean js (Parser) 35.9±0.04µs 35.8±0.03µs +0.28%
Create Realm 366.6±0.48ns 357.0±0.37ns +2.69%
Dynamic Object Property Access (Execution) 4.5±0.02µs 4.5±0.02µs 0.00%
Dynamic Object Property Access (Full) 248.1±0.26µs 245.1±0.30µs +1.22%
Expression (Parser) 6.0±0.00µs 6.0±0.01µs 0.00%
Fibonacci (Execution) 645.1±1.59µs 702.9±1.62µs -8.22%
Fibonacci (Full) 914.4±1.49µs 957.8±1.01µs -4.53%
For loop (Execution) 18.4±0.09µs 18.6±0.03µs -1.08%
For loop (Full) 263.0±0.34µs 257.1±0.67µs +2.29%
For loop (Parser) 17.0±0.03µs 17.3±0.03µs -1.73%
Goal Symbols (Parser) 12.2±0.02µs 12.3±0.02µs -0.81%
Hello World (Parser) 3.4±0.02µs 3.4±0.01µs 0.00%
Long file (Parser) 697.3±6.00ns 686.0±3.62ns +1.65%
Mini js (Execution) 478.2±3.81µs 472.5±3.32µs +1.21%
Mini js (Full) 747.8±2.44µs 759.9±21.62µs -1.59%
Mini js (Parser) 31.5±0.05µs 31.3±0.04µs +0.64%
Number Object Access (Execution) 3.6±0.01µs 3.6±0.01µs 0.00%
Number Object Access (Full) 239.8±0.46µs 239.6±0.33µs +0.08%
Object Creation (Execution) 3.8±0.01µs 4.0±0.01µs -5.00%
Object Creation (Full) 244.1±0.47µs 241.9±0.53µs +0.91%
RegExp (Execution) 9.5±0.02µs 9.6±0.02µs -1.04%
RegExp (Full) 256.9±2.07µs 256.8±0.66µs +0.04%
RegExp Literal (Execution) 9.4±0.03µs 9.6±0.02µs -2.08%
RegExp Literal (Full) 254.5±0.51µs 254.3±0.45µs +0.08%
RegExp Literal Creation (Execution) 8.2±0.04µs 8.4±0.02µs -2.38%
RegExp Literal Creation (Full) 246.8±1.44µs 244.9±0.66µs +0.78%
Static Object Property Access (Execution) 4.0±0.01µs 4.1±0.01µs -2.44%
Static Object Property Access (Full) 243.0±0.36µs 242.5±0.44µs +0.21%
String Object Access (Execution) 6.6±0.03µs 6.4±0.09µs +3.12%
String Object Access (Full) 248.0±0.57µs 249.5±0.30µs -0.60%
String comparison (Execution) 5.6±0.01µs 5.8±0.02µs -3.45%
String comparison (Full) 246.4±0.71µs 244.5±0.42µs +0.78%
String concatenation (Execution) 4.5±0.02µs 4.6±0.01µs -2.17%
String concatenation (Full) 239.8±0.36µs 241.2±0.62µs -0.58%
String copy (Execution) 3.4±0.01µs 3.6±0.01µs -5.56%
String copy (Full) 235.4±0.22µs 234.7±0.44µs +0.30%
Symbols (Execution) 2.9±0.01µs 3.0±0.00µs -3.33%
Symbols (Full) 231.1±0.62µs 229.5±0.52µs +0.70%

@HalidOdat HalidOdat merged commit d157a34 into master Jun 2, 2021
@HalidOdat HalidOdat deleted the fix/borrow-panics branch June 2, 2021 14:52
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
bug Something isn't working
Projects
None yet
Development

Successfully merging this pull request may close these issues.

Test262 panics
4 participants