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

Implement functions for vm #1433

Merged
merged 1 commit into from Oct 1, 2021
Merged

Implement functions for vm #1433

merged 1 commit into from Oct 1, 2021

Conversation

HalidOdat
Copy link
Member

@HalidOdat HalidOdat commented Jul 26, 2021

This Pull Request fixes/closes #1430 .

It changes the following:

  • Implement compilation of declaration,expression and arrow functions
  • Implement calling functions for vm.
  • Implement calling vm function from rust side .call()
  • Implement stack unwinding.
  • Implement stack size limit (because of the non-compliant way we call functions this currently does not work, need to fix that first).

Now we can run code like

function double(a) {
	return a * a;
}
[1, 2, 3, 4]["reverse"]().forEach((e) => {
	console.log(double(e));
});

@HalidOdat HalidOdat added enhancement New feature or request vm Issues and PRs related to the Boa Virtual Machine. labels Jul 26, 2021
@github-actions
Copy link

github-actions bot commented Jul 26, 2021

Test262 conformance changes:

Test result master count PR count difference
Total 80,804 80,804 0
Passed 33,174 33,174 0
Ignored 15,896 15,896 0
Failed 31,734 31,734 0
Panics 0 0 0
Conformance 41.05% 41.05% 0.00%

@github-actions
Copy link

Benchmark for b1f2b95

Click to view benchmark
Test PR Benchmark Master Benchmark %
Arithmetic operations (Execution) 277.7±0.52ns 289.3±7.73ns -4.01%
Arithmetic operations (Full) 281.1±0.42µs 312.5±16.98µs -10.05%
Array access (Execution) 6.5±0.03µs 6.5±0.02µs 0.00%
Array access (Full) 306.7±0.35µs 310.5±0.40µs -1.22%
Array creation (Execution) 2.8±0.00ms 2.9±0.00ms -3.45%
Array creation (Full) 3.1±0.06ms 2.9±0.00ms +6.90%
Array pop (Execution) 904.3±4.68µs 969.9±34.18µs -6.76%
Array pop (Full) 1398.3±12.16µs 1353.6±2.08µs +3.30%
Boolean Object Access (Execution) 5.4±0.01µs 6.0±0.50µs -10.00%
Boolean Object Access (Full) 299.8±1.32µs 305.7±0.38µs -1.93%
Clean js (Execution) 832.9±79.00µs 719.3±4.02µs +15.79%
Clean js (Full) 1058.2±14.71µs 1054.6±5.25µs +0.34%
Clean js (Parser) 39.5±0.05µs 39.2±0.11µs +0.77%
Create Realm 476.7±51.62ns 464.8±37.56ns +2.56%
Dynamic Object Property Access (Execution) 5.3±0.01µs 6.1±0.44µs -13.11%
Dynamic Object Property Access (Full) 368.0±29.29µs 307.1±0.64µs +19.83%
Expression (Parser) 6.9±0.01µs 6.8±0.01µs +1.47%
Fibonacci (Execution) 779.5±0.89µs 765.0±1.32µs +1.90%
Fibonacci (Full) 1094.9±2.62µs 1109.1±2.01µs -1.28%
For loop (Execution) 21.5±0.02µs 21.7±0.04µs -0.92%
For loop (Full) 319.8±0.47µs 323.2±0.39µs -1.05%
For loop (Parser) 18.9±0.02µs 18.9±0.05µs 0.00%
Goal Symbols (Parser) 15.5±0.77µs 13.8±0.03µs +12.32%
Hello World (Parser) 3.7±0.01µs 3.8±0.00µs -2.63%
Long file (Parser) 805.3±0.68ns 807.1±0.54ns -0.22%
Mini js (Execution) 656.3±4.49µs 656.2±4.79µs +0.02%
Mini js (Full) 988.9±4.22µs 985.2±3.44µs +0.38%
Mini js (Parser) 34.2±0.06µs 36.4±1.61µs -6.04%
Number Object Access (Execution) 4.3±0.01µs 4.6±0.18µs -6.52%
Number Object Access (Full) 296.9±0.56µs 300.5±0.84µs -1.20%
Object Creation (Execution) 4.5±0.02µs 5.0±0.35µs -10.00%
Object Creation (Full) 299.7±0.97µs 303.2±0.45µs -1.15%
RegExp (Execution) 13.4±0.07µs 13.5±0.06µs -0.74%
RegExp (Full) 310.4±0.58µs 343.4±17.93µs -9.61%
RegExp Literal (Execution) 13.5±0.06µs 13.6±0.07µs -0.74%
RegExp Literal (Full) 315.9±0.42µs 349.9±20.45µs -9.72%
RegExp Literal Creation (Execution) 10.2±0.03µs 10.3±0.05µs -0.97%
RegExp Literal Creation (Full) 370.1±29.01µs 308.3±0.70µs +20.05%
Static Object Property Access (Execution) 4.7±0.03µs 4.9±0.02µs -4.08%
Static Object Property Access (Full) 356.5±24.31µs 304.2±0.65µs +17.19%
String Object Access (Execution) 7.4±0.02µs 7.3±0.03µs +1.37%
String Object Access (Full) 303.3±0.49µs 308.1±0.67µs -1.56%
String comparison (Execution) 7.8±0.66µs 7.2±0.49µs +8.33%
String comparison (Full) 305.1±1.64µs 336.2±21.15µs -9.25%
String concatenation (Execution) 5.3±0.01µs 5.5±0.02µs -3.64%
String concatenation (Full) 298.9±0.63µs 302.9±0.76µs -1.32%
String copy (Execution) 4.0±0.02µs 4.1±0.01µs -2.44%
String copy (Full) 290.4±0.45µs 296.2±0.58µs -1.96%
Symbols (Execution) 3.5±0.02µs 3.5±0.01µs 0.00%
Symbols (Full) 276.8±0.34µs 306.1±15.74µs -9.57%

