Skip to content

Feat(analyser): verificar chamadas de função (aridade, tipos e callable)#122

Merged
Bappoz merged 7 commits into
developerfrom
feat/issue97-function-call-verification
Jun 10, 2026
Merged

Feat(analyser): verificar chamadas de função (aridade, tipos e callable)#122
Bappoz merged 7 commits into
developerfrom
feat/issue97-function-call-verification

Conversation

@HugoFreitass

Copy link
Copy Markdown
Collaborator

feat(analyser): verificar chamadas de função (aridade, tipos e callable)

Resumo

Implementa verificações semânticas para chamadas de função e toda a infraestrutura relacionada solicitada na issue: registro de assinaturas de funções, validação de chamadas (existência, se é uma função, aridade correta e compatibilidade dos tipos dos argumentos), além da adição de novos tipos de erro e testes.

O que foi alterado

Analisador semântico

  • Percorre a AST (Program → Decl → Stmt → Expr)

  • Registra funções com os tipos de seus parâmetros

  • Implementa verificações para Expr::Call:

    • função indefinida
    • chamada em algo que não é função
    • incompatibilidade de aridade
    • verificação de tipos argumento por argumento
  • Propaga corretamente o tipo de retorno das chamadas

Tabela de símbolos

  • Adicionado params: Option<Vec<QualifierType>> em Symbol para armazenar os tipos dos parâmetros de funções

Erros semânticos

  • Adicionados ArityMismatch e CallNonFunction em SemanticErrorKind
  • Implementadas mensagens de erro renderizáveis para ambos

Testes

Adicionados testes para:

  • chamada correta de função
  • incompatibilidade de aridade
  • incompatibilidade de tipos dos argumentos
  • chamada de variável que não é função

Também foram atualizados helpers e construções de testes para incluir o novo campo params quando necessário.

Motivação

Essas alterações resolvem a issue ao garantir a correção das chamadas de função durante a análise semântica e melhorar os diagnósticos para erros comuns relacionados a chamadas.

Testes executados

  • Adicionados testes unitários e executada toda a suíte:

    • cargo test → todos os testes passaram (169 passed)
  • Formatação verificada com:

    • cargo fmt --check

Migração / Observações para revisores

  • Symbol agora contém params: Option<Vec<QualifierType>>

  • Qualquer construção direta de Symbol deve incluir params

  • Novos erros semânticos podem ser emitidos:

    • CallNonFunction
    • ArityMismatch
  • Ferramentas que fazem correspondência em SemanticErrorKind podem precisar de atualização

Pendências / Próximos passos

  • Expressão de índice:

    • implementar desreferenciamento adequado de arrays/pointers para Expr::Index (TODO)
  • Expressão ternária:

    • implementar verificações completas de compatibilidade para Expr::Ternary (TODO)

Checklist

  • Registrar assinaturas de funções antes da análise dos corpos
  • Verificar se o alvo da chamada existe e é chamável
  • Verificar aridade e tipos dos argumentos
  • Adicionar variantes de erro e mensagens para o usuário
  • Adicionar testes unitários e executar cargo test / cargo fmt --check

@HugoFreitass HugoFreitass self-assigned this Jun 8, 2026
@HugoFreitass HugoFreitass changed the title Feat/issue97 function call verification feat(analyser): verificar chamadas de função (aridade, tipos e callable) Jun 8, 2026
@HugoFreitass HugoFreitass changed the title feat(analyser): verificar chamadas de função (aridade, tipos e callable) Feat(analyser): verificar chamadas de função (aridade, tipos e callable) Jun 8, 2026
@HugoFreitass HugoFreitass changed the base branch from master to developer June 8, 2026 18:51
@Bappoz Bappoz force-pushed the feat/issue97-function-call-verification branch from dc53aa4 to f506898 Compare June 10, 2026 04:11
@Bappoz Bappoz merged commit 4db7141 into developer Jun 10, 2026
1 check passed
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

Projects

None yet

Development

Successfully merging this pull request may close these issues.

[SEMANTIC 05] Verificação de chamadas de função (aridade e tipos de parâmetro)

2 participants