Tcl Source Code

Ticket Change Details
Login
Overview

Artifact ID: f1457e894220a9584b3fdf83f8f9608a032c52d53e85d1e88e50a83ad88112ce
Ticket: 2d2a32124406e8494a9d73cf2b668dcddc75fdf6
info frame does not correct recognize current type of execution scope
User & Date: sebres 2019-03-15 14:18:16
Changes

  1. assignee changed to: "nobody"
  2. closer changed to: "nobody"
  3. cmimetype changed to: "text/x-fossil-wiki"
  4. comment changed to:
    If frame level is provided as value, it is confused:
    <code><pre style="padding-left:10">
    % proc test {} { puts pr:[info frame [info frame]]; namespace eval ::test {puts ns:[info frame [info frame]]} }; test
      pr:type proc line 1 cmd {info frame [info frame]} proc ::test level 0
      ns:type <b style="color:red">proc</b> line 1 cmd {info frame [info frame]} level 0
    </pre></code>
    totally unexpected type (red marked), imho - should not type be something like "eval" or "namespace" in the second case?
    
    If one gives the 0 (so as current frame level), it works correct:
    <code><pre style="padding-left:10">
    % proc test {} { puts pr:[info frame 0]; namespace eval ::test {puts ns:[info frame 0]} }; test
      pr:type proc line 1 cmd {info frame 0} proc ::test level 0
      ns:type <b style="color:green">eval</b> line 1 cmd {info frame 0} level 0
    </pre></code>
    
    But still worse, the things change also in this case if something else is involved around `info frame` additionally.<br/>
    So adding a `dict get ... type` around confuses it again:
    <code><pre style="padding-left:10">
    % proc test {} { puts pr:[dict get [info frame 0] type]; namespace eval ::test {puts ns:[dict get [info frame 0] type]} }; test
      pr:proc
      ns:<b style="color:red">proc</b>
    </pre></code>
    As well as just usage of set, so set to variable (despite it is compiled in NS) causes completely wrong type recognition:
    <pre style="padding-left:10">
    % proc test {} { namespace eval ::test {puts ns:[info frame 0]} }; test
      ns:type <b style="color:green">eval</b> line 1 cmd {info frame 0} level 0
    % proc test {} { namespace eval ::test {puts ns:[set f [info frame 0]]} }; test
      ns:type <b style="color:red">proc</b> line 1 cmd {info frame 0} level 0
    </pre>
    
    So it looks like `info frame` is totally unusable at the moment (or at least pointing at the wrong frame, if one wants to retrieve the type of the scope).
    
  5. foundin changed to: "all"
  6. is_private changed to: "0"
  7. login: "sebres"
  8. priority changed to: "5 Medium"
  9. resolution changed to: "None"
  10. severity changed to: "Severe"
  11. status changed to: "Open"
  12. submitter changed to: "sebres"
  13. subsystem changed to: "16. Commands A-H"
  14. title changed to:
    info frame does not correct recognize current type of execution scope
    
  15. type changed to: "Bug"