Skip to content

Fix duplicate execution for typed overloads with identical signatures#156

Open
yotors wants to merge 2 commits intotrueagi-io:mainfrom
yotors:main
Open

Fix duplicate execution for typed overloads with identical signatures#156
yotors wants to merge 2 commits intotrueagi-io:mainfrom
yotors:main

Conversation

@yotors
Copy link
Copy Markdown

@yotors yotors commented Apr 3, 2026

This PR fixes a dispatch bug where typed function calls could execute multiple times when the same type signature was declared more than once.

In typed dispatch, all type chains for a function were collected and converted into OR branches. If duplicate signatures existed, duplicate branches were generated, and each branch could succeed, causing repeated execution.

Example repro
Given:

(: bin (-> Number))
(= (bin) 1)
(: bin (-> Number))
(= (bin) 2)
!(bin)

Returns
1
2
1
2
Typed dispatch created two equivalent branches for the same signature, so both clauses could run.

Root cause
In translator.pl:308, typed dispatch used all matched type chains directly, without deduplicating identical signatures.

Fix
Deduplicate collected type chains before branch generation.
Generate typed branches only from unique type chains.
Keep existing behavior unchanged for genuinely different overload signatures.
Implemented in:

translator.pl:309
Behavior change
Before: duplicate identical type definitions could trigger duplicate function execution.
After: identical type chains collapse to a single dispatch branch, preventing duplicate execution.

@yotors yotors changed the title Merge branch 'main' of https://github.com/patham9/PeTTa Fix duplicate execution for typed overloads with identical signatures Apr 3, 2026
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