@@ -146,7 +146,7 @@ export function translateEnumValues(
146146 const initializer = member . initializer ;
147147 let value : t . Expression ;
148148 if ( initializer ) {
149- constValue = evaluate ( initializer , seen ) ;
149+ constValue = computeConstantValue ( initializer , seen ) ;
150150 if ( constValue !== undefined ) {
151151 seen . set ( name , constValue ) ;
152152 if ( typeof constValue === "number" ) {
@@ -193,14 +193,14 @@ export function translateEnumValues(
193193 } ) ;
194194}
195195
196- // Based on the TypeScript repository's `evalConstant ` in `checker.ts`.
197- function evaluate (
196+ // Based on the TypeScript repository's `computeConstantValue ` in `checker.ts`.
197+ function computeConstantValue (
198198 expr : t . Node ,
199199 seen : PreviousEnumMembers ,
200200) : number | string | typeof undefined {
201- return evalConstant ( expr ) ;
201+ return evaluate ( expr ) ;
202202
203- function evalConstant ( expr : t . Node ) : number | typeof undefined {
203+ function evaluate ( expr : t . Node ) : number | typeof undefined {
204204 switch ( expr . type ) {
205205 case "StringLiteral" :
206206 return expr . value ;
@@ -211,7 +211,7 @@ function evaluate(
211211 case "NumericLiteral" :
212212 return expr . value ;
213213 case "ParenthesizedExpression" :
214- return evalConstant ( expr . expression ) ;
214+ return evaluate ( expr . expression ) ;
215215 case "Identifier" :
216216 return seen . get ( expr . name ) ;
217217 case "TemplateLiteral" :
@@ -228,7 +228,7 @@ function evaluate(
228228 argument,
229229 operator,
230230 } : t . UnaryExpression ) : number | typeof undefined {
231- const value = evalConstant ( argument ) ;
231+ const value = evaluate ( argument ) ;
232232 if ( value === undefined ) {
233233 return undefined ;
234234 }
@@ -246,11 +246,11 @@ function evaluate(
246246 }
247247
248248 function evalBinaryExpression ( expr : t . BinaryExpression ) : number | undefined {
249- const left = evalConstant ( expr . left ) ;
249+ const left = evaluate ( expr . left ) ;
250250 if ( left === undefined ) {
251251 return undefined ;
252252 }
253- const right = evalConstant ( expr . right ) ;
253+ const right = evaluate ( expr . right ) ;
254254 if ( right === undefined ) {
255255 return undefined ;
256256 }
@@ -278,6 +278,8 @@ function evaluate(
278278 return left - right ;
279279 case "%" :
280280 return left % right ;
281+ case "**" :
282+ return left ** right ;
281283 default :
282284 return undefined ;
283285 }
0 commit comments