@github-actions
Copy link

Benchmark for 46594be

Click to view benchmark
Test PR Benchmark Master Benchmark %
Arithmetic operations (Execution) 279.5±7.16ns 290.2±8.50ns -3.69%
Arithmetic operations (Full) 311.1±7.51µs 313.0±15.25µs -0.61%
Array access (Execution) 6.8±0.21µs 6.7±0.51µs +1.49%
Array access (Full) 342.2±9.44µs 341.8±11.14µs +0.12%
Array creation (Execution) 2.8±0.07ms 2.8±0.08ms 0.00%
Array creation (Full) 3.1±0.08ms 3.1±0.11ms 0.00%
Array pop (Execution) 916.6±20.20µs 904.3±19.60µs +1.36%
Array pop (Full) 1399.3±41.00µs 1403.6±53.66µs -0.31%
Boolean Object Access (Execution) 5.8±0.17µs 6.0±0.19µs -3.33%
Boolean Object Access (Full) 335.4±13.60µs 329.7±8.37µs +1.73%
Clean js (Execution) 749.8±25.17µs 755.0±20.29µs -0.69%
Clean js (Full) 1108.6±31.14µs 1100.6±32.29µs +0.73%
Clean js (Parser) 37.6±1.55µs 37.6±1.54µs 0.00%
Create Realm 450.8±13.26ns 442.9±18.31ns +1.78%
Dynamic Object Property Access (Execution) 5.4±0.14µs 5.4±0.19µs 0.00%
Dynamic Object Property Access (Full) 337.8±18.54µs 344.7±17.37µs -2.00%
Expression (Parser) 6.4±0.15µs 6.5±0.16µs -1.54%
Fibonacci (Execution) 861.0±17.45µs 874.1±17.42µs -1.50%
Fibonacci (Full) 1238.0±35.70µs 1246.2±41.07µs -0.66%
For loop (Execution) 22.1±0.65µs 21.6±0.90µs +2.31%
For loop (Full) 347.1±8.23µs 343.7±9.52µs +0.99%
For loop (Parser) 17.7±0.79µs 17.7±0.71µs 0.00%
Goal Symbols (Parser) 13.0±0.45µs 12.9±0.52µs +0.78%
Hello World (Parser) 3.6±0.12µs 3.6±0.13µs 0.00%
Long file (Parser) 833.2±24.20ns 842.0±22.18ns -1.05%
Mini js (Execution) 675.4±23.25µs 671.4±17.75µs +0.60%
Mini js (Full) 1036.9±30.20µs 1030.5±53.11µs +0.62%
Mini js (Parser) 32.9±1.00µs 32.9±1.58µs 0.00%
Number Object Access (Execution) 4.5±0.10µs 4.6±0.15µs -2.17%
Number Object Access (Full) 332.1±20.12µs 331.9±16.78µs +0.06%
Object Creation (Execution) 4.8±0.14µs 4.7±0.16µs +2.13%
Object Creation (Full) 333.4±14.51µs 329.5±11.57µs +1.18%
RegExp (Execution) 13.8±0.49µs 13.7±0.31µs +0.73%
RegExp (Full) 340.9±7.77µs 344.7±17.89µs -1.10%
RegExp Literal (Execution) 13.8±0.58µs 13.9±0.43µs -0.72%
RegExp Literal (Full) 353.0±16.99µs 341.8±8.85µs +3.28%
RegExp Literal Creation (Execution) 10.2±0.23µs 10.2±0.37µs 0.00%
RegExp Literal Creation (Full) 340.3±16.82µs 336.6±9.72µs +1.10%
Static Object Property Access (Execution) 5.1±0.11µs 5.1±0.16µs 0.00%
Static Object Property Access (Full) 332.4±10.84µs 328.8±9.34µs +1.09%
String Object Access (Execution) 7.4±0.20µs 7.6±0.24µs -2.63%
String Object Access (Full) 333.4±9.05µs 332.9±10.04µs +0.15%
String comparison (Execution) 7.0±0.27µs 6.6±0.26µs +6.06%
String comparison (Full) 338.4±19.70µs 337.6±10.76µs +0.24%
String concatenation (Execution) 5.4±0.26µs 5.3±0.21µs +1.89%
String concatenation (Full) 331.9±14.99µs 326.7±8.77µs +1.59%
String copy (Execution) 4.3±0.19µs 4.3±0.25µs 0.00%
String copy (Full) 326.2±13.32µs 320.2±8.96µs +1.87%
Symbols (Execution) 3.7±0.12µs 3.5±0.13µs +5.71%
Symbols (Full) 314.3±21.45µs 304.9±11.52µs +3.08%

