mirror of
				https://github.com/RGBCube/serenity
				synced 2025-10-31 16:42:44 +00:00 
			
		
		
		
	 bc21ed151e
			
		
	
	
		bc21ed151e
		
	
	
	
	
		
			
			`var` declarations can have duplicates, but duplicate `let` or `const` bindings are a syntax error. Because of this, we can sink `let` and `const` directly into the preferred_dst if available. This is not safe for `var` since the preferred_dst may be used in the initializer. This patch fixes the issue by simply skipping the preferred_dst optimization for `var` declarations.
		
			
				
	
	
		
			50 lines
		
	
	
	
		
			982 B
		
	
	
	
		
			JavaScript
		
	
	
	
	
	
			
		
		
	
	
			50 lines
		
	
	
	
		
			982 B
		
	
	
	
		
			JavaScript
		
	
	
	
	
	
| test("basic functionality", () => {
 | |
|     function foo() {
 | |
|         i = 3;
 | |
|         expect(i).toBe(3);
 | |
|         var i;
 | |
|     }
 | |
| 
 | |
|     foo();
 | |
| 
 | |
|     var caught_exception;
 | |
|     try {
 | |
|         j = i;
 | |
|     } catch (e) {
 | |
|         caught_exception = e;
 | |
|     }
 | |
|     expect(caught_exception).not.toBeUndefined();
 | |
| });
 | |
| 
 | |
| test("Issue #8198 arrow function escapes function scope", () => {
 | |
|     const b = 3;
 | |
| 
 | |
|     function f() {
 | |
|         expect(b).toBe(3);
 | |
|         (() => {
 | |
|             expect(b).toBe(3);
 | |
|             var a = "wat";
 | |
|             eval("var b=a;");
 | |
|             expect(b).toBe("wat");
 | |
|         })();
 | |
|         expect(b).toBe(3);
 | |
|     }
 | |
| 
 | |
|     f();
 | |
|     expect(b).toBe(3);
 | |
| });
 | |
| 
 | |
| test("Referencing the declared var in the initializer of a duplicate var declaration", () => {
 | |
|     function c(e) {
 | |
|         e.foo;
 | |
|     }
 | |
|     function h() {}
 | |
|     function go() {
 | |
|         var p = true;
 | |
|         var p = h() || c(p);
 | |
|         return 0;
 | |
|     }
 | |
| 
 | |
|     // It's all good as long as go() doesn't throw.
 | |
|     expect(go()).toBe(0);
 | |
| });
 |