Aliaksandr Kalenik 
								
							 
						 
						
							
							
							
							
								
							
							
								ae3a7fd4b8 
								
							 
						 
						
							
							
								
								LibJS: Update bytecode generator to use local variables  
							
							... 
							
							
							
							- Update ECMAScriptFunctionObject::function_declaration_instantiation
  to initialize local variables
- Introduce GetLocal, SetLocal, TypeofLocal that will be used to
  operate on local variables.
- Update bytecode generator to emit instructions for local variables 
							
						 
						
							2023-07-05 21:03:01 +02:00 
							
								 
							
							
								 
							
						 
					 
				
					
						
							
								
								
									Aliaksandr Kalenik 
								
							 
						 
						
							
							
							
							
								
							
							
								c734f2b5e6 
								
							 
						 
						
							
							
								
								LibJS: Use Identifier to represent name of ClassExpression  
							
							... 
							
							
							
							By using Identifier class to represent the name of a class expression,
it becomes possible to consistently store information within the
identifier object, indicating whether the name refers to a local
variable or not. 
							
						 
						
							2023-07-05 21:03:01 +02:00 
							
								 
							
							
								 
							
						 
					 
				
					
						
							
								
								
									Andreas Kling 
								
							 
						 
						
							
							
							
							
								
							
							
								dfd0942e41 
								
							 
						 
						
							
							
								
								LibJS/Bytecode: Clear accumulator before entering for body  
							
							... 
							
							
							
							2 new passes on test262. :^) 
							
						 
						
							2023-07-05 15:39:25 +02:00 
							
								 
							
							
								 
							
						 
					 
				
					
						
							
								
								
									Andreas Kling 
								
							 
						 
						
							
							
							
							
								
							
							
								24b815d4a0 
								
							 
						 
						
							
							
								
								LibJS/Bytecode: Clear accumulator before entering while body  
							
							... 
							
							
							
							2 new passes on test262. :^) 
							
						 
						
							2023-07-05 15:39:25 +02:00 
							
								 
							
							
								 
							
						 
					 
				
					
						
							
								
								
									Andreas Kling 
								
							 
						 
						
							
							
							
							
								
							
							
								b14032bbfa 
								
							 
						 
						
							
							
								
								LibJS/Bytecode: Leave for in and for of with right completion value  
							
							... 
							
							
							
							14 new passes on test262. :^) 
							
						 
						
							2023-07-05 15:39:25 +02:00 
							
								 
							
							
								 
							
						 
					 
				
					
						
							
								
								
									Andreas Kling 
								
							 
						 
						
							
							
							
							
								
							
							
								7430dee5cf 
								
							 
						 
						
							
							
								
								LibJS/Bytecode: Make ClassDeclaration not clobber the accumulator  
							
							... 
							
							
							
							2 new passes on test262. :^) 
							
						 
						
							2023-07-05 15:39:25 +02:00 
							
								 
							
							
								 
							
						 
					 
				
					
						
							
								
								
									Andreas Kling 
								
							 
						 
						
							
							
							
							
								
							
							
								e87d84f883 
								
							 
						 
						
							
							
								
								LibJS/Bytecode: Support in binary operator for private fields  
							
							... 
							
							
							
							11 new passes on test262. :^) 
							
						 
						
							2023-07-05 15:39:25 +02:00 
							
								 
							
							
								 
							
						 
					 
				
					
						
							
								
								
									Andreas Kling 
								
							 
						 
						
							
							
							
							
								
							
							
								c37b204ce1 
								
							 
						 
						
							
							
								
								LibJS/Bytecode: Add Call opcode for fixed-argument-count calls  
							
							... 
							
							
							
							This avoids the overhead of allocating a new Array on every function
call, saving a substantial amount of time and avoiding GC thrash.
This patch only makes use of Op::Call in CallExpression. There are other
places we should codegen this op. We should also do the same for super
expression calls.
~5% speed-up on Kraken/stanford-crypto-ccm.js 
							
						 
						
							2023-07-02 18:30:02 +02:00 
							
								 
							
							
								 
							
						 
					 
				
					
						
							
								
								
									Andreas Kling 
								
							 
						 
						
							
							
							
							
								
							
							
								7eb87dec9f 
								
							 
						 
						
							
							
								
								LibJS/Bytecode: Rename Call and SuperCall to &WithArgumentArray  
							
							... 
							
							
							
							Forcing every function call to allocate a new Array just to accommodate
spread parameters is not very nice, so let's start moving towards making
this a special case rather than the general (and only) case. 
							
						 
						
							2023-07-02 18:30:02 +02:00 
							
								 
							
							
								 
							
						 
					 
				
					
						
							
								
								
									Andreas Kling 
								
							 
						 
						
							
							
							
							
								
							
							
								cea2071349 
								
							 
						 
						
							
							
								
								LibJS/Bytecode: Infer name of anonymous exported classes when possible  
							
							... 
							
							
							
							5 new passes on test262. :^) 
							
						 
						
							2023-07-02 12:18:25 +02:00 
							
								 
							
							
								 
							
						 
					 
				
					
						
							
								
								
									Andreas Kling 
								
							 
						 
						
							
							
							
							
								
							
							
								b0ae1e80fb 
								
							 
						 
						
							
							
								
								LibJS/Bytecode: Support using MemberExpression as rest property  
							
							... 
							
							
							
							Also, don't assert while dumping an AST with this construct.
7 new passes on test262. :^) 
							
						 
						
							2023-07-02 11:53:10 +02:00 
							
								 
							
							
								 
							
						 
					 
				
					
						
							
								
								
									Daniel Bertalan 
								
							 
						 
						
							
							
							
							
								
							
							
								0df7255fe7 
								
							 
						 
						
							
							
								
								LibJS/Bytecode: Do not clobber completion value with VariableDeclaration  
							
							... 
							
							
							
							While the completion value of a variable declaration is specified to be
empty, we might already have a completion value in the accumulator from
a previous statement. Preserve it so as to avoid clobbering it.
This fixes 6 tests on test262. 
							
						 
						
							2023-07-02 10:54:35 +02:00 
							
								 
							
							
								 
							
						 
					 
				
					
						
							
								
								
									Andreas Kling 
								
							 
						 
						
							
							
							
							
								
							
							
								bd2c3ace68 
								
							 
						 
						
							
							
								
								LibJS/Bytecode: Make sure empty with statement results in undefined  
							
							... 
							
							
							
							2 new passes on test262. :^) 
							
						 
						
							2023-07-02 10:54:28 +02:00 
							
								 
							
							
								 
							
						 
					 
				
					
						
							
								
								
									Aliaksandr Kalenik 
								
							 
						 
						
							
							
							
							
								
							
							
								1550e7c421 
								
							 
						 
						
							
							
								
								LibJS: Stop using execute_ast_node in NewClass instruction  
							
							... 
							
							
							
							This change replaces usage of `execute_ast_node` to evaluate super
expression in NewClass by generating instructions instead. 
							
						 
						
							2023-06-29 07:14:14 +02:00 
							
								 
							
							
								 
							
						 
					 
				
					
						
							
								
								
									Hendiadyoin1 
								
							 
						 
						
							
							
							
							
								
							
							
								37067cf3ca 
								
							 
						 
						
							
							
								
								LibJS: Use the IdentifierTable for NewFunction and NewClass lhs names  
							
							... 
							
							
							
							This makes them trivially copyable, which is an assumption multiple
optimizations use when rebuilding the instruction stream.
This fixes most optimized crashes in the test262 suite. 
							
						 
						
							2023-06-29 05:32:08 +02:00 
							
								 
							
							
								 
							
						 
					 
				
					
						
							
								
								
									Daniel Bertalan 
								
							 
						 
						
							
							
							
							
								
							
							
								50d6b1ba19 
								
							 
						 
						
							
							
								
								LibJS/Bytecode: Keep completion value of switch case if falling through  
							
							... 
							
							
							
							We do this by moving the `LoadImmediate undefined` instruction to a
