D 2014-09-02T21:38:40.005 L Embedding\sSupport P 93366cc3392d2a73286ed428c0cc2c6774274be7 U hypnotoad W 2810

Source Files

* [/finfo?name=generic/tclMain.c|tclMain.c] * [/finfo?name=generic/tclPanic.c|tclPanic.c] * [/finfo?name=unix/tclAppInit.c|tclAppInit.c] * [/finfo?name=win/tclAppInit.c|tclAppInit.c]

Public Interface

* Tcl_SetStartupScript * Tcl_GetStartupScript * Tcl_SourceRCFile * Tcl_Main * Tcl_MainEx * Tcl_SetMainLoop * Tcl_SetPanicProc * Tcl_PanicVA * Tcl_Panic

Private Interface

* TclFullFinalizationRequested * TclGetMainLoop

Directly Depends On Public Interface

* [Threads] * [Object System and Fundamental Object Types] * [Variable Commands and Interfaces] * [Pathname Management] * [Filesystem Access] * [Channel System] * [list Object Type] * [Preservation] * [Parsing and Evaluation] * [interp] * [Event Loops] * [dict Object Type] * [Linked C Variables] * [history] * unistd.h

Directly Depends On Private Interface of

* [Initialization, Library, Autoloader] * [Pathname Management] * [Object System and Fundamental Object Types] * [Parsing and Evaluation] * [Allocation] * [Environment Variables]

The core_zip_vfs Patch

The [/timeline?r=core_zip_vfs|core_zip_vfs] branch adds the ability to mount a zip archive concatenated to the current executable as a virtual file system, capable of hosting both env(TCL_LIBRARY) and kick off a bootloader (if a file called main.tcl is present). This patch: * Adds [/finfo?name=generic/tclZipVfs.c|tclZipVfs.c] * Modifies [/finfo?name=unix/tclAppInit.c|tclAppInit.c] * Modifies [/finfo?name=win/tclAppInit.c|tclAppInit.c] To build a self-contained executable: cp tclsh mynewkit zip mynewkit.zip main.tcl cat mynewkit.zip >> mynewkit ./mynewkit (Launches using the code embedded in main.tcl)

Discussion

This has been considered a single module, but tclPanic.c is essentially a self contained bit without dependencies, while tclMain.c depends on nearly everything. Most other parts of Tcl that claim a dependence on this module are really just callers of Tcl_Panic. One wrinkle is the routine tclWinDebugPanic which is in multiple places, tclWinError.c and tclWinFile.c. There's also a great deal of #ifdef in tclPanic.c. A restructuring into a generic caller of TclpPanic might be a path to increasing simplicity and conventionality. The routine TclGetMainLoop is another to note. It appears in no header file. It gets declared with MODULE_SCOPE but there doesn't appear to be any reason it could not be a static function. The routine TclFullFinalizationRequested probably should move into [Event Loops]. Z 36a9d082d7cbfbe6f25f9389757c63ee