6.24. kink/TRACE¶
6.24.1. trace型¶
traceは、スタックトレースの要素である。
traceは次の属性からなる。
• Sym: 呼ばれた関数のシンボルのstr値。
• Location: 呼び出しが起きた場所のlocation値。
• Tail?: 呼び出しが末尾呼び出しかどうかのbool値。
6.24.1.1. Trace.sym¶
symは、Traceの属性Symを戻す。
6.24.1.2. Trace.location¶
locationは、Traceの属性Locationを戻す。
6.24.1.3. Trace.tail?¶
tail?は、Traceの属性Tail?を戻す。
6.24.1.4. Trace.desc¶
descは、Traceを記述するstr値を戻す。
Tail?属性がtrueの場合、結果の最初の部分は "{...}" のように中括弧に囲まれる。
Tail?属性がfalseの場合、結果の最初の部分は "[...]" のように大括弧に囲まれる。
例
:TRACE.require_from('kink/')
:LOCATION.require_from('kink/program/')
:PROGRAM.require_from('kink/program/')
:Loc <- LOCATION.new(PROGRAM.new('foo.kn' 'foo(bar)') 4)
stdout.print_line(TRACE.new('bar' Loc).desc.repr)
# => "[foo.kn L1 C5 bar] foo(-->bar)"
stdout.print_line(TRACE.new('bar' LOCATION.empty).desc.repr)
# => "[bar]"
stdout.print_line(TRACE.new('bar' LOCATION.empty){(:C) C.tail }.desc.repr)
# => "{bar}"
stdout.print_line(TRACE.new('' Loc).desc.repr)
# => "[foo.kn L1 C5] foo(-->bar)"
stdout.print_line(TRACE.new('' Loc){(:C) C.tail }.desc.repr)
# => "{foo.kn L1 C5} foo(-->bar)"
stdout.print_line(TRACE.snip.desc.repr)
# => "{..snip..}"
stdout.print_line(TRACE.new('' LOCATION.empty).desc.repr)
# => "[..empty..]"
6.24.1.5. Trace1 == Trace2¶
== 演算子、つまりop_eqメソッドは、Trace1とTrace2が同値の属性を持っているかどうかを戻す。
事前条件
Trace2はtrace値でなければならない。
6.24.2. TRACE.new(Sym Location ...[$config={}])¶
newは、新しいtrace値を戻す。
コンフィグメソッド:
• C.tail
結果のtrace値は、SymとLocationを同名の属性として持つ。C.tailが呼ばれた場合、Tail?はtrueになる。C.tailが呼ばれなかった場合、Tail?はfalseになる。
事前条件
Symはstrでなければならない。
Locationはlocationでなければならない。
例
:TRACE.require_from('kink/')
:LOCATION.require_from('kink/program/')
:PROGRAM.require_from('kink/program/')
:T1 <- TRACE.new('op_add' LOCATION.new(PROGRAM.new('foo.kn' '10+20') 2))
stdout.print_line(T1.repr) # => (trace sym=op_add (location foo.kn L1 C3) tail?=false)
:T2 <- TRACE.new('bar' LOCATION.new(PROGRAM.new('bar.kn' 'bar(X)') 0)){(:C) C.tail }
stdout.print_line(T2.repr) # => (trace sym=bar (location bar.kn L1 C1) tail?=true)
6.24.3. TRACE.is?(Val)¶
is?は、Valがtraceであるかどうかを戻す。
6.24.4. TRACE.snip¶
snipは、Sym=, Location=LOCATION.empty, Tail?=trueであるようなtrace値を戻す。
このtrace値は、省略された末尾呼び出しのトレースを置き換えるのに使われる。
6.24.5. TRACE.current_traces¶
current_tracesは、抽象スタックマシンのスタックのtraceを、底からトップの順序で、vecとして戻す。
current_tracesの呼び出しの最後では、次の抽象命令列が評価される。
(traces)