1
  2
  3
  4
  5
  6
  7
  8
  9
 10
 11
 12
 13
 14
 15
 16
 17
 18
 19
 20
 21
 22
 23
 24
 25
 26
 27
 28
 29
 30
 31
 32
 33
 34
 35
 36
 37
 38
 39
 40
 41
 42
 43
 44
 45
 46
 47
 48
 49
 50
 51
 52
 53
 54
 55
 56
 57
 58
 59
 60
 61
 62
 63
 64
 65
 66
 67
 68
 69
 70
 71
 72
 73
 74
 75
 76
 77
 78
 79
 80
 81
 82
 83
 84
 85
 86
 87
 88
 89
 90
 91
 92
 93
 94
 95
 96
 97
 98
 99
100
101
102
103
104
105
106
107
108
109
110
@args --debugger
  nix-repl> let f = _: throw "x_x"; x = f 5; in x
  error: x_x

frames from 0 up to 4 work fine
  nix-repl> :st 0

  0: error: x_x
  «string»:1:12

       1| let f = _: throw "x_x"; x = f 5; in x
        |            ^

  Env level 0
  static: _

  Env level 1
  static: f x

  Env level 2
  static:

  Env level 3
  abort baseNameOf break builtins derivation derivationStrict dirOf false fetchGit fetchMercurial fetchTarball fetchTree fromTOML import isNull map null placeholder removeAttrs scopedImport throw toString true

  nix-repl> :st 4

  4: while evaluating a 'let' expression
  «string»:1:1

       1| let f = _: throw "x_x"; x = f 5; in x
        | ^

  Env level 0
  static: f x

  Env level 1
  static:

  Env level 2
  abort baseNameOf break builtins derivation derivationStrict dirOf false fetchGit fetchMercurial fetchTarball fetchTree fromTOML import isNull map null placeholder removeAttrs scopedImport throw toString true

absolute frames out of bounds print an error
  nix-repl> :st 5
  error: stack index must be between 0 and 4 (inclusive), but was 5

argument-less :st is still at the same after absolute oob
  nix-repl> :st

  4: while evaluating a 'let' expression
  «string»:1:1

       1| let f = _: throw "x_x"; x = f 5; in x
        | ^

  Env level 0
  static: f x

  Env level 1
  static:

  Env level 2
  abort baseNameOf break builtins derivation derivationStrict dirOf false fetchGit fetchMercurial fetchTarball fetchTree fromTOML import isNull map null placeholder removeAttrs scopedImport throw toString true

positive relative frames oob clamp to upper bound and print a warning
  nix-repl> :st +5

  4: while evaluating a 'let' expression
  «string»:1:1

       1| let f = _: throw "x_x"; x = f 5; in x
        | ^

  Env level 0
  static: f x

  Env level 1
  static:

  Env level 2
  abort baseNameOf break builtins derivation derivationStrict dirOf false fetchGit fetchMercurial fetchTarball fetchTree fromTOML import isNull map null placeholder removeAttrs scopedImport throw toString true

  warning: stopped at stack frame 4, cannot go any higher

negative relative frames oob clamp to lower bound and print a warning
  nix-repl> :st -5

  0: error: x_x
  «string»:1:12

       1| let f = _: throw "x_x"; x = f 5; in x
        |            ^

  Env level 0
  static: _

  Env level 1
  static: f x

  Env level 2
  static:

  Env level 3
  abort baseNameOf break builtins derivation derivationStrict dirOf false fetchGit fetchMercurial fetchTarball fetchTree fromTOML import isNull map null placeholder removeAttrs scopedImport throw toString true

  warning: stopped at stack frame 0, cannot go any deeper

quit
  nix-repl> :quit
  error: x_x