Store independent task results in scalar slots before summarizing them.

task slots Separate result slots make replay easier to follow because each task updates its own scalar state.

Task Result Slots

seed
task_result_slots.php
Replay: real traced execution (multi-file project)
<?php
function fill_read_slot($value) {
    return $value + 10;
}

function fill_write_slot($value) {
    return $value * 3;
}

$seed = 5;
$readSlot = 0;
$writeSlot = 0;

$readSlot = fill_read_slot($seed);
$writeSlot = fill_write_slot($seed);
$total = $readSlot + $writeSlot;

echo "read=" . $readSlot . "\n";
echo "write=" . $writeSlot . "\n";
echo "total=" . $total . "\n";
<?php
function fill_read_slot($value) {
    return $value + 10;
}

function fill_write_slot($value) {
    return $value * 3;
}

$seed = 2;
$readSlot = 0;
$writeSlot = 0;

$readSlot = fill_read_slot($seed);
$writeSlot = fill_write_slot($seed);
$total = $readSlot + $writeSlot;

echo "read=" . $readSlot . "\n";
echo "write=" . $writeSlot . "\n";
echo "total=" . $total . "\n";
<?php
function fill_read_slot($value) {
    return $value + 10;
}

function fill_write_slot($value) {
    return $value * 3;
}

$seed = 8;
$readSlot = 0;
$writeSlot = 0;

$readSlot = fill_read_slot($seed);
$writeSlot = fill_write_slot($seed);
$total = $readSlot + $writeSlot;

echo "read=" . $readSlot . "\n";
echo "write=" . $writeSlot . "\n";
echo "total=" . $total . "\n";
  1. $seed ← 5, $readSlot ← 0, $writeSlot ← 0

    10$seed→ 5 = 5; //@seed=2, 811$readSlot→ 0 = 0;12$writeSlot→ 0 = 0;1314$readSlot = fill_read_slot($seed5);15$writeSlot = fill_write_slot($seed);
  2. function fill_read_slot($value)

    1<?php2function fill_read_slot($value5) {3    return $value5 + 10;4}
  3. $readSlot ← 15

    14$readSlot→ 15 = fill_read_slot($seed5);15$writeSlot = fill_write_slot($seed5);16$total = $readSlot + $writeSlot;
  4. function fill_write_slot($value)

    6function fill_write_slot($value5) {7    return $value5 * 3;8}
  5. $writeSlot ← 15, $total ← 30

    14$readSlot = fill_read_slot($seed);15$writeSlot→ 15 = fill_write_slot($seed5);16$total→ 30 = $readSlot15 + $writeSlot15;1718echo "read=" . $readSlot15 . "\n";19echo "write=" . $writeSlot15 . "\n";20echo "total=" . $total30 . "\n";
    outputread=15
    write=15
    total=30
  1. $seed ← 2, $readSlot ← 0, $writeSlot ← 0

    10$seed→ 2 = 2;11$readSlot→ 0 = 0;12$writeSlot→ 0 = 0;1314$readSlot = fill_read_slot($seed2);15$writeSlot = fill_write_slot($seed);
  2. function fill_read_slot($value)

    1<?php2function fill_read_slot($value2) {3    return $value2 + 10;4}
  3. $readSlot ← 12

    14$readSlot→ 12 = fill_read_slot($seed2);15$writeSlot = fill_write_slot($seed2);16$total = $readSlot + $writeSlot;
  4. function fill_write_slot($value)

    6function fill_write_slot($value2) {7    return $value2 * 3;8}
  5. $writeSlot ← 6, $total ← 18

    14$readSlot = fill_read_slot($seed);15$writeSlot→ 6 = fill_write_slot($seed2);16$total→ 18 = $readSlot12 + $writeSlot6;1718echo "read=" . $readSlot12 . "\n";19echo "write=" . $writeSlot6 . "\n";20echo "total=" . $total18 . "\n";
    outputread=12
    write=6
    total=18
  1. $seed ← 8, $readSlot ← 0, $writeSlot ← 0

    10$seed→ 8 = 8;11$readSlot→ 0 = 0;12$writeSlot→ 0 = 0;1314$readSlot = fill_read_slot($seed8);15$writeSlot = fill_write_slot($seed);
  2. function fill_read_slot($value)

    1<?php2function fill_read_slot($value8) {3    return $value8 + 10;4}
  3. $readSlot ← 18

    14$readSlot→ 18 = fill_read_slot($seed8);15$writeSlot = fill_write_slot($seed8);16$total = $readSlot + $writeSlot;
  4. function fill_write_slot($value)

    6function fill_write_slot($value8) {7    return $value8 * 3;8}
  5. $writeSlot ← 24, $total ← 42

    14$readSlot = fill_read_slot($seed);15$writeSlot→ 24 = fill_write_slot($seed8);16$total→ 42 = $readSlot18 + $writeSlot24;1718echo "read=" . $readSlot18 . "\n";19echo "write=" . $writeSlot24 . "\n";20echo "total=" . $total42 . "\n";
    outputread=18
    write=24
    total=42