separate basic block which jumps to the case's block unconditionally.
We enter a case initially using this wrapper, but when falling through,
we directly jump to the next case's block. 
							
						 
						
							2023-06-28 12:30:23 +02:00 
							
								 
							
							
								 
							
						 
					 
				
					
						
							
								
								
									Daniel Bertalan 
								
							 
						 
						
							
							
							
							
								
							
							
								fda619c7c2 
								
							 
						 
						
							
							
								
								LibJS/Bytecode: Implement Annex B Initializers in ForIn Statement Heads  
							
							
							
						 
						
							2023-06-28 10:42:32 +02:00 
							
								 
							
							
								 
							
						 
					 
				
					
						
							
								
								
									Daniel Bertalan 
								
							 
						 
						
							
							
							
							
								
							
							
								fc7de74b12 
								
							 
						 
						
							
							
								
								LibJS/Bytecode: Improve export statement handling  
							
							... 
							
							
							
							This adds support for exporting class expressions, which was previously
TODO'd.
We now correctly set the binding name of exports to `"*default*"` if
they are unnamed. I'm not sure what the difference between the
`InitializationMode` kinds is, but using `Initialize` fixes a bunch of
tests.
Note that some export tests (e.g. `eval-export-dflt-expr-cls-named.js`)
still fail, as we don't set the "name" property of exported classes
correctly.
176 new passes on test262 
							
						 
						
							2023-06-28 05:13:52 +02:00 
							
								 
							
							
								 
							
						 
					 
				
					
						
							
								
								
									Daniel Bertalan 
								
							 
						 
						
							
							
							
							
								
							
							
								11a7014b4e 
								
							 
						 
						
							
							
								
								LibJS/Bytecode: Handle ImportStatement in codegen  
							
							... 
							
							
							
							There is nothing to do here at runtime as imports are handled in
`Interpreter::run`. 
							
						 
						
							2023-06-27 21:10:08 +02:00 
							
								 
							
							
								 
							
						 
					 
				
					
						
							
								
								
									Luke Wilde 
								
							 
						 
						
							
							
							
							
								
							
							
								363bf114c0 
								
							 
						 
						
							
							
								
								LibJS/Bytecode: Implement for await of  
							
							... 
							
							
							
							Summary:
    Diff Tests:
        +391 ✅    +15 ❌    +2 💥 ️    -408 📝  
							
						 
						
							2023-06-27 21:04:22 +02:00 
							
								 
							
							
								 
							
						 
					 
				
					
						
							
								
								
									Andreas Kling 
								
							 
						 
						
							
							
							
							
								
							
							
								aec3d9d84e 
								
							 
						 
						
							
							
								
								LibJS/Bytecode: Prefer alias over name in object pattern bindings  
							
							... 
							
							
							
							10 new passes on test262. :^) 
							
						 
						
							2023-06-27 15:08:14 +02:00 
							
								 
							
							
								 
							
						 
					 
				
					
						
							
								
								
									Andreas Kling 
								
							 
						 
						
							
							
							
							
								
							
							
								56fb5a3f5d 
								
							 
						 
						
							
							
								
								LibJS/Bytecode: Ensure iterator is closed after array destructuring  
							
							... 
							
							
							
							If destructuring didn't exhaust the iterator, we have to manually close
the iterator.
49 new passes on test262. :^) 
							
						 
						
							2023-06-26 19:18:06 +02:00 
							
								 
							
							
								 
							
						 
					 
				
					
						
							
								
								
									Andreas Kling 
								
							 
						 
						
							
							
							
							
								
							
							
								55531e5cda 
								
							 
						 
						
							
							
								
								LibJS/Bytecode: Use LHS identifier as function name on logical assign  
							
							... 
							
							
							
							This now creates a function named `x`:
    x ||= function() { }
9 new passes on test262. :^) 
							
						 
						
							2023-06-26 16:07:33 +02:00 
							
								 
							
							
								 
							
						 
					 
				
					
						
							
								
								
									Luke Wilde 
								
							 
						 
						
							
							
							
							
								
							
							
								c5f3b3ae02 
								
							 
						 
						
							
							
								
								LibJS/Bytecode: Return the proper result for iteration statements  
							
							
							
						 
						
							2023-06-26 04:58:27 +02:00 
							
								 
							
							
								 
							
						 
					 
				
					
						
							
								
								
									Luke Wilde 
								
							 
						 
						
							
							
							
							
								
							
							
								b162c9117e 
								
							 
						 
						
							
							
								
								LibJS/Bytecode: Set accumulator to undefined at start of catch blocks  
							
							... 
							
							
							
							Otherwise we leak the error value through to the result. 
							
						 
						
							2023-06-26 04:58:27 +02:00 
							
								 
							
							
								 
							
						 
					 
				
					
						
							
								
								
									Andreas Kling 
								
							 
						 
						
							
							
							
							
								
							
							
								a4a1d1b84a 
								
							 
						 
						
							
							
								
								LibJS/Bytecode: Transfer object expression property names to functions  
							
							... 
							
							
							
							2 new passes on test262. :^) 
							
						 
						
							2023-06-25 20:39:29 +02:00 
							
								 
							
							
								 
							
						 
					 
				
					
						
							
								
								
									Andreas Kling 
								
							 
						 
						
							
							
							
							
								
							
							
								6f0952c358 
								
							 
						 
						
							
							
								
								LibJS/Bytecode: Handle object destructuring to member expression  
							
							... 
							
							
							
							19 new passes on test262. :^) 
							
						 
						
							2023-06-25 17:00:29 +02:00 
							
								 
							
							
								 
							
						 
					 
				
					
						
							
								
								
									Hendiadyoin1 
								
							 
						 
						
							
							
							
							
								
							
							
								7005a91a1e 
								
							 
						 
						
							
							
								
								LibJS: Replace invalid escapes in TemplateLiterals with undefined in BC  
							
							... 
							
							
							
							Also adds a big FIXME, to outline what is still wrong 
							
						 
						
							2023-06-25 16:41:50 +02:00 
							
								 
							
							
								 
							
						 
					 
				
					
						
							
								
								
									Andreas Kling 
								
							 
						 
						
							
							
							
							
								
							
							
								1932f7e6b6 
								
							 
						 
						
							
							
								
								LibJS/Bytecode: Transfer binding pattern aliases to function names  
							
							... 
							
							
							
							60 new passes on test262. :^) 
							
						 
						
							2023-06-25 11:59:51 +02:00 
							
								 
							
							
								 
							
						 
					 
				
					
						
							
								
								
									Andreas Kling 
								
							 
						 
						
							
							
							
							
								
							
							
								8021048bc9 
								
							 
						 
						
							
							
								
								LibJS/Bytecode: Throw on destructuring object assignment to nullish LHS  
							
							... 
							
							
							
							24 new passes on test262. :^) 
							
						 
						
							2023-06-25 09:19:53 +02:00 
							
								 
							
							
								 
							
						 
					 
				
					
						
							
								
								
									Andreas Kling 
								
							 
						 
						
							
							
							
							
								
							
							
								1f95a40780 
								
							 
						 
						
							
							
								
								LibJS/Bytecode: Actually exit switch statement's lexical scope  
							
							... 
							
							
							
							95 new passes on test262. :^) 
							
						 
						
							2023-06-25 08:09:39 +02:00 
							
								 
							
							
								 
							
						 
					 
				
					
						
							
								
								
									Andreas Kling 
								
							 
						 
						
							
							
							
							
								
							
							
								4fd71e3c3a 
								
							 
						 
						
							
							
								
								LibJS/Bytecode: Support destructuring in try..catch  
							
							... 
							
							
							
							112 new passes in test262. 
							
						 
						
							2023-06-24 21:10:07 +02:00 
							
								 
							
							
								 
							
						 
					 
				
					
						
							
								
								
									Andreas Kling 
								
							 
						 
						
							
							
							
							
								
							
							
								06ac768c8b 
								
							 
						 
						
							
							
								
								LibJS/Bytecode: Add some basic codegen for ExportStatement  
							
							... 
							
							
							
							This is by no means complete, but at least a bunch of test-js and
test262 tests start working. :^) 
							
						 
						
							2023-06-24 17:13:30 +02:00 
							
								 
							
							
								 
							
						 
					 
				
					
						
							
								
								
									Andreas Kling 
								
							 
						 
						
							
							
							
							
								
							
							
								8a5e71256d 
								
							 
						 
						
							
							
								
								LibJS/Bytecode: Add codegen for ImportCall  
							
							... 
							
							
							
							Also moved most of the AST ImportCall::execute() into a helper so we can
share the code. 
							
						 
						
							2023-06-24 17:13:30 +02:00 
							
								 
							
							
								 
							
						 
					 
				
					
						
							
								
								
									Luke Wilde 
								
							 
						 
						
							
							
							
							
								
							
							
								95d619943e 
								
							 
						 
						
							
							
								
								LibJS/Bytecode: Support private identifiers in optional chaining  
							
							... 
							
							
							
							Fixes 4 test262 tests :^) 
							
						 
						
							2023-06-23 21:05:18 +02:00 
							
								 
							
							
								 
							
						 
					 
				
					
						
							
								
								
									Andreas Kling 
								
							 
						 
						
							
							
							
							
								
							
							
								99b23fe2ad 
								
							 
						 
						
							
							
								
								LibJS/Bytecode: Emit GetPrivateById for private member expressions  
							
							... 
							
							
							
							This makes it possible to call private member functions.
347 new passes on test262. :^) 
							
						 
						
							2023-06-23 17:51:04 +02:00 
							
								 
							
							
								 
							
						 
					 
				
					
						
							
								
								
									Andreas Kling 
								
							 
						 
						
							
							
							
							
								
							
							
								85a3a1c085 
								
							 
						 
						
							
							
								
								LibJS/Bytecode: Add codegen for "named evaluation if anonymous function"  
							
							... 
							
							
							
							This gives anonymous functions the name from the LHS they are being
assigned to.
171 new passes on test262. :^) 
							
						 
						
							2023-06-23 16:09:33 +02:00 
							
								 
							
							
								 
							
						 
					 
				
					
						
							
								
								
									Andreas Kling 
								
							 
						 
						
							
							
							
							
								
							
							
								e5c7d8407b 
								
							 
						 
						
							
							
								
								LibJS/Bytecode: Support private class fields  
							
							... 
							
							
							
							This is accomplished with two new instructions:
- GetPrivateById
- PutPrivateById
Looks like 1616 new passes on test262. :^) 
							
						 
						
							2023-06-23 08:53:10 +02:00 
							
								 
							
							
								 
							
						 
					 
				
					
						
							
								
								
									Luke Wilde 
								
							 
						 
						
							
							
							
							
								
							
							
								357174d8fd 
								
							 
						 
						
							
							
								
								LibJS/Bytecode: Actually get value from super base for computed property  
							
							
							
						 
						
							2023-06-17 20:26:14 +02:00 
							
								 
							
							
								 
							
						 
					 
				
					
						
							
								
								
									Luke Wilde 
								
							 
						 
						
							
							
							
							
								
							
							
								1116ba191a 
								
							 
						 
						
							
							
								
								LibJS/Bytecode: Implement optional chaining  
							
							
							
						 
						
							2023-06-17 20:26:14 +02:00 
							
								 
							
							
								 
							
						 
					 
				
					
						
							
								
								
									Andreas Kling 
								
							 
						 
						
							
							
							
							
								
							
							
								eee4b6eca7 
								
							 
						 
						
							
							
								
								LibJS/Bytecode: Let var without initializer codegen to nothing  
							
							... 
							
							
							
							Otherwise we incorrectly overwrite the binding with `undefined` at the