@HalidOdat
Copy link
Member Author

I'll try to rebase this today :)

@HalidOdat HalidOdat added this to the v0.13.0 milestone Aug 24, 2021
@HalidOdat HalidOdat force-pushed the vm/functions branch 2 times, most recently from 7e1fcd3 to 138a530 Compare August 24, 2021 09:47
@github-actions
Copy link

Benchmark for 5d70616

Click to view benchmark
Test PR Benchmark Master Benchmark %
Arithmetic operations (Execution) 272.4±2.59ns 291.4±9.20ns -6.52%
Arithmetic operations (Full) 312.4±2.63µs 310.4±4.88µs +0.64%
Array access (Execution) 6.7±0.07µs 6.7±0.11µs 0.00%
Array access (Full) 334.2±5.45µs 337.8±4.95µs -1.07%
Array creation (Execution) 3.0±0.04ms 3.1±0.04ms -3.23%
Array creation (Full) 3.1±0.04ms 3.1±0.05ms 0.00%
Array pop (Execution) 996.6±15.74µs 1021.8±15.60µs -2.47%
Array pop (Full) 1444.8±17.24µs 1417.8±23.75µs +1.90%
Boolean Object Access (Execution) 5.4±0.06µs 5.4±0.12µs 0.00%
Boolean Object Access (Full) 327.6±3.62µs 329.9±6.18µs -0.70%
Clean js (Execution) 741.5±10.25µs 755.4±8.99µs -1.84%
Clean js (Full) 1091.4±15.48µs 1101.1±13.65µs -0.88%
Clean js (Parser) 33.9±0.53µs 34.2±0.39µs -0.88%
Create Realm 416.8±7.66ns 423.0±23.57ns -1.47%
Dynamic Object Property Access (Execution) 5.3±0.09µs 5.3±0.09µs 0.00%
Dynamic Object Property Access (Full) 331.8±3.82µs 331.8±9.40µs 0.00%
Expression (Parser) 6.2±0.09µs 6.1±0.08µs +1.64%
Fibonacci (Execution) 783.9±9.29µs 798.5±6.97µs -1.83%
Fibonacci (Full) 1161.1±18.41µs 1169.1±9.55µs -0.68%
For loop (Execution) 19.9±0.28µs 19.9±0.28µs 0.00%
For loop (Full) 339.9±3.79µs 341.1±4.73µs -0.35%
For loop (Parser) 16.3±0.31µs 16.4±0.25µs -0.61%
Goal Symbols (Parser) 12.0±0.18µs 11.9±0.22µs +0.84%
Hello World (Parser) 3.5±0.03µs 3.5±0.05µs 0.00%
Long file (Parser) 773.2±11.79ns 781.0±10.35ns -1.00%
Mini js (Execution) 680.3±12.84µs 690.6±13.83µs -1.49%
Mini js (Full) 1031.2±14.00µs 1031.7±16.75µs -0.05%
Mini js (Parser) 30.0±0.34µs 30.2±0.36µs -0.66%
Number Object Access (Execution) 4.2±0.05µs 4.2±0.05µs 0.00%
Number Object Access (Full) 325.1±4.10µs 326.2±5.08µs -0.34%
Object Creation (Execution) 4.7±0.08µs 4.7±0.08µs 0.00%
Object Creation (Full) 327.1±4.26µs 327.4±3.38µs -0.09%
RegExp (Execution) 13.0±0.32µs 13.0±0.21µs 0.00%
RegExp (Full) 339.1±3.78µs 339.2±7.39µs -0.03%
RegExp Literal (Execution) 13.0±0.15µs 13.1±0.18µs -0.76%
RegExp Literal (Full) 343.9±4.27µs 343.3±5.28µs +0.17%
RegExp Literal Creation (Execution) 9.6±0.14µs 9.5±0.16µs +1.05%
RegExp Literal Creation (Full) 332.9±4.16µs 335.8±6.03µs -0.86%
Static Object Property Access (Execution) 4.9±0.06µs 5.0±0.03µs -2.00%
Static Object Property Access (Full) 331.2±3.08µs 326.0±8.80µs +1.60%
String Object Access (Execution) 7.1±0.06µs 7.2±0.09µs -1.39%
String Object Access (Full) 331.6±4.12µs 333.1±4.19µs -0.45%
String comparison (Execution) 6.9±0.07µs 6.9±0.10µs 0.00%
String comparison (Full) 332.0±4.90µs 332.9±4.10µs -0.27%
String concatenation (Execution) 5.3±0.05µs 5.3±0.07µs 0.00%
String concatenation (Full) 326.2±2.93µs 327.3±3.70µs -0.34%
String copy (Execution) 4.2±0.05µs 4.1±0.06µs +2.44%
String copy (Full) 321.7±2.41µs 319.3±4.28µs +0.75%
Symbols (Execution) 3.5±0.10µs 3.6±0.03µs -2.78%
Symbols (Full) 308.8±3.88µs 310.3±4.11µs -0.48%

