Skip to content

Conversation

@leonelsanchesdasilva
Copy link
Contributor

Por exemplo:

classe Conversor {
    converter(valor: inteiro) {
        escreva("inteiro: " + texto(valor))
    }
    converter(valor: texto) {
        escreva("texto: " + valor)
    }
}
var conv = Conversor()
conv.converter(42)
conv.converter("olá")

Até então, não seria possível implementar o método converter da classe de conversor com as sobrecargas de operadores. Esta PR torna isso possível.

Também suporta:

  • Polimorfismo com herança de classes;
  • Polimorfismo de construtores.

@github-actions
Copy link

github-actions bot commented Feb 9, 2026

📊 Cobertura de Código

Métrica Cobertura
Linhas 75.57%
Declarações 75.24%
Funções 70.59%
Branches 63.35%

Copy link
Contributor

Copilot AI left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Pull request overview

Esta PR adiciona suporte no interpretador para polimorfismo/sobrecarga de métodos de classes e de construtores, incluindo resolução de sobrecargas com herança (mesclagem entre superclasse e subclasse).

Changes:

  • Adiciona MetodoPolimorfico para encapsular e despachar entre múltiplas sobrecargas em tempo de execução.
  • Altera a construção/armazenamento de métodos de classes para permitir múltiplas implementações por nome e ajusta DescritorTipoClasse.encontrarMetodo() para retornar a sobrecarga correta (incluindo herança).
  • Expande a suíte de testes do interpretador com cenários de despacho por aridade, tipo, curinga, herança e construtores sobrecarregados.

Reviewed changes

Copilot reviewed 9 out of 9 changed files in this pull request and generated 1 comment.

Show a summary per file
File Description
testes/interpretador/interpretador.test.ts Novos testes cobrindo despacho por aridade/tipo, curinga, herança e construtores sobrecarregados.
fontes/interpretador/interpretador.ts Ajusta busca de método (finalizar) para usar encontrarMetodo(), compatível com sobrecargas/herança.
fontes/interpretador/interpretador-base.ts Evita completar argumentos antes do despacho quando a chamada é polimórfica; passa a armazenar métodos com possível array de sobrecargas.
fontes/interpretador/estruturas/metodo-polimorfico.ts Implementa o chamável responsável por escolher e invocar a melhor sobrecarga.
fontes/interpretador/estruturas/index.ts Exporta MetodoPolimorfico.
fontes/interpretador/estruturas/descritor-tipo-classe.ts metodos passa a aceitar arrays; encontrarMetodo() mescla herança e retorna MetodoPolimorfico quando necessário; aridade() passa a considerar construtor polimórfico.
fontes/interpretador/dialetos/egua-classico/interpretador-egua-classico.ts Ajusta criação/armazenamento de métodos para suportar múltiplas entradas por nome e evita acesso direto assumindo método único.
fontes/bibliotecas/dialetos/pitugues/biblioteca-global.ts Ajusta tamanho() para lidar com metodos.inicializacao possivelmente não sendo função única.
fontes/bibliotecas/biblioteca-global.ts Ajusta tamanho() para lidar com metodos.inicializacao possivelmente não sendo função única.

💡 Add Copilot custom instructions for smarter, more guided reviews. Learn how to get started.

Co-authored-by: Copilot <175728472+Copilot@users.noreply.github.com>
@leonelsanchesdasilva leonelsanchesdasilva merged commit a3fa571 into principal Feb 9, 2026
4 checks passed
@leonelsanchesdasilva leonelsanchesdasilva deleted the polimorfismo branch February 9, 2026 03:54
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant