Record coercion can construct a private record from outside its module
Mantenedores costumam responder em até 1 dia
Avaliação
- Dificuldade
- 4/5
- Tempo estimado
- 1-2 dias
- Facilidade para iniciantes
- 52/100
- Tipo de issue
- Bug
- Clareza
- Claramente especificada
- Status de atividade
- Ativa
- Stack de tecnologia
- ocaml
- Domínio
- compilers
Direção de pesquisa
Start by tracing the record coercion type-checking path in the ReScript compiler and compare it with the handling of mutable from #9063, fixed by #9086. Check both examples in this issue: coercion from a plain record and from another module’s private record should be rejected, while coercion out to a plain record should remain allowed. Done means those cases behave as expected and the compiler’s relevant regression tests pass.
Escrita pelo modelo de indexação a partir do texto da issue.
Descrição
A record coerces structurally into a private record with the same fields, so code outside a module can construct values of that module's private record type, although private means they can only be built inside it.
From a plain record:
module Blob: {
type t = private {size: float}
} = {
type t = {size: float}
}
type plain = {size: float}
let fake = (p: plain): Blob.t => (p :> Blob.t) // compiles: `return p`
From another module's private record with the same fields, which that module constructs freely:
module Fake: {
type t = private {size: float}
let make: float => t
} = {
type t = {size: float}
let make = size => {size: size}
}
let forged = (Fake.make(1.) :> Blob.t) // compiles: `{size: 1}`
Expected: a coercion into a private record type is refused, unless the source is that same type. Coercing out of a private record, into a plain record with the same fields, stays allowed: reading a private record is fine.
This is a prerequisite for @instanceOf on private records (#9058): there, a forged value would be dispatched as an instance of a class it isn't. It is the same family as #9063 (fixed by #9086), where record coercion ignored mutable.
Found on master 3562ce6b80.
- Linguagem predominante
- OCaml
- Estrelas
- 7.5k
- Forks
- 484
- Merge médio
- 20h 19min
- PRs com merge (30d)
- 242
Preparar o ambiente
Inicia o contêiner de desenvolvimento do projeto no navegador, com a sua própria conta do GitHub.
- Sem Dockerfile nem arquivo Docker Compose
- Tem um modelo de pull request
- Ler o guia de contribuição
Primeiros passos
- Leia a issue inteira e depois o guia de contribuição do projeto.
- Comente na issue dizendo que vai assumir — evita que duas pessoas façam o mesmo trabalho.
- Faça um fork do repositório e trabalhe em uma branch.
- Abra um pull request que referencie o número da issue.
Mais de rescript-lang/rescript
-
Dificuldade 3/5 1-2 dias Facilidade para iniciantes 56/100
rescript-lang/rescript#9123 ·
Mantenedores costumam responder em até 1 dia
-
Dificuldade 4/5 1-2 dias Facilidade para iniciantes 55/100
rescript-lang/rescript#9122 ·
Mantenedores costumam responder em até 1 dia
-
Dificuldade 5/5 Mais de uma semana Facilidade para iniciantes 15/100
rescript-lang/rescript#9109 ·
Mantenedores costumam responder em até 1 dia
-
Formatter: five cases where comments and doc comments are placed wronglyTalvez já em andamento @cknitt assumiu há 1 dia. Aberta
Dificuldade 4/5 3-5 dias Facilidade para iniciantes 35/100
rescript-lang/rescript#9107 ·
Mantenedores costumam responder em até 1 dia
-
Parser rejects `private @attr {…}` and a doc comment before a non-record typeTalvez já em andamento @cknitt assumiu há 1 dia. Aberta
Dificuldade 4/5 1-2 dias Facilidade para iniciantes 35/100
rescript-lang/rescript#9106 ·
Mantenedores costumam responder em até 1 dia
Todas as issues de rescript-lang/rescript
Issues semelhantes
-
Dificuldade 2/5 1-3 horas Facilidade para iniciantes 78/100
CanadaHonk/porffor#426 ·
-
Dificuldade 2/5 1-3 horas Facilidade para iniciantes 77/100
Mantenedores costumam responder em até 1 dia
-
bug
Dificuldade 2/5 1-3 horas Facilidade para iniciantes 78/100
Mantenedores costumam responder em até 1 dia
-
compiler-rt:asan llvm:transforms
Dificuldade 2/5 1-3 horas Facilidade para iniciantes 72/100
llvm/llvm-project#236682 ·
Mantenedores costumam responder em até 1 dia
-
Lexer: Turbopack magic comments are not classifiedTalvez já em andamento @Aschenbath assumiu hoje. AbertaA-lexer
Dificuldade 2/5 1-3 horas Facilidade para iniciantes 85/100
oxc-project/oxc#28320 · 1 comentário ·
Mantenedores costumam responder em até 1 dia