microsoft / microsoft/TypeScript

Crash: malformed `super` destructuring in a decorated class static block panics

Aperta
#63,964 0 commenti 1 reazione 0 assegnatari Vedi su GitHub

Nessuno ha ancora preso questa issue.

Bug
Lingua principale
Go
Stelle
111k
Fork
14.3k
Merge medio
2g 4h
PR unite (30g)
132

Descrizione

### 🔎 Search Terms

visitArrayAssignmentElement, esDecorator super destructuring, static block decorator crash, IsArrayBindingOrAssignmentElement, "Debug failure. False expression"

### 🕗 Version & Regression Information

- This is a crash
- This changed between TypeScript 6.0.3 (JS) and 7.1.0-dev (`main`, Go): 6.0.3 reports `error TS1005` and exits but the Go rewrite panics

### ⏯ Playground Link

I cannot provide a link because the TypeScript playground does not have v7.

### 💻 Code

```ts
(@c
class extends B{static{[super.x 0]=[1];}});
```

### 🙁 Actual behavior

```
panic: Debug failure. False expression. [recovered, repanicked]

goroutine 50 [running]:
sync.(*WaitGroup).Go.func1.1()
sync/waitgroup.go:251 +0x48
panic({0x1061c58e0?, 0x176c0104340?})
runtime/panic.go:860 +0x12c
github.com/microsoft/TypeScript/tsc/internal/debug.Fail(...)
github.com/microsoft/TypeScript/tsc/internal/debug/debug.go:14
github.com/microsoft/TypeScript/tsc/internal/debug.assertSlow(...)
github.com/microsoft/TypeScript/tsc/internal/debug/debug.go:60 +0x5c
github.com/microsoft/TypeScript/tsc/internal/debug.Assert(...)
github.com/microsoft/TypeScript/tsc/internal/debug/debug.go:49
github.com/microsoft/TypeScript/tsc/internal/transformers/estransforms.(*esDecoratorTransformer).visitArrayAssignmentElement(...)
github.com/microsoft/TypeScript/tsc/internal/transformers/estransforms/esdecorator.go:2201 +0x90
github.com/microsoft/TypeScript/tsc/internal/ast.(*NodeVisitor).VisitSlice(...)
github.com/microsoft/TypeScript/tsc/internal/ast/visitor.go:171 +0x19c
github.com/microsoft/TypeScript/tsc/internal/ast.(*NodeVisitor).VisitNodes(...)
github.com/microsoft/TypeScript/tsc/internal/ast/visitor.go:99 +0x3c
github.com/microsoft/TypeScript/tsc/internal/transformers/estransforms.(*esDecoratorTransformer).visitAssignmentPattern(...)
github.com/microsoft/TypeScript/tsc/internal/transformers/estransforms/esdecorator.go:2281 +0x58
github.com/microsoft/TypeScript/tsc/internal/transformers/estransforms.(*esDecoratorTransformer).visitBinaryExpression(...)
github.com/microsoft/TypeScript/tsc/internal/transformers/estransforms/esdecorator.go:1915 +0x5b4
... 36 lines truncated ...
github.com/microsoft/TypeScript/tsc/internal/transformers/estransforms.(*esDecoratorTransformer).visitClassStaticBlockDeclaration(...)
github.com/microsoft/TypeScript/tsc/internal/transformers/estransforms/esdecorator.go:1538 +0x2f0
github.com/microsoft/TypeScript/tsc/internal/transformers/estransforms.(*esDecoratorTransformer).transformClassLike(...)
github.com/microsoft/TypeScript/tsc/internal/transformers/estransforms/esdecorator.go:705 +0xa60
github.com/microsoft/TypeScript/tsc/internal/transformers/estransforms.(*esDecoratorTransformer).visitClassExpression(...)
github.com/microsoft/TypeScript/tsc/internal/transformers/estransforms/esdecorator.go:1109 +0x138
... 108 lines truncated ...
github.com/microsoft/TypeScript/tsc/internal/compiler.(*emitter).emitJSFile(...)
github.com/microsoft/TypeScript/tsc/internal/compiler/emitter.go:200 +0x198
github.com/microsoft/TypeScript/tsc/internal/compiler.(*emitter).emit(...)
github.com/microsoft/TypeScript/tsc/internal/compiler/emitter.go:50 +0xec
github.com/microsoft/TypeScript/tsc/internal/compiler.(*Program).Emit.func2()
github.com/microsoft/TypeScript/tsc/internal/compiler/program.go:1851 +0x1c0
```

### 🙂 Expected behavior

The compiler should not crash 😊

### Additional information about the issue

**Disclosure:** This crash was found with a custom mutation fuzzer and AI assistance (Kimi K3). The input was minimized and then verified by hand against TypeScript 7.1.0-dev (`main`) and TypeScript 6.0.3.

Guida per i contributori

Apri la guida per i contributori

Come iniziare

  1. Leggi tutta la issue e poi la guida ai contributi del progetto.
  2. Commenta sulla issue per dire che te ne occupi tu — evita che due persone facciano lo stesso lavoro.
  3. Fai un fork del repository e lavora su un branch.
  4. Apri una pull request che faccia riferimento al numero della issue.

Direzione di ricerca

Inizia in tsc/internal/transformers/estransforms/esdecorator.go da visitArrayAssignmentElement e segui i suoi chiamanti a partire da visitAssignmentPattern durante la compilazione dello snippet minimizzato della classe decorata. Verifica che TypeScript 7.1.0-dev segnali una diagnostica per la destrutturazione di super non corretta invece di andare in panico, in linea con il comportamento senza arresti anomali descritto per TypeScript 6.0.3.

Scritto dal modello di indicizzazione a partire dal testo della issue.

Valutazione

Stack tecnologico
go, typescript
Ambito
compilers
Tipo di issue
Bug
Difficoltà
3/5
Tempo stimato
1-2 giorni
Stato di attività
Attiva
Chiarezza
Specificata chiaramente
Idoneità per principianti
72/100

Ricevi le nuove issue nella tua casella

Un breve riepilogo di issue GitHub adatte ai principianti.