Tcl Source Code

View Ticket
Login
Ticket UUID: 1530474
Title: Shrink the .exe size
Type: Patch Version: None
Submitter: afredd Created on: 2006-07-28 15:46:01
Subsystem: None Assigned To: dkf
Priority: 4 Severity:
Status: Closed Last Modified: 2006-08-10 19:19:54
Resolution: Fixed Closed By: dkf
    Closed on: 2006-08-10 12:19:54
Description:
By converting the 24 calls of:

Tcl_Panic("<function> called with shared object");

in the core, into a (new) function call of

TclSharedObjPanic("<function>");

...where TclSharedObjPanic() constructs the previous
message before calling Tcl_Panic() then
the static .exe shrinks by about 4K (from 770048
to 765952). This is more than i'd expected, so
compilers other than VS6 may give less impressive
savings.

Attached patch includes the trivial changes to

tclBinary.c
tclDictObj.c
tclInt.h
tclListObj.c
tclObj.c
tclStringObj.c
User Comments: dkf added on 2006-08-10 19:19:53:
Logged In: YES 
user_id=79902

Applied fixes suggested. Will not backport.

afredd added on 2006-08-07 21:17:33:

File Deleted - 186616: 



File Added - 188005: tclVar.c-patch

Logged In: YES 
user_id=1386588


Another few bytes can be saved by removing the
redundant first "if (objc < 1)" test in Tcl_UnsetObjCmd.
ie. are there a negative number of command arguments.
Looks like a harmless mistranslation of the code for the
old behaviour when [unset] was an error.

Anyways saves a few bytes (257) from the tclVar.obj,
and possibly from the .exe too.

afredd added on 2006-08-07 16:03:08:

File Added - 187948: called_with_shared_object.patch

Logged In: YES 
user_id=1386588

> can you (afredd) please provide the alternate patch? thx

Sure - here it is.

I've also added in the reworded Tcl_Panic for TclIncrObj.

Note, while i haven't changed them there are 2 possible
 typos in the (original) panic messages. (1) The panic
 at ~1323 of tclListObj.c says "Tcl_ListObjSetElement"
 but is really in TclListObjSetElement (no underscore).
 (2) Similarly, at ~344 in tclBinary.c the panic in the
 function Tcl_SetByteArrayLength says Tcl_SetObjLength.

hobbs added on 2006-08-05 05:59:34:
Logged In: YES 
user_id=72656

can you (afredd) please provide the alternate patch?  thx

afredd added on 2006-08-04 15:36:45:
Logged In: YES 
user_id=1386588

> I'm interested to know if the same effect can be had by
> just using:
> 
> Tcl_Panic("%s called with shared object", <function>);

Good idea... yes, this gives the same 4K file
size reduction as with using a TclSharedObjPanic().

Also, spotted in tclExecute.c:

~1043: Tcl_Panic("shared object passed to TclIncrObj")

which could be reworded to match the others.

hobbs added on 2006-08-04 01:31:05:
Logged In: YES 
user_id=72656

I'm interested to know if the same effect can be had by just
using:

Tcl_Panic("%s called with shared object", <function>);

as the string would remain the same, and no new function is
needed (Tcl_Panic already handles varargs).  If so, that
would be a trivially easy to add in patch.

dkf added on 2006-08-04 00:04:45:
Logged In: YES 
user_id=79902

Putting this on the back-burner for now; better to do this
sort of thing during (towards the end of?) the beta cycle.

afredd added on 2006-07-28 23:59:09:

File Added - 186627: tclClock.c-patch

Logged In: YES 
user_id=1386588


...and one for tclClock.c that shrinks tclClock.obj
from 23,417 to 23,201 by condensing the clock command
initialisation code.

afredd added on 2006-07-28 23:08:14:

File Added - 186622: tclBasic.c-patch

afredd added on 2006-07-28 23:08:13:
Logged In: YES 
user_id=1386588

To go with the previous changes, here's a patch that
removes the need for the "::tcl::mathfunc::" prefix
on all math function name static strings in tclBasic.c.
For me this shrinks tclBasic.obj from 80963 to 79965,
a saving of 998bytes.

afredd added on 2006-07-28 22:46:02:

File Added - 186616: TclSharedObjPanic.patch

Attachments: