@@ -33,7 +33,7 @@ export function ClassBody(node, context) {
3333	/** @type  {Map<string, StateField> } */ 
3434	const  state_fields  =  new  Map ( ) ; 
3535
36- 	/** @type  {Map<string, Array<MethodDefinition['kind'] | 'prop'>> } */ 
36+ 	/** @type  {Map<string, Array<MethodDefinition['kind'] | 'prop' | 'assigned_prop' >> } */ 
3737	const  fields  =  new  Map ( ) ; 
3838
3939	context . state . analysis . classes . set ( node ,  state_fields ) ; 
@@ -60,7 +60,8 @@ export function ClassBody(node, context) {
6060			const  _key  =  ( key . type  ===  'PrivateIdentifier'  ? '#'  : '' )  +  name ; 
6161			const  field  =  fields . get ( _key ) ; 
6262
63- 			if  ( field )  { 
63+ 			// if there's already a method or assigned field, error 
64+ 			if  ( field  &&  ! ( field . length  ===  1  &&  field [ 0 ]  ===  'prop' ) )  { 
6465				e . duplicate_class_field ( node ,  _key ) ; 
6566			} 
6667
@@ -80,7 +81,7 @@ export function ClassBody(node, context) {
8081			const  key  =  ( child . key . type  ===  'PrivateIdentifier'  ? '#'  : '' )  +  get_name ( child . key ) ; 
8182			const  field  =  fields . get ( key ) ; 
8283			if  ( ! field )  { 
83- 				fields . set ( key ,  [ 'prop' ] ) ; 
84+ 				fields . set ( key ,  [ child . value  ?  'assigned_prop'  :  'prop' ] ) ; 
8485				continue ; 
8586			} 
8687			e . duplicate_class_field ( child ,  key ) ; 
@@ -96,7 +97,11 @@ export function ClassBody(node, context) {
9697					fields . set ( key ,  [ child . kind ] ) ; 
9798					continue ; 
9899				} 
99- 				if  ( field . includes ( child . kind )  ||  field . includes ( 'prop' ) )  { 
100+ 				if  ( 
101+ 					field . includes ( child . kind )  || 
102+ 					field . includes ( 'prop' )  || 
103+ 					field . includes ( 'assigned_prop' ) 
104+ 				)  { 
100105					e . duplicate_class_field ( child ,  key ) ; 
101106				} 
102107				if  ( child . kind  ===  'get' )  { 
0 commit comments