@github-actions
Copy link

Benchmark for 70332f9

Click to view benchmark
Test PR Benchmark Master Benchmark %
Arithmetic operations (Execution) 276.7±16.82ns 262.3±19.33ns +5.49%
Arithmetic operations (Full) 342.1±32.79µs 356.5±28.94µs -4.04%
Array access (Execution) 7.8±0.39µs 7.9±0.75µs -1.27%
Array access (Full) 385.0±22.25µs 370.8±22.88µs +3.83%
Array creation (Execution) 3.1±0.16ms 3.0±0.14ms +3.33%
Array creation (Full) 3.5±0.22ms 3.4±0.23ms +2.94%
Array pop (Execution) 1021.6±80.98µs 992.9±66.13µs +2.89%
Array pop (Full) 1563.2±80.80µs 1502.2±80.96µs +4.06%
Boolean Object Access (Execution) 6.3±0.38µs 5.8±0.28µs +8.62%
Boolean Object Access (Full) 353.5±26.94µs 360.7±20.73µs -2.00%
Clean js (Execution) 798.5±49.31µs 766.1±41.84µs +4.23%
Clean js (Full) 1117.8±69.22µs 1230.6±93.21µs -9.17%
Clean js (Parser) 36.0±2.28µs 37.8±2.22µs -4.76%
Create Realm 453.2±32.48ns 448.8±29.52ns +0.98%
Dynamic Object Property Access (Execution) 6.3±0.41µs 6.1±0.28µs +3.28%
Dynamic Object Property Access (Full) 365.5±43.51µs 363.9±29.47µs +0.44%
Expression (Parser) 6.0±0.34µs 7.1±1.04µs -15.49%
Fibonacci (Execution) 959.0±45.38µs 950.9±50.57µs +0.85%
Fibonacci (Full) 1378.7±98.30µs 1322.0±71.77µs +4.29%
For loop (Execution) 22.3±1.88µs 22.1±1.73µs +0.90%
For loop (Full) 377.0±21.12µs 366.6±29.86µs +2.84%
For loop (Parser) 17.6±1.39µs 18.1±1.15µs -2.76%
Goal Symbols (Parser) 12.3±0.62µs 13.1±0.88µs -6.11%
Hello World (Parser) 3.5±0.18µs 3.7±0.28µs -5.41%
Long file (Parser) 805.9±72.44ns 825.3±36.22ns -2.35%
Mini js (Execution) 720.2±34.78µs 692.2±32.66µs +4.05%
Mini js (Full) 1054.3±60.99µs 1118.4±61.13µs -5.73%
Mini js (Parser) 31.8±1.73µs 33.1±2.41µs -3.93%
Number Object Access (Execution) 4.8±0.22µs 4.6±0.19µs +4.35%
Number Object Access (Full) 349.0±18.75µs 362.5±23.15µs -3.72%
Object Creation (Execution) 5.6±0.32µs 5.5±0.27µs +1.82%
Object Creation (Full) 366.0±13.85µs 354.3±17.39µs +3.30%
RegExp (Execution) 14.9±0.91µs 14.4±1.13µs +3.47%
RegExp (Full) 367.0±26.39µs 358.0±16.99µs +2.51%
RegExp Literal (Execution) 14.8±0.73µs 14.6±0.81µs +1.37%
RegExp Literal (Full) 393.1±29.20µs 382.7±18.32µs +2.72%
RegExp Literal Creation (Execution) 10.8±0.61µs 10.7±0.72µs +0.93%
RegExp Literal Creation (Full) 374.4±39.52µs 368.2±23.58µs +1.68%
Static Object Property Access (Execution) 5.8±0.37µs 5.7±0.42µs +1.75%
Static Object Property Access (Full) 373.5±18.73µs 358.9±18.44µs +4.07%
String Object Access (Execution) 8.3±0.81µs 8.0±0.47µs +3.75%
String Object Access (Full) 352.8±20.86µs 378.4±127.21µs -6.77%
String comparison (Execution) 7.8±0.42µs 7.5±0.40µs +4.00%
String comparison (Full) 359.1±22.37µs 367.2±25.73µs -2.21%
String concatenation (Execution) 6.2±0.36µs 6.0±0.33µs +3.33%
String concatenation (Full) 356.8±21.32µs 361.8±16.97µs -1.38%
String copy (Execution) 5.0±0.28µs 4.8±0.26µs +4.17%
String copy (Full) 350.1±24.68µs 362.8±21.72µs -3.50%
Symbols (Execution) 4.3±0.31µs 4.1±0.19µs +4.88%
Symbols (Full) 348.6±26.28µs 331.4±18.01µs +5.19%

