@@ -16,6 +16,7 @@ import {
1616 thisExpression ,
1717} from "@babel/types" ;
1818import type * as t from "@babel/types" ;
19+ import type { File } from "@babel/core" ;
1920
2021// TODO (Babel 8): Don't export this.
2122export {
@@ -72,8 +73,32 @@ const unshadowSuperBindingVisitor = traverse.visitors.merge<{
7273 } ,
7374] ) ;
7475
76+ type SharedState = {
77+ file : File ;
78+ scope : Scope ;
79+ isDerivedConstructor : boolean ;
80+ isStatic : boolean ;
81+ isPrivateMethod : boolean ;
82+ getObjectRef : Function ;
83+ getSuperRef : Function ;
84+ // we dont need boundGet here, but memberExpressionToFunctions handler needs it.
85+ boundGet : HandlerState [ "get" ] ;
86+ } ;
87+
88+ type Handler = HandlerState < SharedState > & SharedState ;
89+ type SuperMember = NodePath <
90+ | t . MemberExpression & {
91+ object : t . Super ;
92+ property : Exclude < t . MemberExpression [ "property" ] , t . PrivateName > ;
93+ }
94+ > ;
95+
7596const specHandlers = {
76- memoise ( superMember , count ) {
97+ memoise (
98+ this : Handler & typeof specHandlers ,
99+ superMember : SuperMember ,
100+ count ,
101+ ) {
77102 const { scope, node } = superMember ;
78103 const { computed, property } = node ;
79104 if ( ! computed ) {
@@ -88,7 +113,7 @@ const specHandlers = {
88113 this . memoiser . set ( property , memo , count ) ;
89114 } ,
90115
91- prop ( superMember ) {
116+ prop ( this : Handler & typeof specHandlers , superMember : SuperMember ) {
92117 const { computed, property } = superMember . node ;
93118 if ( this . memoiser . has ( property ) ) {
94119 return cloneNode ( this . memoiser . get ( property ) ) ;
@@ -98,14 +123,18 @@ const specHandlers = {
98123 return cloneNode ( property ) ;
99124 }
100125
101- return stringLiteral ( property . name ) ;
126+ return stringLiteral ( ( property as t . Identifier ) . name ) ;
102127 } ,
103128
104- get ( superMember ) {
129+ get ( this : Handler & typeof specHandlers , superMember : SuperMember ) {
105130 return this . _get ( superMember , this . _getThisRefs ( ) ) ;
106131 } ,
107132
108- _get ( superMember , thisRefs ) {
133+ _get (
134+ this : Handler & typeof specHandlers ,
135+ superMember : SuperMember ,
136+ thisRefs ,
137+ ) {
109138 const proto = getPrototypeOfExpression (
110139 this . getObjectRef ( ) ,
111140 this . isStatic ,
@@ -119,7 +148,7 @@ const specHandlers = {
119148 ] ) ;
120149 } ,
121150
122- _getThisRefs ( ) {
151+ _getThisRefs ( this : Handler & typeof specHandlers ) {
123152 if ( ! this . isDerivedConstructor ) {
124153 return { this : thisExpression ( ) } ;
125154 }
@@ -130,7 +159,7 @@ const specHandlers = {
130159 } ;
131160 } ,
132161
133- set ( superMember , value ) {
162+ set ( this : Handler & typeof specHandlers , superMember : SuperMember , value ) {
134163 const thisRefs = this . _getThisRefs ( ) ;
135164 const proto = getPrototypeOfExpression (
136165 this . getObjectRef ( ) ,
@@ -147,13 +176,16 @@ const specHandlers = {
147176 ] ) ;
148177 } ,
149178
150- destructureSet ( superMember ) {
179+ destructureSet (
180+ this : Handler & typeof specHandlers ,
181+ superMember : SuperMember ,
182+ ) {
151183 throw superMember . buildCodeFrameError (
152184 `Destructuring to a super field is not supported yet.` ,
153185 ) ;
154186 } ,
155187
156- call ( superMember , args ) {
188+ call ( this : Handler & typeof specHandlers , superMember : SuperMember , args ) {
157189 const thisRefs = this . _getThisRefs ( ) ;
158190 return optimiseCall (
159191 this . _get ( superMember , thisRefs ) ,
@@ -163,7 +195,11 @@ const specHandlers = {
163195 ) ;
164196 } ,
165197
166- optionalCall ( superMember , args ) {
198+ optionalCall (
199+ this : Handler & typeof specHandlers ,
200+ superMember : SuperMember ,
201+ args ,
202+ ) {
167203 const thisRefs = this . _getThisRefs ( ) ;
168204 return optimiseCall (
169205 this . _get ( superMember , thisRefs ) ,
@@ -177,7 +213,7 @@ const specHandlers = {
177213const looseHandlers = {
178214 ...specHandlers ,
179215
180- prop ( superMember ) {
216+ prop ( this : Handler & typeof specHandlers , superMember : SuperMember ) {
181217 const { property } = superMember . node ;
182218 if ( this . memoiser . has ( property ) ) {
183219 return cloneNode ( this . memoiser . get ( property ) ) ;
@@ -186,7 +222,7 @@ const looseHandlers = {
186222 return cloneNode ( property ) ;
187223 } ,
188224
189- get ( superMember ) {
225+ get ( this : Handler & typeof specHandlers , superMember : SuperMember ) {
190226 const { isStatic, getSuperRef } = this ;
191227 const { computed } = superMember . node ;
192228 const prop = this . prop ( superMember ) ;
@@ -206,7 +242,7 @@ const looseHandlers = {
206242 return memberExpression ( object , prop , computed ) ;
207243 } ,
208244
209- set ( superMember , value ) {
245+ set ( this : Handler & typeof specHandlers , superMember : SuperMember , value ) {
210246 const { computed } = superMember . node ;
211247 const prop = this . prop ( superMember ) ;
212248
@@ -217,18 +253,25 @@ const looseHandlers = {
217253 ) ;
218254 } ,
219255
220- destructureSet ( superMember ) {
256+ destructureSet (
257+ this : Handler & typeof specHandlers ,
258+ superMember : SuperMember ,
259+ ) {
221260 const { computed } = superMember . node ;
222261 const prop = this . prop ( superMember ) ;
223262
224263 return memberExpression ( thisExpression ( ) , prop , computed ) ;
225264 } ,
226265
227- call ( superMember , args ) {
266+ call ( this : Handler & typeof specHandlers , superMember : SuperMember , args ) {
228267 return optimiseCall ( this . get ( superMember ) , thisExpression ( ) , args , false ) ;
229268 } ,
230269
231- optionalCall ( superMember , args ) {
270+ optionalCall (
271+ this : Handler & typeof specHandlers ,
272+ superMember : SuperMember ,
273+ args ,
274+ ) {
232275 return optimiseCall ( this . get ( superMember ) , thisExpression ( ) , args , true ) ;
233276 } ,
234277} ;
0 commit comments