Skip to content

fix(fpc): fix callback compatibility with official middlewares (issue… - #499

Merged
viniciussanchez merged 1 commit into
HashLoad:masterfrom
regyssilveira:fix/issue-498-callback-compat
Jul 6, 2026
Merged

fix(fpc): fix callback compatibility with official middlewares (issue…#499
viniciussanchez merged 1 commit into
HashLoad:masterfrom
regyssilveira:fix/issue-498-callback-compat

Conversation

@regyssilveira

Copy link
Copy Markdown
Contributor

Descrição

Este Pull Request resolve a issue #498 ao restaurar a compatibilidade reversa para atribuição de callbacks procedurais a THorseCallback no Free Pascal Compiler (FPC) sem exigir o operador de endereço (@). Ele garante que a sintaxe herdada usada pelos middlewares oficiais compile perfeitamente no FPC, mantendo a proteção interna de segurança.

Contexto & Alterações

1. Callbacks Transparentes no FPC (src/Horse.Callback.pas)

  • Redefinido THorseCallback como um record encapsulando um Pointer genérico sob o compilador FPC.
  • Adicionados operadores implícitos bidirecionais (class operator Implicit) para converter de/para:
    • Pointer
    • THorseCallbackProc
    • THorseCallbackRequest
    • THorseCallbackResponse
    • THorseCallbackRequestResponse
  • Isso garante que expressões como Result := MyCallback ou a passagem direta do nome da procedure compilem sem que o compilador acuse incompatibilidade de tipos procedurais.

2. Ajustes nos Arrays de Wrappers (src/Horse.Core.Wrappers.inc)

  • Alterado o tipo dos elementos dos arrays de constantes globais estáticas GWrapperList1 e GWrapperList2 para Pointer.
  • Como o FPC não permite a inicialização estática de arrays de constantes cujos elementos sejam records contendo endereços procedurais (ex: @W1_0), a mudança para Pointer viabiliza a compilação. Os operadores implícitos do record garantem que a conversão ocorra de forma transparente e segura ao ler esses ponteiros em Horse.Core.pas.

3. Verificação e Testes

  • Testes Unitários: Incluído o caso de teste TestFPCLegacyCallbackAssignment para validar que a atribuição de callbacks de sintaxe legada compila sem problemas.
  • Testes de Integração: Adicionado um servidor console completo de teste em samples/lazarus/test_issue498/ utilizando os 5 middlewares oficiais (jhonson, horse-compression, horse-basic-auth, horse-cors e horse-octet-stream).
  • A compilação foi verificada com sucesso em ambiente Windows e Linux usando:
    • Free Pascal Compiler (FPC 3.2.2)
    • Delphi (dcc32 / dcclinux64)

@viniciussanchez
viniciussanchez merged commit 4ccb191 into HashLoad:master Jul 6, 2026
@regyssilveira
regyssilveira deleted the fix/issue-498-callback-compat branch July 6, 2026 18:51
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.

2 participants