proc get_location {} {
set caller_framelevel [expr [info frame] - 1]
set up [expr $caller_framelevel - 1]
set fr [expr $caller_framelevel - 0]
set location "[uplevel $up {info script}]:[dict get [info frame $fr] line]"
return $location
}
proc p1 {} {
puts [get_location]
}
puts [get_location]
if {true} {
puts [get_location]
if {1} {
puts [get_location]
}
}
proc p2 {} {
p1
}
p1
p2
cHJvYyBnZXRfbG9jYXRpb24ge30gewoJc2V0IGNhbGxlcl9mcmFtZWxldmVsIFtleHByIFtpbmZvIGZyYW1lXSAtIDFdCglzZXQgdXAgW2V4cHIgJGNhbGxlcl9mcmFtZWxldmVsIC0gMV0KCXNldCBmciBbZXhwciAkY2FsbGVyX2ZyYW1lbGV2ZWwgLSAwXQoJc2V0IGxvY2F0aW9uICJbdXBsZXZlbCAkdXAge2luZm8gc2NyaXB0fV06W2RpY3QgZ2V0IFtpbmZvIGZyYW1lICRmcl0gbGluZV0iCglyZXR1cm4gJGxvY2F0aW9uCn0KCnByb2MgcDEge30gewoJcHV0cyBbZ2V0X2xvY2F0aW9uXQp9CgpwdXRzIFtnZXRfbG9jYXRpb25dCgppZiB7dHJ1ZX0gewoJcHV0cyBbZ2V0X2xvY2F0aW9uXQoKCWlmIHsxfSB7CgkJcHV0cyBbZ2V0X2xvY2F0aW9uXQoJfQp9Cgpwcm9jIHAyIHt9IHsKCXAxCn0KCnAxCnAy