mirror of
				https://github.com/tc39/test262.git
				synced 2025-11-04 05:33:50 +01:00 
			
		
		
		
	This came up with a V8 bug where private fields weren't resolved properly from nested classes where both the inner and the outer class had private fields.
		
			
				
	
	
		
			46 lines
		
	
	
		
			1.3 KiB
		
	
	
	
		
			JavaScript
		
	
	
	
	
	
			
		
		
	
	
			46 lines
		
	
	
		
			1.3 KiB
		
	
	
	
		
			JavaScript
		
	
	
	
	
	
// This file was procedurally generated from the following sources:
 | 
						|
// - src/class-elements/private-field-on-nested-class.case
 | 
						|
// - src/class-elements/default/cls-expr.template
 | 
						|
/*---
 | 
						|
description: PrivateName CallExpression usage (private field) (field definitions in a class expression)
 | 
						|
esid: prod-FieldDefinition
 | 
						|
features: [class-fields-private, class-fields-public, class]
 | 
						|
flags: [generated]
 | 
						|
info: |
 | 
						|
    Updated Productions
 | 
						|
 | 
						|
    CallExpression[Yield, Await]:
 | 
						|
      CoverCallExpressionAndAsyncArrowHead[?Yield, ?Await]
 | 
						|
      SuperCall[?Yield, ?Await]
 | 
						|
      CallExpression[?Yield, ?Await]Arguments[?Yield, ?Await]
 | 
						|
      CallExpression[?Yield, ?Await][Expression[+In, ?Yield, ?Await]]
 | 
						|
      CallExpression[?Yield, ?Await].IdentifierName
 | 
						|
      CallExpression[?Yield, ?Await]TemplateLiteral[?Yield, ?Await]
 | 
						|
      CallExpression[?Yield, ?Await].PrivateName
 | 
						|
 | 
						|
---*/
 | 
						|
 | 
						|
 | 
						|
var C = class {
 | 
						|
  #outer = 'test262';
 | 
						|
 | 
						|
  B_withoutPrivateField = class {
 | 
						|
    method(o) {
 | 
						|
      return o.#outer;
 | 
						|
    }
 | 
						|
  }
 | 
						|
 | 
						|
  B_withPrivateField = class {
 | 
						|
    #inner = 42;
 | 
						|
    method(o) {
 | 
						|
      return o.#outer;
 | 
						|
    }
 | 
						|
  }
 | 
						|
}
 | 
						|
 | 
						|
let c = new C();
 | 
						|
let innerB1 = new c.B_withoutPrivateField();
 | 
						|
assert.sameValue(innerB1.method(c), 'test262');
 | 
						|
let innerB2 = new c.B_withPrivateField();
 | 
						|
assert.sameValue(innerB2.method(c), 'test262');
 |