@@ -323,6 +323,32 @@ export function* ConditionalExpression(node: acorn.ConditionalExpression, scope:
323323 : ( yield * evaluate ( node . alternate , scope ) )
324324}
325325
326+ function getCalleeDesc ( node : acorn . Expression | acorn . Super ) : string {
327+ if ( node . type === 'Identifier' ) {
328+ return ( node as acorn . Identifier ) . name
329+ } else if ( node . type === 'MemberExpression' ) {
330+ const memberNode = node as acorn . MemberExpression
331+ const objDesc = getCalleeDesc ( memberNode . object )
332+ if ( ! memberNode . computed ) {
333+ if ( memberNode . property . type === 'PrivateIdentifier' ) {
334+ return `${ objDesc } .#${ ( memberNode . property as acorn . PrivateIdentifier ) . name } `
335+ }
336+ return `${ objDesc } .${ ( memberNode . property as acorn . Identifier ) . name } `
337+ }
338+ const prop = memberNode . property as acorn . Expression
339+ if ( prop . type === 'Literal' ) {
340+ return `${ objDesc } [${ ( prop as acorn . Literal ) . raw } ]`
341+ }
342+ if ( prop . type === 'Identifier' ) {
343+ return `${ objDesc } [${ ( prop as acorn . Identifier ) . name } ]`
344+ }
345+ return objDesc
346+ } else if ( node . type === 'Super' ) {
347+ return 'super'
348+ }
349+ return '(intermediate value)'
350+ }
351+
326352export function * CallExpression ( node : acorn . CallExpression , scope : Scope ) {
327353 let func : any
328354 let object : any
@@ -371,9 +397,11 @@ export function* CallExpression(node: acorn.CallExpression, scope: Scope) {
371397 }
372398
373399 if ( typeof func !== 'function' ) {
374- throw new TypeError ( `${ key } is not a function` )
400+ const calleeDesc = getCalleeDesc ( node . callee as acorn . MemberExpression )
401+ throw new TypeError ( `${ calleeDesc } is not a function` )
375402 } else if ( CLSCTOR in func ) {
376- throw new TypeError ( `Class constructor ${ key } cannot be invoked without 'new'` )
403+ const calleeDesc = getCalleeDesc ( node . callee as acorn . MemberExpression )
404+ throw new TypeError ( `Class constructor ${ calleeDesc } cannot be invoked without 'new'` )
377405 }
378406 } else {
379407 func = yield * evaluate ( node . callee , scope )
0 commit comments