Tcl Source Code

View Ticket
Login
Ticket UUID: 1056864
Title: Ensemble error message rewriting
Type: Patch Version: None
Submitter: dkf Created on: 2004-10-29 15:36:40
Subsystem: 21. [namespace] Assigned To: dkf
Priority: 5 Medium Severity:
Status: Closed Last Modified: 2004-11-04 02:40:10
Resolution: Accepted Closed By: dkf
    Closed on: 2004-10-29 15:42:40
Description:
The attached patch improves the general quality of
ensemble error messages.
User Comments: dgp added on 2004-11-04 02:40:10:
Logged In: YES 
user_id=80530

no, the trouble is that the 
fix for Tcl Bug 942757 got
moved from tclProc.c
into Tcl_WrongNumArgs()
and Itcl relies on the
prior (buggy?) behavior of
Tcl_WrongNumArgs().

dgp added on 2004-11-04 00:47:18:
Logged In: YES 
user_id=80530


Not certain, but I think because
Itcl's ensemble dispatch mechanism
does a direct call to a Tcl_ObjCmdProc
instead of routing back through
TclEvalObvInternal, then the
iPtr->ensembleRewrite processing
in TEOVI doesn't get done, and
bogus Tcl_WrongNumArgs() output
is the result.

The need for that extra work in TEOVI
appears to be an Achilles heel of
this patch.

dgp added on 2004-11-04 00:35:20:
Logged In: YES 
user_id=80530


The Itcl test suite appears to 
be very unhappy with this change.

dkf added on 2004-11-01 15:50:46:
Logged In: YES 
user_id=79902

Yes and no. TCL_EVAL_INVOKE is actually what is wanted for
both alias and ensemble processing.

dgp added on 2004-10-29 23:52:31:
Logged In: YES 
user_id=80530


Since part of the functioning of this
patch is manipulations immediately
before calling the Tcl_ObjCmdProc,
I expect there will be failures when
other callers of a Tcl_ObjCmdProc 
are involved, like TclObjInvoke
(for hidden commands) or 
InvokeImportedCmd (for
[namespace import]ed commands).

That is, this patch gives us yet
another reason to factor all
command procedure dispatch
into a single location.

dgp added on 2004-10-29 23:45:27:
Logged In: YES 
user_id=80530


This patch uses the TCL_EVAL_INVOKE
flag as a way to signal to TclEvalObjvInternal
that an ensemble is in process.

The TCL_EVAL_INVOKE flag is used
in other ways too -- in interp aliases
notably -- and has additional effects
of forcing global evaluation, and suppressing
errorInfo logging.

This flag really needs factoring.

dkf added on 2004-10-29 22:36:41:

File Added - 106966: rw.diff

Attachments: