[Bug]: Crash with decorators on anonymous class expression
evanw opened this issue · 2 comments
💻
- Would you like to work on a fix?
How are you using Babel?
Other (Next.js, Gatsby, vue-cli, ...)
Input code
Minimal test case:
(@x class { @y static accessor z })
Configuration file name
No response
Configuration
I hit this when writing some new tests for https://github.com/evanw/decorator-tests, which calls Babel like this:
babel.transformSync(js, { plugins: [['@babel/plugin-proposal-decorators', { version: '2023-11' }]] })
Current and expected behavior
Babel currently crashes with the following error:
Property object of MemberExpression expected node to be of a type ["Expression","Super"] but instead got undefined
Expand to see the full stack trace
at Object.validate (./node_modules/@babel/types/lib/definitions/utils.js:105:11)
at validateField (./node_modules/@babel/types/lib/validators/validate.js:21:9)
at validate (./node_modules/@babel/types/lib/validators/validate.js:15:3)
at validateNode (./node_modules/@babel/types/lib/builders/validateNode.js:12:27)
at Object.memberExpression (./node_modules/@babel/types/lib/builders/generated/index.js:471:36)
at addProxyAccessorsFor (./node_modules/@babel/helper-create-class-features-plugin/lib/decorators.js:93:90)
at transformClass (./node_modules/@babel/helper-create-class-features-plugin/lib/decorators.js:725:13)
at visitClass (./node_modules/@babel/helper-create-class-features-plugin/lib/decorators.js:1252:21)
at PluginPass.Class (./node_modules/@babel/helper-create-class-features-plugin/lib/decorators.js:1284:9)
at newFn (./node_modules/@babel/traverse/lib/visitors.js:160:14)
at NodePath._call (./node_modules/@babel/traverse/lib/path/context.js:46:20)
at NodePath.call (./node_modules/@babel/traverse/lib/path/context.js:36:17)
at NodePath.visit (./node_modules/@babel/traverse/lib/path/context.js:82:31)
at TraversalContext.visitQueue (./node_modules/@babel/traverse/lib/context.js:89:16)
at TraversalContext.visitSingle (./node_modules/@babel/traverse/lib/context.js:65:19)
at TraversalContext.visit (./node_modules/@babel/traverse/lib/context.js:112:19)
at traverseNode (./node_modules/@babel/traverse/lib/traverse-node.js:22:17)
at NodePath.visit (./node_modules/@babel/traverse/lib/path/context.js:88:52)
at TraversalContext.visitQueue (./node_modules/@babel/traverse/lib/context.js:89:16)
at TraversalContext.visitMultiple (./node_modules/@babel/traverse/lib/context.js:61:17)
at TraversalContext.visit (./node_modules/@babel/traverse/lib/context.js:110:19)
at traverseNode (./node_modules/@babel/traverse/lib/traverse-node.js:22:17)
at NodePath.visit (./node_modules/@babel/traverse/lib/path/context.js:88:52)
at TraversalContext.visitQueue (./node_modules/@babel/traverse/lib/context.js:89:16)
at TraversalContext.visitSingle (./node_modules/@babel/traverse/lib/context.js:65:19)
at TraversalContext.visit (./node_modules/@babel/traverse/lib/context.js:112:19)
at traverseNode (./node_modules/@babel/traverse/lib/traverse-node.js:22:17)
at NodePath.visit (./node_modules/@babel/traverse/lib/path/context.js:88:52)
at TraversalContext.visitQueue (./node_modules/@babel/traverse/lib/context.js:89:16)
at TraversalContext.visitSingle (./node_modules/@babel/traverse/lib/context.js:65:19)
at TraversalContext.visit (./node_modules/@babel/traverse/lib/context.js:112:19)
at traverseNode (./node_modules/@babel/traverse/lib/traverse-node.js:22:17)
at NodePath.visit (./node_modules/@babel/traverse/lib/path/context.js:88:52)
at TraversalContext.visitQueue (./node_modules/@babel/traverse/lib/context.js:89:16)
at TraversalContext.visitMultiple (./node_modules/@babel/traverse/lib/context.js:61:17)
at TraversalContext.visit (./node_modules/@babel/traverse/lib/context.js:110:19)
at traverseNode (./node_modules/@babel/traverse/lib/traverse-node.js:22:17)
at NodePath.visit (./node_modules/@babel/traverse/lib/path/context.js:88:52)
at TraversalContext.visitQueue (./node_modules/@babel/traverse/lib/context.js:89:16)
at TraversalContext.visitSingle (./node_modules/@babel/traverse/lib/context.js:65:19)
at TraversalContext.visit (./node_modules/@babel/traverse/lib/context.js:112:19)
at traverseNode (./node_modules/@babel/traverse/lib/traverse-node.js:22:17)
at NodePath.visit (./node_modules/@babel/traverse/lib/path/context.js:88:52)
at TraversalContext.visitQueue (./node_modules/@babel/traverse/lib/context.js:89:16)
at TraversalContext.visitMultiple (./node_modules/@babel/traverse/lib/context.js:61:17)
at TraversalContext.visit (./node_modules/@babel/traverse/lib/context.js:110:19)
at traverseNode (./node_modules/@babel/traverse/lib/traverse-node.js:22:17)
at NodePath.visit (./node_modules/@babel/traverse/lib/path/context.js:88:52)
at TraversalContext.visitQueue (./node_modules/@babel/traverse/lib/context.js:89:16)
at TraversalContext.visitMultiple (./node_modules/@babel/traverse/lib/context.js:61:17)
at TraversalContext.visit (./node_modules/@babel/traverse/lib/context.js:110:19)
at traverseNode (./node_modules/@babel/traverse/lib/traverse-node.js:22:17)
at NodePath.visit (./node_modules/@babel/traverse/lib/path/context.js:88:52)
at TraversalContext.visitQueue (./node_modules/@babel/traverse/lib/context.js:89:16)
at TraversalContext.visitSingle (./node_modules/@babel/traverse/lib/context.js:65:19)
at TraversalContext.visit (./node_modules/@babel/traverse/lib/context.js:112:19)
at traverseNode (./node_modules/@babel/traverse/lib/traverse-node.js:22:17)
at traverse (./node_modules/@babel/traverse/lib/index.js:52:34)
at transformFile (./node_modules/@babel/core/lib/transformation/index.js:82:31)
at transformFile.next (<anonymous>)
at run (./node_modules/@babel/core/lib/transformation/index.js:24:12)
at run.next (<anonymous>)
at transform (./node_modules/@babel/core/lib/transform.js:22:33)
at transform.next (<anonymous>)
at evaluateSync (./node_modules/gensync/index.js:251:28)
at sync (./node_modules/gensync/index.js:89:14)
at stopHiding - secret - don't use this - v1 (./node_modules/@babel/core/lib/errors/rewrite-stack-trace.js:47:12)
at Object.transformSync (./node_modules/@babel/core/lib/transform.js:42:76) {
code: 'BABEL_TRANSFORM_ERROR'
}
Environment
Possible solution
No response
Additional context
No response
Hey @evanw! We really appreciate you taking the time to report an issue. The collaborators on this project attempt to help as many people as possible, but we're a limited number of volunteers, so it's possible this won't be addressed swiftly.
If you need any help, or just have general Babel or JavaScript questions, we have a vibrant Slack community that typically always has someone willing to help. You can sign-up here for an invite.
Here is an even shorter test case where Babel is crashing for the same reason:
(class { static accessor z });