point where the `var` statement is.
Fixes 9 test262 tests. :^) 
							
						 
						
							2023-06-17 15:37:33 +02:00 
							
								 
							
							
								 
							
						 
					 
				
					
						
							
								
								
									Andreas Kling 
								
							 
						 
						
							
							
							
							
								
							
							
								d89e0b36d4 
								
							 
						 
						
							
							
								
								LibJS/Bytecode: Support class field initializers  
							
							... 
							
							
							
							Fixes 513 test262 tests. :^) 
							
						 
						
							2023-06-17 11:00:39 +02:00 
							
								 
							
							
								 
							
						 
					 
				
					
						
							
								
								
									Andreas Kling 
								
							 
						 
						
							
							
							
							
								
							
							
								dbfe1311ef 
								
							 
						 
						
							
							
								
								LibJS/Bytecode: Simplify creating/leaving lexical environment  
							
							... 
							
							
							
							Since we no longer need to create or leave var environments directly
in bytecode, we can streamline the two instructions by making them
always operate on the lexical environment. 
							
						 
						
							2023-06-16 21:46:43 +02:00 
							
								 
							
							
								 
							
						 
					 
				
					
						
							
								
								
									Andreas Kling 
								
							 
						 
						
							
							
							
							
								
							
							
								ac246d764d 
								
							 
						 
						
							
							
								
								LibJS/Bytecode: Leave BlockDeclarationInstantiation in C++  
							
							... 
							
							
							
							Instead of implementing this AO in bytecode, we now have an instruction
for it that simply invokes the C++ implementation.
This allows us to simplify Bytecode::Generator quite a bit by removing
all the variable scope tracking. 
							
						 
						
							2023-06-16 21:46:43 +02:00 
							
								 
							
							
								 
							
						 
					 
				
					
						
							
								
								
									Andreas Kling 
								
							 
						 
						
							
							
							
							
								
							
							
								d364d99cb8 
								
							 
						 
						
							
							
								
								LibJS/Bytecode: Perform ToNumeric on accumulator before postfix inc/dec  
							
							... 
							
							
							
							This ensures we get the expected behavior of code like:
    let a = []
    let b = a++
(Where b should be 0, not [], because JavaScript.) 
							
						 
						
							2023-06-16 12:56:39 +02:00 
							
								 
							
							
								 
							
						 
					 
				
					
						
							
								
								
									Andreas Kling 
								
							 
						 
						
							
							
							
							
								
							
							
								c9bd324369 
								
							 
						 
						
							
							
								
								LibJS/Bytecode: Set "home object" of functions within object expression  
							
							... 
							
							
							
							We manage this by having a stack of home objects in Generator, and then
adding an optional home object parameter to the NewFunction instruction. 
							
						 
						
							2023-06-16 12:56:39 +02:00 
							
								 
							
							
								 
							
						 
					 
				
					
						
							
								
								
									Andreas Kling 
								
							 
						 
						
							
							
							
							
								
							
							
								6f39882f11 
								
							 
						 
						
							
							
								
								LibJS/Bytecode: Fix multiple wrong jumps in ForStatement codegen  
							
							
							
						 
						
							2023-06-16 08:40:45 +02:00 
							
								 
							
							
								 
							
						 
					 
				
					
						
							
								
								
									Andreas Kling 
								
							 
						 
						
							
							
							
							
								
							
							
								0772a23c65 
								
							 
						 
						
							
							
								
								LibJS/Bytecode: Add "raw" property correctly for tagged template literal  
							
							... 
							
							
							
							We were adding it to the wrong object before. :^) 
							
						 
						
							2023-06-16 08:40:45 +02:00 
							
								 
							
							
								 
							
						 
					 
				
					
						
							
								
								
									Andreas Kling 
								
							 
						 
						
							
							
							
							
								
							
							
								2ac8a4bbb7 
								
							 
						 
						
							
							
								
								LibJS/Bytecode: Add support for direct eval()  
							
							... 
							
							
							
							This is implemented as a special mode of the Call opcode that invokes
the PerformEval AO (instead of the Call or Construct AO). 
							
						 
						
							2023-06-16 08:40:45 +02:00 
							
								 
							
							
								 
							
						 
					 
				
					
						
							
								
								
									Andreas Kling 
								
							 
						 
						
							
							
							
							
								
							
							
								8a3e350321 
								
							 
						 
						
							
							
								
								LibJS/Bytecode: Don't choke on MemberExpression with PrivateIdentifier  
							
							
							
						 
						
							2023-06-16 08:40:45 +02:00