Function arguments are bound one at a time, so later arguments see already-rebound parameters

Aperta Adatta ai principianti
#19 0 commenti 0 reazioni 0 assegnatari Vedi su GitHub

Nessuno ha ancora preso questa issue.

Valutazione

Difficoltà
2/5
Tempo stimato
1-3 ore
Idoneità per principianti
85/100
Tipo di issue
Bug
Chiarezza
Specificata chiaramente
Stato di attività
Attiva
Stack tecnologico
cpp
Ambito
compilers

Direzione di ricerca

Leggi il ciclo di binding degli argomenti alle righe L429–L433 di src/script_executor.cpp, concentrandoti sull'ordine in cui vengono chiamati interpolateVariables e setVariable. Riproduci l'esempio fornito CALL f($b, $a); l'obiettivo è raggiunto quando tutti gli argomenti vengono valutati prima nello scope del chiamante, così che il log risulti a=2 b=1.

Scritto dal modello di indicizzazione a partire dal testo della issue.

Descrizione

bug
Summary

CALL interpolates each argument after the previous parameter has been assigned. When an argument refers to a variable with the same name as an earlier parameter, it reads the new value.

Location
  • File(s): src/script_executor.cpp
  • Line(s) / function(s): argument binding L429–L433
Category

functional

Severity

medium

Swapping or forwarding variables through function parameters yields wrong values silently.

Reproduction / Evidence

Reproducible at runtime:

DEF f($a, $b)
LOG "a=$a b=$b"
ENDDEF
SET $a "1"
SET $b "2"
CALL f($b, $a)

Logs a=2 b=2; expected a=2 b=1.

Expected Behavior

All arguments are evaluated in the caller's scope before any parameter is bound.

Actual Behavior

Sequential bind-then-evaluate.

Root Cause

interpolateVariables(node->argValues[i]) and setVariable(func->paramNames[i], …) are interleaved in one loop.

Lingua principale
C++
Stelle
0
Fork
1
Merge medio
1h 46m
PR unite (30g)
8

Preparare l'ambiente

Questo progetto non fornisce container di sviluppo, Dockerfile né guida per i contributori, quindi l'ambiente è a tuo carico: parti dal suo README e consulta la nostra guida al primo contributo per i passaggi generali.

Come iniziare

  1. Leggi tutta la issue e poi la guida ai contributi del progetto.
  2. Commenta sulla issue per dire che te ne occupi tu — evita che due persone facciano lo stesso lavoro.
  3. Fai un fork del repository e lavora su un branch.
  4. Apri una pull request che faccia riferimento al numero della issue.

Altre issue di 5250ng/5250script

Tutte le issue di 5250ng/5250script

Issue simili

Altre issue su C++

Ricevi le nuove issue nella tua casella

Un breve riepilogo di issue GitHub adatte ai principianti.