Some(U) of an @as(undefined) case compiles to undefined when U is a constant
I maintainer di solito rispondono entro 1 giorno
Nessuno ha ancora preso questa issue.
Valutazione
- Difficoltà
- 4/5
- Tempo stimato
- 1-2 giorni
- Idoneità per principianti
- 55/100
- Tipo di issue
- Bug
- Chiarezza
- Specificata chiaramente
- Stato di attività
- Attiva
- Stack tecnologico
- javascript
- Ambito
- compilers
Direzione di ricerca
Start by reading rule 12 in compiler/ml/UntaggedVariants.md and tracing the constant handling in compiler/ml/lambda.ml, especially const_some_none_depth. Reproduce the example and compare Some(U) with None for the constant and function cases. Done means both comparisons show Some(U) differs from None, with compiler tests covering the regression.
Scritto dal modello di indicizzazione a partire dal testo della issue.
Descrizione
Some(U), where U is an @as(undefined) case of an untagged variant, compiles to undefined when U is a constant argument, so it equals None.
@unboxed type u = | @as(undefined) U | V(string)
let x: option<u> = Some(U) // compiles to: let x = undefined;
@inline(never) let mk = (v: u): option<u> => Some(v)
Console.log2(x == None, mk(U) == None)
Output: true false. Through a function, Some(U) is boxed and differs from None; as a constant, it is undefined.
Expected: Some(U) differs from None in both cases. This is the example of #6222, which made option unboxing compatible with untagged variants.
A likely place is compiler/ml/lambda.ml, const_some_none_depth, which treats every Const_constructor as not none, including one whose literal is undefined. This cause is not confirmed. The rule is compiler/ml/UntaggedVariants.md rule 12, in #8952.
- Lingua principale
- OCaml
- Stelle
- 7.5k
- Fork
- 483
- Merge medio
- 1g 1h
- PR unite (30g)
- 169
Preparare l'ambiente
Avvia il container di sviluppo del progetto nel browser, con il tuo account GitHub.
- Nessun Dockerfile né file Docker Compose
- Ha un modello di pull request
- Leggi la guida per i contributori
Come iniziare
- Leggi tutta la issue e poi la guida ai contributi del progetto.
- Commenta sulla issue per dire che te ne occupi tu — evita che due persone facciano lo stesso lavoro.
- Fai un fork del repository e lavora su un branch.
- Apri una pull request che faccia riferimento al numero della issue.
Altre issue di rescript-lang/rescript
-
Difficoltà 2/5 1-3 ore Idoneità per principianti 77/100
rescript-lang/rescript#8953 ·
I maintainer di solito rispondono entro 1 giorno
-
Difficoltà 4/5 1-2 giorni Idoneità per principianti 52/100
rescript-lang/rescript#8956 ·
I maintainer di solito rispondono entro 1 giorno
-
Difficoltà 4/5 3-5 giorni Idoneità per principianti 48/100
rescript-lang/rescript#8955 ·
I maintainer di solito rispondono entro 1 giorno
-
Difficoltà 5/5 Più di una settimana Idoneità per principianti 35/100
rescript-lang/rescript#8947 ·
I maintainer di solito rispondono entro 1 giorno
-
Untagged variant with Blob and File cases never matches File when Blob is declared firstForse già presa @cknitt l’ha presa 1 giorno fa. Aperta
Difficoltà 4/5 3-5 giorni Idoneità per principianti 48/100
rescript-lang/rescript#8938 ·
I maintainer di solito rispondono entro 1 giorno
Tutte le issue di rescript-lang/rescript
Issue simili
-
bug P2
Difficoltà 2/5 1-3 ore Idoneità per principianti 74/100
I maintainer di solito rispondono entro 1 giorno
-
REPL and --show-tokens abort with "Token conversion not implemented yet" on .xor., byte and in outApertabug low priority tokenizer
Difficoltà 2/5 1-3 ore Idoneità per principianti 78/100
I maintainer di solito rispondono entro 1 giorno
-
Difficoltà 1/5 Meno di un'ora Idoneità per principianti 76/100
WebAssembly/spec#2300 ·
I maintainer di solito rispondono entro 1 giorno
-
crash generated by fuzzer mlir
Difficoltà 2/5 1-3 ore Idoneità per principianti 72/100
llvm/llvm-project#234636 · 1 commento ·
I maintainer di solito rispondono entro 1 giorno
-
bug PyCDE
Difficoltà 2/5 1-3 ore Idoneità per principianti 74/100
I maintainer di solito rispondono entro 1 giorno