@github-actions
Copy link

Benchmark for 6f99c33

Click to view benchmark
Test PR Benchmark Master Benchmark %
Arithmetic operations (Execution) 272.7±9.17ns 259.1±10.77ns +5.25%
Arithmetic operations (Full) 332.0±18.82µs 321.8±14.68µs +3.17%
Array access (Execution) 7.5±0.30µs 7.2±0.24µs +4.17%
Array access (Full) 355.7±13.60µs 355.7±25.24µs 0.00%
Array creation (Execution) 2.8±0.12ms 2.8±0.09ms 0.00%
Array creation (Full) 3.2±0.15ms 3.1±0.13ms +3.23%
Array pop (Execution) 928.5±27.84µs 945.0±27.11µs -1.75%
Array pop (Full) 1463.4±64.67µs 1439.6±62.90µs +1.65%
Boolean Object Access (Execution) 6.0±0.91µs 5.8±0.16µs +3.45%
Boolean Object Access (Full) 348.0±21.87µs 349.1±15.45µs -0.32%
Clean js (Execution) 751.5±31.87µs 768.5±37.56µs -2.21%
Clean js (Full) 1109.7±43.91µs 1092.1±38.97µs +1.61%
Clean js (Parser) 36.4±0.88µs 37.2±1.96µs -2.15%
Create Realm 422.7±17.33ns 437.3±15.20ns -3.34%
Dynamic Object Property Access (Execution) 6.0±0.61µs 5.6±0.30µs +7.14%
Dynamic Object Property Access (Full) 357.1±17.66µs 347.7±19.90µs +2.70%
Expression (Parser) 5.8±0.32µs 6.1±0.26µs -4.92%
Fibonacci (Execution) 907.7±24.38µs 885.3±42.25µs +2.53%
Fibonacci (Full) 1226.7±53.32µs 1207.2±52.20µs +1.62%
For loop (Execution) 21.9±1.04µs 21.7±1.07µs +0.92%
For loop (Full) 357.6±15.06µs 357.2±11.14µs +0.11%
For loop (Parser) 16.8±0.64µs 17.5±0.81µs -4.00%
Goal Symbols (Parser) 12.9±0.68µs 12.8±0.47µs +0.78%
Hello World (Parser) 3.5±0.21µs 3.7±0.17µs -5.41%
Long file (Parser) 804.4±27.17ns 801.1±30.72ns +0.41%
Mini js (Execution) 683.3±25.40µs 686.3±23.13µs -0.44%
Mini js (Full) 1068.8±46.26µs 1040.3±42.40µs +2.74%
Mini js (Parser) 32.0±1.57µs 31.7±1.33µs +0.95%
Number Object Access (Execution) 4.6±0.19µs 4.5±0.24µs +2.22%
Number Object Access (Full) 346.5±17.01µs 346.4±17.70µs +0.03%
Object Creation (Execution) 5.3±0.35µs 5.1±0.23µs +3.92%
Object Creation (Full) 351.6±27.70µs 343.9±13.86µs +2.24%
RegExp (Execution) 14.3±0.51µs 13.9±0.62µs +2.88%
RegExp (Full) 354.2±14.26µs 363.6±20.76µs -2.59%
RegExp Literal (Execution) 14.2±0.35µs 13.9±0.68µs +2.16%
RegExp Literal (Full) 377.8±61.48µs 371.0±34.71µs +1.83%
RegExp Literal Creation (Execution) 10.2±0.24µs 9.8±0.34µs +4.08%
RegExp Literal Creation (Full) 358.7±28.01µs 349.5±13.08µs +2.63%
Static Object Property Access (Execution) 5.5±0.22µs 5.4±0.41µs +1.85%
Static Object Property Access (Full) 350.9±22.50µs 348.6±14.16µs +0.66%
String Object Access (Execution) 7.8±0.26µs 7.8±0.45µs 0.00%
String Object Access (Full) 352.1±12.70µs 356.8±16.54µs -1.32%
String comparison (Execution) 7.6±0.44µs 7.2±0.57µs +5.56%
String comparison (Full) 347.9±14.87µs 350.0±13.57µs -0.60%
String concatenation (Execution) 5.9±0.26µs 5.5±0.23µs +7.27%
String concatenation (Full) 345.1±19.50µs 340.0±33.45µs +1.50%
String copy (Execution) 4.8±0.22µs 4.5±0.18µs +6.67%
String copy (Full) 347.7±23.02µs 340.1±15.95µs +2.23%
Symbols (Execution) 4.1±0.27µs 3.8±0.17µs +7.89%
Symbols (Full) 326.9±13.41µs 323.3±9.52µs +1.11%

@github-actions
Copy link

Benchmark for 48d136b

Click to view benchmark
Test PR Benchmark Master Benchmark %
Arithmetic operations (Execution) 280.9±11.52ns 279.7±7.14ns +0.43%
Arithmetic operations (Full) 325.9±16.71µs 333.3±23.98µs -2.22%
Array access (Execution) 7.5±0.39µs 7.5±0.49µs 0.00%
Array access (Full) 358.4±13.79µs 357.4±11.91µs +0.28%
Array creation (Execution) 3.0±0.08ms 2.8±0.05ms +7.14%
Array creation (Full) 3.2±0.07ms 3.3±0.13ms -3.03%
Array pop (Execution) 983.9±24.67µs 926.6±14.54µs +6.18%
Array pop (Full) 1489.4±68.92µs 1495.8±29.19µs -0.43%
Boolean Object Access (Execution) 6.3±0.29µs 5.7±0.21µs +10.53%
Boolean Object Access (Full) 345.0±6.69µs 351.7±12.21µs -1.91%
Clean js (Execution) 798.5±40.41µs 779.8±33.75µs +2.40%
Clean js (Full) 1175.5±61.53µs 1158.7±35.99µs +1.45%
Clean js (Parser) 36.5±1.02µs 36.4±0.90µs +0.27%
Create Realm 432.0±7.11ns 432.3±25.69ns -0.07%
Dynamic Object Property Access (Execution) 5.9±0.27µs 5.7±0.19µs +3.51%
Dynamic Object Property Access (Full) 352.4±9.58µs 352.7±8.98µs -0.09%
Expression (Parser) 6.2±0.26µs 6.4±0.49µs -3.13%
Fibonacci (Execution) 912.1±29.39µs 903.6±19.72µs +0.94%
Fibonacci (Full) 1285.2±47.89µs 1292.5±45.52µs -0.56%
For loop (Execution) 21.6±1.31µs 21.3±0.39µs +1.41%
For loop (Full) 359.5±12.10µs 356.9±7.79µs +0.73%
For loop (Parser) 17.1±0.46µs 17.4±0.57µs -1.72%
Goal Symbols (Parser) 12.8±0.44µs 12.8±1.49µs 0.00%
Hello World (Parser) 3.6±0.16µs 3.5±0.11µs +2.86%
Long file (Parser) 805.8±41.27ns 817.3±39.40ns -1.41%
Mini js (Execution) 723.2±27.85µs 714.9±22.72µs +1.16%
Mini js (Full) 1107.4±64.76µs 1117.7±59.29µs -0.92%
Mini js (Parser) 32.2±0.78µs 32.4±1.42µs -0.62%
Number Object Access (Execution) 4.5±0.58µs 4.5±0.14µs 0.00%
Number Object Access (Full) 342.6±10.46µs 347.7±11.72µs -1.47%
Object Creation (Execution) 5.1±0.22µs 5.0±0.10µs +2.00%
Object Creation (Full) 347.7±11.71µs 349.1±12.93µs -0.40%
RegExp (Execution) 14.0±0.63µs 14.4±0.39µs -2.78%
RegExp (Full) 354.1±9.10µs 360.3±10.11µs -1.72%
RegExp Literal (Execution) 13.9±0.31µs 14.3±0.55µs -2.80%
RegExp Literal (Full) 363.9±9.78µs 365.2±9.65µs -0.36%
RegExp Literal Creation (Execution) 10.0±0.35µs 10.0±0.28µs 0.00%
RegExp Literal Creation (Full) 351.4±8.89µs 356.9±67.53µs -1.54%
Static Object Property Access (Execution) 5.3±0.14µs 5.3±0.12µs 0.00%
Static Object Property Access (Full) 350.2±13.48µs 348.7±8.69µs +0.43%
String Object Access (Execution) 8.1±0.17µs 8.2±0.35µs -1.22%
String Object Access (Full) 353.7±11.17µs 353.6±9.92µs +0.03%
String comparison (Execution) 7.2±0.18µs 7.1±0.26µs +1.41%
String comparison (Full) 352.9±11.63µs 357.2±15.43µs -1.20%
String concatenation (Execution) 5.7±0.18µs 5.8±0.19µs -1.72%
String concatenation (Full) 349.8±14.80µs 348.6±8.42µs +0.34%
String copy (Execution) 4.5±0.12µs 4.6±0.20µs -2.17%
String copy (Full) 338.5±8.07µs 339.6±9.97µs -0.32%
Symbols (Execution) 3.8±0.11µs 3.8±0.15µs 0.00%
Symbols (Full) 321.9±8.33µs 332.4±14.25µs -3.16%

@HalidOdat HalidOdat force-pushed the vm/functions branch 2 times, most recently from e18aa7d to a56469a Compare August 28, 2021 19:53
@github-actions
Copy link

Benchmark for 802ffe3

Click to view benchmark
Test PR Benchmark Master Benchmark %
Arithmetic operations (Execution) 262.1±13.51ns 255.4±13.87ns +2.62%
Arithmetic operations (Full) 332.7±17.98µs 320.1±15.73µs +3.94%
Array access (Execution) 7.2±0.30µs 7.5±1.06µs -4.00%
Array access (Full) 345.3±18.65µs 363.4±34.67µs -4.98%
Array creation (Execution) 3.1±0.16ms 3.2±0.12ms -3.13%
Array creation (Full) 3.7±0.21ms 3.4±0.21ms +8.82%
Array pop (Execution) 969.0±43.89µs 999.9±50.07µs -3.09%
Array pop (Full) 1533.0±79.67µs 1520.6±86.14µs +0.82%
Boolean Object Access (Execution) 5.8±0.36µs 5.8±0.21µs 0.00%
Boolean Object Access (Full) 337.6±17.75µs 342.6±16.40µs -1.46%
Clean js (Execution) 792.7±33.56µs 783.6±31.85µs +1.16%
Clean js (Full) 1146.2±70.67µs 1205.4±136.77µs -4.91%
Clean js (Parser) 37.1±2.33µs 36.9±2.30µs +0.54%
Create Realm 433.4±30.43ns 445.6±20.23ns -2.74%
Dynamic Object Property Access (Execution) 5.8±0.27µs 5.8±0.28µs 0.00%
Dynamic Object Property Access (Full) 338.6±17.40µs 347.0±24.76µs -2.42%
Expression (Parser) 6.5±0.42µs 6.2±0.32µs +4.84%
Fibonacci (Execution) 914.6±38.31µs 897.6±44.39µs +1.89%
Fibonacci (Full) 1241.4±55.45µs 1290.9±80.97µs -3.83%
For loop (Execution) 21.8±1.10µs 22.2±1.25µs -1.80%
For loop (Full) 347.3±18.59µs 337.5±18.27µs +2.90%
For loop (Parser) 17.6±1.18µs 17.6±0.84µs 0.00%
Goal Symbols (Parser) 12.8±0.70µs 12.5±0.74µs +2.40%
Hello World (Parser) 3.5±0.16µs 3.6±0.18µs -2.78%
Long file (Parser) 814.8±33.70ns 830.8±56.38ns -1.93%
Mini js (Execution) 699.7±31.80µs 699.4±31.71µs +0.04%
Mini js (Full) 1072.7±48.45µs 1098.4±138.73µs -2.34%
Mini js (Parser) 32.6±1.94µs 32.9±2.16µs -0.91%
Number Object Access (Execution) 4.6±1.58µs 4.3±0.23µs +6.98%
Number Object Access (Full) 327.2±15.50µs 351.9±15.75µs -7.02%
Object Creation (Execution) 5.1±0.23µs 5.1±0.26µs 0.00%
Object Creation (Full) 350.1±16.59µs 336.7±19.24µs +3.98%
RegExp (Execution) 13.8±0.66µs 14.8±0.85µs -6.76%
RegExp (Full) 343.6±18.72µs 334.5±17.81µs +2.72%
RegExp Literal (Execution) 13.8±0.51µs 14.5±2.17µs -4.83%
RegExp Literal (Full) 355.6±21.15µs 358.4±20.71µs -0.78%
RegExp Literal Creation (Execution) 10.2±0.49µs 10.0±0.57µs +2.00%
RegExp Literal Creation (Full) 347.2±36.98µs 360.5±26.67µs -3.69%
Static Object Property Access (Execution) 5.4±0.69µs 5.3±0.36µs +1.89%
Static Object Property Access (Full) 335.6±25.42µs 348.1±19.74µs -3.59%
String Object Access (Execution) 8.2±0.60µs 8.5±0.55µs -3.53%
String Object Access (Full) 341.3±16.74µs 353.0±20.70µs -3.31%
String comparison (Execution) 7.5±0.42µs 7.4±0.40µs +1.35%
String comparison (Full) 340.0±19.28µs 342.4±18.67µs -0.70%
String concatenation (Execution) 5.9±0.39µs 5.9±0.26µs 0.00%
String concatenation (Full) 332.5±26.55µs 337.4±38.20µs -1.45%
String copy (Execution) 4.7±0.21µs 4.5±0.28µs +4.44%
String copy (Full) 345.4±20.45µs 335.5±14.74µs +2.95%
Symbols (Execution) 3.6±0.20µs 3.8±0.22µs -5.26%
Symbols (Full) 313.4±18.65µs 308.7±16.39µs +1.52%

@github-actions
Copy link

Benchmark for c031804

