A function call is a small replay composition: the main script pauses while the function body produces a value, then the caller continues.

Program

Play the script to choose a request count and watch the replay jump into the function before returning to the caller.

request_count
function_step_replay.R
Replay: real traced execution (multi-file project)
score_bonus <- function(count) {
    points <- count * 2
    points
}
request_count <- 3
base_score <- 10
bonus <- score_bonus(request_count)
total <- base_score + bonus
label <- paste(request_count, total, sep = ":")
cat(label, "\n", sep = "")
score_bonus <- function(count) {
    points <- count * 2
    points
}
request_count <- 2
base_score <- 10
bonus <- score_bonus(request_count)
total <- base_score + bonus
label <- paste(request_count, total, sep = ":")
cat(label, "\n", sep = "")
score_bonus <- function(count) {
    points <- count * 2
    points
}
request_count <- 5
base_score <- 10
bonus <- score_bonus(request_count)
total <- base_score + bonus
label <- paste(request_count, total, sep = ":")
cat(label, "\n", sep = "")
  1. score_bonus ← function(count)

    1score_bonus <- function(count) {2    points <- count * 2
    values this stepfunction(count)score_bonus
  2. request_count ← 3

    4}5request_count <- 36base_score <- 10
    values this step3request_count
  3. base_score ← 10

    5request_count <- 36base_score <- 107bonus <- score_bonus(request_count)
    values this step10base_score
  4. bonus <- score_bonus(request_count)

    6base_score <- 107bonus <- score_bonus(request_count)8total <- base_score + bonus
    values this step3request_count
  5. points ← 6

    1score_bonus <- function(count) {2    points <- count * 23    points
    values this step6points3count
  6. points

    2    points <- count * 23    points4}
    values this step6points
  7. bonus ← 6

    6base_score <- 107bonus <- score_bonus(request_count)8total <- base_score + bonus
    values this step6bonus
  8. total ← 16

    7bonus <- score_bonus(request_count)8total <- base_score + bonus9label <- paste(request_count, total, sep = ":")
    values this step16total10base_score6bonus
  9. label ← 3:16

    8total <- base_score + bonus9label <- paste(request_count, total, sep = ":")10cat(label, "\n", sep = "")
    values this step3:16label3request_count16total
  10. cat(label, " ", sep = "")

    9label <- paste(request_count, total, sep = ":")10cat(label, "\n", sep = "")
    output3:16
    values this step3:16label
  1. score_bonus ← function(count)

    1score_bonus <- function(count) {2    points <- count * 2
    values this stepfunction(count)score_bonus
  2. request_count ← 2

    4}5request_count <- 26base_score <- 10
    values this step2request_count
  3. base_score ← 10

    5request_count <- 26base_score <- 107bonus <- score_bonus(request_count)
    values this step10base_score
  4. bonus <- score_bonus(request_count)

    6base_score <- 107bonus <- score_bonus(request_count)8total <- base_score + bonus
    values this step2request_count
  5. points ← 4

    1score_bonus <- function(count) {2    points <- count * 23    points
    values this step4points2count
  6. points

    2    points <- count * 23    points4}
    values this step4points
  7. bonus ← 4

    6base_score <- 107bonus <- score_bonus(request_count)8total <- base_score + bonus
    values this step4bonus
  8. total ← 14

    7bonus <- score_bonus(request_count)8total <- base_score + bonus9label <- paste(request_count, total, sep = ":")
    values this step14total10base_score4bonus
  9. label ← 2:14

    8total <- base_score + bonus9label <- paste(request_count, total, sep = ":")10cat(label, "\n", sep = "")
    values this step2:14label2request_count14total
  10. cat(label, " ", sep = "")

    9label <- paste(request_count, total, sep = ":")10cat(label, "\n", sep = "")
    output2:14
    values this step2:14label
  1. score_bonus ← function(count)

    1score_bonus <- function(count) {2    points <- count * 2
    values this stepfunction(count)score_bonus
  2. request_count ← 5

    4}5request_count <- 56base_score <- 10
    values this step5request_count
  3. base_score ← 10

    5request_count <- 56base_score <- 107bonus <- score_bonus(request_count)
    values this step10base_score
  4. bonus <- score_bonus(request_count)

    6base_score <- 107bonus <- score_bonus(request_count)8total <- base_score + bonus
    values this step5request_count
  5. points ← 10

    1score_bonus <- function(count) {2    points <- count * 23    points
    values this step10points5count
  6. points

    2    points <- count * 23    points4}
    values this step10points
  7. bonus ← 10

    6base_score <- 107bonus <- score_bonus(request_count)8total <- base_score + bonus
    values this step10bonus
  8. total ← 20

    7bonus <- score_bonus(request_count)8total <- base_score + bonus9label <- paste(request_count, total, sep = ":")
    values this step20total10base_score10bonus
  9. label ← 5:20

    8total <- base_score + bonus9label <- paste(request_count, total, sep = ":")10cat(label, "\n", sep = "")
    values this step5:20label5request_count20total
  10. cat(label, " ", sep = "")

    9label <- paste(request_count, total, sep = ":")10cat(label, "\n", sep = "")
    output5:20
    values this step5:20label
function body The function body has its own local names while it is executing.
call jump The call line hands control to the function body and then receives the returned value.
single panel This is still one source panel with one ordered trace stream.