special cases and other things in wxPython, and since I plan on making several more, I've decided to put the SWIG sources in wxPython's CVS instead of relying on maintaining patches. This effectivly becomes a fork of an obsolete version of SWIG, :-( but since SWIG 1.3 still doesn't have some things I rely on in 1.1, not to mention that my custom patches would all have to be redone, I felt that this is the easier road to take. git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@15307 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775
		
			
				
	
	
		
			224 lines
		
	
	
		
			7.2 KiB
		
	
	
	
		
			OpenEdge ABL
		
	
	
	
	
	
			
		
		
	
	
			224 lines
		
	
	
		
			7.2 KiB
		
	
	
	
		
			OpenEdge ABL
		
	
	
	
	
	
| // consthash.i
 | |
| //
 | |
| // This module changes SWIG to place constant values into a Tcl
 | |
| // hash table. 
 | |
| 
 | |
| 
 | |
| #ifdef AUTODOC
 | |
| %subsection "Hash Constants",pre
 | |
| %text %{
 | |
| %include consthash.i
 | |
| 
 | |
| This module changes SWIG so that constant values are placed into a Tcl
 | |
| hash table in addition to normal Tcl variables.  When working with systems
 | |
| involving large numbers of constants, the use of a hash table
 | |
| simplifies use because it is no longer necessary to declare constants
 | |
| using the 'global' statement.
 | |
| 
 | |
| This module should generally be included at the top of an interface
 | |
| file before any declarations appear.   Furthermore, this module changes
 | |
| the default handling of basic datatypes including integers, floats,
 | |
| and character strings.
 | |
| 
 | |
| When this module is used, constants are simply accessed by name
 | |
| without the associated dollar sign. For example :
 | |
| 
 | |
|      #define FOO 42
 | |
| 
 | |
| would be accessed as 'FOO' in Tcl, not '$FOO'.
 | |
| 
 | |
| Note : This module only affects integer, float, and character
 | |
| constants.  Pointer constants are not currently affected.  This module
 | |
| should not break existing Tcl scripts that rely on the normal SWIG
 | |
| constant mechanism.
 | |
| %}
 | |
| #endif
 | |
| 
 | |
| %{
 | |
| static Tcl_HashTable      intHash, doubleHash, charHash;
 | |
| static Tcl_HashEntry      *entryPtr;
 | |
| static int                init_dummy;
 | |
| %}
 | |
| 
 | |
| %init %{
 | |
|    Tcl_InitHashTable(&intHash, TCL_STRING_KEYS);
 | |
|    Tcl_InitHashTable(&doubleHash, TCL_STRING_KEYS);
 | |
|    Tcl_InitHashTable(&charHash, TCL_STRING_KEYS);
 | |
| %}
 | |
| 
 | |
| %typemap(tcl,const) int SWIG_DEFAULT_TYPE, 
 | |
|                     unsigned int SWIG_DEFAULT_TYPE,
 | |
|                     long SWIG_DEFAULT_TYPE,
 | |
|                     unsigned long SWIG_DEFAULT_TYPE,
 | |
|                     short SWIG_DEFAULT_TYPE,
 | |
|                     unsigned short SWIG_DEFAULT_TYPE,
 | |
|                     unsigned char  SWIG_DEFAULT_TYPE,
 | |
|                     signed char    SWIG_DEFAULT_TYPE
 | |
| {
 | |
|   static int ivalue = (int) $source;
 | |
|   entryPtr = Tcl_CreateHashEntry(&intHash, "$target", &init_dummy);
 | |
|   Tcl_SetHashValue(entryPtr, &ivalue);
 | |
|   Tcl_LinkVar(interp, SWIG_prefix "$target",(char *) &ivalue, TCL_LINK_INT | TCL_LINK_READ_ONLY);
 | |
| }
 | |
| 
 | |
| %typemap(tcl,const) float  SWIG_DEFAULT_TYPE, 
 | |
|                     double SWIG_DEFAULT_TYPE
 | |
| {
 | |
|   static double dvalue = (double) $source;
 | |
|   entryPtr = Tcl_CreateHashEntry(&doubleHash, "$target", &init_dummy);
 | |
|   Tcl_SetHashValue(entryPtr, &dvalue);
 | |
|   Tcl_LinkVar(interp, SWIG_prefix "$target",(char *) &dvalue, TCL_LINK_DOUBLE | TCL_LINK_READ_ONLY);
 | |
| }
 | |
| 
 | |
| %typemap(tcl,const) char  *SWIG_DEFAULT_TYPE
 | |
| {
 | |
|   static char *cvalue = $source;
 | |
|   entryPtr = Tcl_CreateHashEntry(&charHash, "$target", &init_dummy);
 | |
|   Tcl_SetHashValue(entryPtr, &cvalue);
 | |
|   Tcl_LinkVar(interp, SWIG_prefix "$target",(char *) &cvalue, TCL_LINK_STRING | TCL_LINK_READ_ONLY);
 | |
| }
 | |
| 
 | |
| // Change input handling to look for names
 | |
| 
 | |
| %typemap(tcl,in) int SWIG_DEFAULT_TYPE, 
 | |
|                  unsigned int SWIG_DEFAULT_TYPE,
 | |
|                  long SWIG_DEFAULT_TYPE,
 | |
|                  unsigned long SWIG_DEFAULT_TYPE,
 | |
|                  short SWIG_DEFAULT_TYPE,
 | |
|                  unsigned short SWIG_DEFAULT_TYPE,
 | |
|                  unsigned char  SWIG_DEFAULT_TYPE,
 | |
|                  signed char    SWIG_DEFAULT_TYPE
 | |
| {
 | |
|    Tcl_HashEntry *entry;
 | |
|    entry = Tcl_FindHashEntry(&intHash,$source);
 | |
|    if (entry) {
 | |
|      $target = ($type) (*((int *) Tcl_GetHashValue(entry)));
 | |
|    } else {
 | |
|      int temp;
 | |
|      if (Tcl_GetInt(interp, $source, &temp) == TCL_ERROR) return TCL_ERROR;
 | |
|      $target = ($type) temp;
 | |
|    }
 | |
| }
 | |
| 
 | |
| %typemap(tcl,in) float SWIG_DEFAULT_TYPE, 
 | |
|                  double SWIG_DEFAULT_TYPE
 | |
| {
 | |
|    Tcl_HashEntry *entry;
 | |
|    entry = Tcl_FindHashEntry(&doubleHash,$source);
 | |
|    if (entry) {
 | |
|      $target = ($type) (*((double *) Tcl_GetHashValue(entry)));
 | |
|    } else if (entry = Tcl_FindHashEntry(&intHash,$source)) {
 | |
|      $target = ($type) (*((int *) Tcl_GetHashValue(entry)));
 | |
|    } else {
 | |
|      double temp;
 | |
|      if (Tcl_GetDouble(interp,$source,&temp) == TCL_ERROR) return TCL_ERROR;
 | |
|      $target = ($type) temp;
 | |
|    }
 | |
| }
 | |
| 
 | |
| %typemap(tcl,in) char *SWIG_DEFAULT_TYPE 
 | |
| {
 | |
|    Tcl_HashEntry *entry;
 | |
|    entry = Tcl_FindHashEntry(&charHash,$source);
 | |
|    if (entry) {
 | |
|      $target = ($type) (*((char **) Tcl_GetHashValue(entry)));
 | |
|    } else {
 | |
|      $target = $source;
 | |
|    }
 | |
| }
 | |
| 
 | |
| // ----------------------------------------------------------------------------------
 | |
| // Tcl 8 Object versions
 | |
| // ----------------------------------------------------------------------------------
 | |
| 
 | |
| %typemap(tcl8,const) int SWIG_DEFAULT_TYPE, 
 | |
|                     unsigned int SWIG_DEFAULT_TYPE,
 | |
|                     long SWIG_DEFAULT_TYPE,
 | |
|                     unsigned long SWIG_DEFAULT_TYPE,
 | |
|                     short SWIG_DEFAULT_TYPE,
 | |
|                     unsigned short SWIG_DEFAULT_TYPE,
 | |
|                     unsigned char  SWIG_DEFAULT_TYPE,
 | |
|                     signed char    SWIG_DEFAULT_TYPE
 | |
| {
 | |
|   static int ivalue = (int) $source;
 | |
|   entryPtr = Tcl_CreateHashEntry(&intHash, "$target", &init_dummy);
 | |
|   Tcl_SetHashValue(entryPtr, &ivalue);
 | |
|   Tcl_LinkVar(interp, SWIG_prefix "$target",(char *) &ivalue, TCL_LINK_INT | TCL_LINK_READ_ONLY);
 | |
| }
 | |
| 
 | |
| %typemap(tcl8,const) float  SWIG_DEFAULT_TYPE, 
 | |
|                     double SWIG_DEFAULT_TYPE
 | |
| {
 | |
|   static double dvalue = (double) $source;
 | |
|   entryPtr = Tcl_CreateHashEntry(&doubleHash, "$target", &init_dummy);
 | |
|   Tcl_SetHashValue(entryPtr, &dvalue);
 | |
|   Tcl_LinkVar(interp, SWIG_prefix "$target",(char *) &dvalue, TCL_LINK_DOUBLE | TCL_LINK_READ_ONLY);
 | |
| }
 | |
| 
 | |
| %typemap(tcl8,const) char  *SWIG_DEFAULT_TYPE
 | |
| {
 | |
|   static char *cvalue = $source;
 | |
|   entryPtr = Tcl_CreateHashEntry(&charHash, "$target", &init_dummy);
 | |
|   Tcl_SetHashValue(entryPtr, &cvalue);
 | |
|   Tcl_LinkVar(interp, SWIG_prefix "$target",(char *) &cvalue, TCL_LINK_STRING | TCL_LINK_READ_ONLY);
 | |
| }
 | |
| 
 | |
| // Change input handling to look for names
 | |
| 
 | |
| %typemap(tcl8,in) int SWIG_DEFAULT_TYPE, 
 | |
|                  unsigned int SWIG_DEFAULT_TYPE,
 | |
|                  long SWIG_DEFAULT_TYPE,
 | |
|                  unsigned long SWIG_DEFAULT_TYPE,
 | |
|                  short SWIG_DEFAULT_TYPE,
 | |
|                  unsigned short SWIG_DEFAULT_TYPE,
 | |
|                  unsigned char  SWIG_DEFAULT_TYPE,
 | |
|                  signed char    SWIG_DEFAULT_TYPE
 | |
| {
 | |
|    Tcl_HashEntry *entry;
 | |
|    int  _len;
 | |
|    char *_str = Tcl_GetStringFromObj($source,&_len);
 | |
|    entry = Tcl_FindHashEntry(&intHash,_str);
 | |
|    if (entry) {
 | |
|      $target = ($type) (*((int *) Tcl_GetHashValue(entry)));
 | |
|    } else {
 | |
|      int temp;
 | |
|      if (Tcl_GetIntFromObj(interp, $source, &temp) == TCL_ERROR) return TCL_ERROR;
 | |
|      $target = ($type) temp;
 | |
|    }
 | |
| }
 | |
| 
 | |
| %typemap(tcl8,in) float SWIG_DEFAULT_TYPE, 
 | |
|                  double SWIG_DEFAULT_TYPE
 | |
| {
 | |
|    Tcl_HashEntry *entry;
 | |
|    int  _len;
 | |
|    char *_str = Tcl_GetStringFromObj($source,&_len);
 | |
|    entry = Tcl_FindHashEntry(&doubleHash,_str);
 | |
|    if (entry) {
 | |
|      $target = ($type) (*((double *) Tcl_GetHashValue(entry)));
 | |
|    } else if (entry = Tcl_FindHashEntry(&intHash,_str)) {
 | |
|      $target = ($type) (*((int *) Tcl_GetHashValue(entry)));
 | |
|    } else {
 | |
|      double temp;
 | |
|      if (Tcl_GetDoubleFromObj(interp,$source,&temp) == TCL_ERROR) return TCL_ERROR;
 | |
|      $target = ($type) temp;
 | |
|    }
 | |
| }
 | |
| 
 | |
| %typemap(tcl8,in) char *SWIG_DEFAULT_TYPE 
 | |
| {
 | |
|    Tcl_HashEntry *entry;
 | |
|    int  _len;
 | |
|    char *_str = Tcl_GetStringFromObj($source,&_len);
 | |
|    entry = Tcl_FindHashEntry(&charHash,_str);
 | |
|    if (entry) {
 | |
|      $target = ($type) (*((char **) Tcl_GetHashValue(entry)));
 | |
|    } else {
 | |
|      $target = _str;
 | |
|    }
 | |
| }
 | |
| 
 | |
| 
 | |
| 
 | |
|    
 |