Click to view benchmark
Test PR Benchmark Master Benchmark %
Arithmetic operations (Execution) 279.5±9.86ns 273.7±16.25ns +2.12%
Arithmetic operations (Full) 325.8±8.73µs 326.2±17.26µs -0.12%
Array access (Execution) 7.4±0.40µs 7.5±0.18µs -1.33%
Array access (Full) 364.1±9.21µs 357.3±13.66µs +1.90%
Array creation (Execution) 3.2±0.10ms 3.2±0.14ms 0.00%
Array creation (Full) 3.5±0.13ms 3.5±0.16ms 0.00%
Array pop (Execution) 962.5±46.30µs 1022.9±39.33µs -5.90%
Array pop (Full) 1535.0±46.89µs 1544.7±51.08µs -0.63%
Boolean Object Access (Execution) 5.7±0.34µs 5.6±0.16µs +1.79%
Boolean Object Access (Full) 343.2±17.64µs 346.7±9.98µs -1.01%
Clean js (Execution) 795.0±29.08µs 805.2±18.14µs -1.27%
Clean js (Full) 1173.1±43.47µs 1192.8±52.44µs -1.65%
Clean js (Parser) 38.4±1.13µs 38.3±1.83µs +0.26%
Create Realm 459.7±15.24ns 450.0±14.59ns +2.16%
Dynamic Object Property Access (Execution) 6.0±0.37µs 5.8±0.18µs +3.45%
Dynamic Object Property Access (Full) 359.3±12.54µs 344.9±10.76µs +4.18%
Expression (Parser) 6.6±0.31µs 6.5±0.24µs +1.54%
Fibonacci (Execution) 952.4±28.26µs 938.4±27.28µs +1.49%
Fibonacci (Full) 1250.2±46.07µs 1255.2±40.15µs -0.40%
For loop (Execution) 22.5±1.08µs 22.8±0.78µs -1.32%
For loop (Full) 351.7±10.95µs 352.6±11.79µs -0.26%
For loop (Parser) 18.0±0.86µs 17.9±0.62µs +0.56%
Goal Symbols (Parser) 13.2±0.58µs 13.2±0.45µs 0.00%
Hello World (Parser) 3.6±0.13µs 3.6±0.08µs 0.00%
Long file (Parser) 836.8±31.72ns 835.3±45.07ns +0.18%
Mini js (Execution) 723.7±32.10µs 726.7±31.60µs -0.41%
Mini js (Full) 1116.5±44.05µs 1131.1±44.17µs -1.29%
Mini js (Parser) 33.3±1.02µs 32.8±1.25µs +1.52%
Number Object Access (Execution) 4.5±0.12µs 4.4±0.11µs +2.27%
Number Object Access (Full) 339.3±11.45µs 342.5±13.99µs -0.93%
Object Creation (Execution) 5.3±0.31µs 5.3±0.25µs 0.00%
Object Creation (Full) 348.3±15.14µs 346.3±12.38µs +0.58%
RegExp (Execution) 14.3±0.56µs 14.1±0.44µs +1.42%
RegExp (Full) 353.8±11.94µs 352.2±10.86µs +0.45%
RegExp Literal (Execution) 14.3±0.53µs 14.2±0.49µs +0.70%
RegExp Literal (Full) 369.1±15.25µs 366.6±16.54µs +0.68%
RegExp Literal Creation (Execution) 10.2±0.27µs 10.0±0.29µs +2.00%
RegExp Literal Creation (Full) 355.0±8.47µs 346.2±17.36µs +2.54%
Static Object Property Access (Execution) 5.6±0.48µs 5.4±0.13µs +3.70%
Static Object Property Access (Full) 349.7±15.03µs 356.6±29.88µs -1.93%
String Object Access (Execution) 8.1±0.41µs 8.3±0.32µs -2.41%
String Object Access (Full) 350.1±14.95µs 354.0±12.02µs -1.10%
String comparison (Execution) 7.6±0.35µs 7.5±0.54µs +1.33%
String comparison (Full) 354.0±11.59µs 349.7±9.21µs +1.23%
String concatenation (Execution) 5.9±0.21µs 5.8±0.22µs +1.72%
String concatenation (Full) 345.7±13.78µs 345.0±12.43µs +0.20%
String copy (Execution) 4.6±0.18µs 4.7±0.20µs -2.13%
String copy (Full) 345.2±16.53µs 333.9±7.96µs +3.38%
Symbols (Execution) 3.8±0.12µs 3.7±0.10µs +2.70%
Symbols (Full) 318.0±11.73µs 313.3±8.89µs +1.50%

@HalidOdat
Copy link
Member Author

I'll try to rebase this today :)

Copy link
Member

@raskad raskad left a comment

Choose a reason for hiding this comment

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

I'm not that knowledgeable about the vm (yet), but from what I can see this looks sound.
I like the restructuring of Vm, CallFrame and CodeBlock.

There are some unresolved docs links in boa/src/object/function.rs you may want to fix.

 - Separate builtin function from rust JavaScript function
 - Removed BuiltInFunction struct
@raskad raskad modified the milestones: v0.13.0, v0.14.0 Sep 25, 2021
@raskad raskad added this to To do in Virtual Machine Oct 1, 2021
@raskad raskad moved this from To do to In progress in Virtual Machine Oct 1, 2021
@jasonwilliams
Copy link
Member

Im going to merge this, its had approvals and looks good to me,

@jasonwilliams jasonwilliams merged commit aacdd12 into master Oct 1, 2021
@raskad raskad moved this from In progress to Done in Virtual Machine Oct 1, 2021
@RageKnify RageKnify deleted the vm/functions branch October 4, 2021 16:03
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
enhancement New feature or request vm Issues and PRs related to the Boa Virtual Machine.
Projects
No open projects
Development

Successfully merging this pull request may close these issues.

Implement function declaration on VM
4 participants