Removed dependency on the Hash object

git-svn-id: https://swig.svn.sourceforge.net/svnroot/swig/trunk@290 626c5289-ae23-0410-ae9c-e8d60b6d4f22
This commit is contained in:
Dave Beazley 2000-02-28 22:56:02 +00:00
commit b62c688906
10 changed files with 110 additions and 101 deletions

View file

@ -98,8 +98,8 @@ char *JAVA::SwigTcToJavaType(DataType *t, int ret, int inShadow) {
case T_SCHAR: return "byte []";
case T_BOOL: return "boolean []";
case T_VOID:
case T_USER: if(inShadow && shadow_classes.lookup(t->name))
return (char *)shadow_classes.lookup(t->name);
case T_USER: if(inShadow && Getattr(shadow_classes,t->name))
return GetChar(shadow_classes,t->name);
else return "long";
}
} else if(t->is_pointer > 1) {
@ -170,8 +170,8 @@ char *JAVA::JavaMethodSignature(DataType *t, int ret, int inShadow) {
case T_SCHAR: return "[B";
case T_BOOL: return "[Z";
case T_VOID:
case T_USER: if(inShadow && shadow_classes.lookup(t->name))
return (char *)shadow_classes.lookup(t->name);
case T_USER: if(inShadow && Getattr(shadow_classes,t->name))
return GetChar(shadow_classes,t->name);
else return "J";
}
} else if(t->is_pointer > 1) {
@ -912,15 +912,15 @@ void JAVA::add_typedef(DataType *t, char *name) {
if (t->is_pointer > 1) return;
if(shadow_classes.lookup(name)) return; // Already added
if(Getattr(shadow_classes,name)) return; // Already added
// Now look up the datatype in our shadow class hash table
if (shadow_classes.lookup(t->name)) {
if (Getattr(shadow_classes,t->name)) {
// Yep. This datatype is in the hash
// Put this types 'new' name into the hash
shadow_classes.add(name,copy_string((char *) shadow_classes.lookup(t->name)));
Setattr(shadow_classes,name,GetChar(shadow_classes,t->name));
}
}
@ -939,10 +939,10 @@ void JAVA::cpp_open_class(char *classname, char *rename, char *ctype, int strip)
SWIG_exit(1);
}
shadow_classes.add(classname, shadow_classname);
Setattr(shadow_classes,classname, shadow_classname);
if(ctype && strcmp(ctype, "struct") == 0) {
sprintf(bigbuf, "struct %s", classname);
shadow_classes.add(copy_string(bigbuf), shadow_classname);
Setattr(shadow_classes, bigbuf, shadow_classname);
}
sprintf(bigbuf, "%s.java", shadow_classname);
@ -1020,7 +1020,7 @@ void JAVA::cpp_member_func(char *name, char *iname, DataType *t, ParmList *l) {
if(!javarettype) javarettype = SwigTcToJavaType(t, 1, 0);
char *shadowrettype = JavaTypeFromTypemap("jstype", typemap_lang, t, iname);
if(!shadowrettype && t->type == T_USER) {
shadowrettype = (char *)shadow_classes.lookup(t->name);
shadowrettype = GetChar(shadow_classes,t->name);
}
fprintf(f_shadow, " public %s %s(", (shadowrettype) ? shadowrettype : javarettype, iname);
@ -1045,7 +1045,7 @@ void JAVA::cpp_member_func(char *name, char *iname, DataType *t, ParmList *l) {
arg << i;
}
if(p->t->type == T_USER && shadow_classes.lookup(p->t->name)) {
if(p->t->type == T_USER && Getattr(shadow_classes,p->t->name)) {
nativecall << ", " << arg << "._self";
} else nativecall << ", " << arg;
@ -1054,7 +1054,7 @@ void JAVA::cpp_member_func(char *name, char *iname, DataType *t, ParmList *l) {
char *jstype = JavaTypeFromTypemap("jstype", typemap_lang, p->t, p->name);
if(!jstype && p->t->type == T_USER) {
jstype = (char *)shadow_classes.lookup(p->t->name);
jstype = GetChar(shadow_classes,p->t->name);
}
// Add to java function header
@ -1088,7 +1088,7 @@ void JAVA::cpp_static_func(char *name, char *iname, DataType *t, ParmList *l) {
if(!javarettype) javarettype = SwigTcToJavaType(t, 1, 0);
char *shadowrettype = JavaTypeFromTypemap("jstype", typemap_lang, t, iname);
if(!shadowrettype && t->type == T_USER) {
shadowrettype = (char *)shadow_classes.lookup(t->name);
shadowrettype = GetChar(shadow_classes,t->name);
}
fprintf(f_shadow, " public static %s %s(", (shadowrettype) ? shadowrettype : javarettype, iname);
@ -1116,7 +1116,7 @@ void JAVA::cpp_static_func(char *name, char *iname, DataType *t, ParmList *l) {
if(gencomma) nativecall << ", ";
if(p->t->type == T_USER && shadow_classes.lookup(p->t->name)) {
if(p->t->type == T_USER && Getattr(shadow_classes,p->t->name)) {
nativecall << arg << "._self";
} else nativecall << arg;
@ -1127,7 +1127,7 @@ void JAVA::cpp_static_func(char *name, char *iname, DataType *t, ParmList *l) {
char *jstype = JavaTypeFromTypemap("jstype", typemap_lang, p->t, p->name);
if(!jstype && p->t->type == T_USER) {
jstype = (char *)shadow_classes.lookup(p->t->name);
jstype = GetChar(shadow_classes, p->t->name);
}
// Add to java function header
@ -1188,7 +1188,7 @@ void JAVA::cpp_constructor(char *name, char *iname, ParmList *l) {
// Add to java function header
fprintf(f_shadow, "%s %s", (jstype) ? jstype : jtype, (char *) arg);
if(p->t->type == T_USER && shadow_classes.lookup(p->t->name)) {
if(p->t->type == T_USER && Getattr(shadow_classes,p->t->name)) {
nativecall << arg << "._self";
} else nativecall << arg;
@ -1237,10 +1237,10 @@ void JAVA::cpp_class_decl(char *name, char *rename, char *type) {
char *realname = (rename) ? rename : name;
shadow_classes.add(name, copy_string(realname));
Setattr(shadow_classes,name, realname);
if(type && strcmp(type, "struct") == 0) {
sprintf(bigbuf, "struct %s", name);
shadow_classes.add(copy_string(bigbuf), rename);
Setattr(shadow_classes, bigbuf, rename);
}
}

View file

@ -17,7 +17,7 @@ private:
FILE *f_java;
FILE *f_shadow;
int shadow;
Hash shadow_classes;
DOH *shadow_classes;
String shadow_classdef;
char *shadow_name;
char *shadow_baseclass;
@ -44,6 +44,7 @@ public :
jnic = -1;
useRegisterNatives=0;
finalize=0;
shadow_classes = NewHash();
};
// Virtual functions required by the SWIG parser

View file

@ -1,5 +1,5 @@
/* Include the proper SWIG core header */
/* Feel free to change this when compiling against experiment cores */
#include "doh.h"
#include "swig11.h"

View file

@ -104,8 +104,6 @@ static char *import_file = 0;
static char *smodule = 0;
static int compat = 0;
static Hash symbols;
// ---------------------------------------------------------------------
// PERL5::parse_args(int argc, char *argv[])
//
@ -599,10 +597,10 @@ PERL5::type_mangle(DataType *t) {
// Check to see if we've blessed this datatype
if ((classes.lookup(t->name)) && (t->is_pointer <= 1)) {
if ((Getattr(classes,t->name)) && (t->is_pointer <= 1)) {
// This is a blessed class. Return just the type-name
strcpy(result,(char *) classes.lookup(t->name));
strcpy(result, GetChar(classes,t->name));
return result;
}
}
@ -1021,7 +1019,7 @@ void PERL5::create_function(char *name, char *iname, DataType *d, ParmList *l)
if ((tm = typemap_lookup("perl5in","perl5",p->t,"",sourceNtarget,sourceNtarget)))
func << tm << "\n";
else if ((classes.lookup(p->t->name)) && (p->t->is_pointer <= 1)) {
else if ((Getattr(classes,p->t->name)) && (p->t->is_pointer <= 1)) {
if (i >= (pcount - numopt))
func << tab4 << "if (scalar(@args) >= " << i << ") {\n" << tab4;
@ -1048,7 +1046,7 @@ void PERL5::create_function(char *name, char *iname, DataType *d, ParmList *l)
func << tm << "\n"
<< tab4 <<"return $result;\n"
<< "}\n";
} else if ((classes.lookup(d->name)) && (d->is_pointer <=1)) {
} else if ((Getattr(classes,d->name)) && (d->is_pointer <=1)) {
func << tab4 << "return undef if (!defined($result));\n";
@ -1056,16 +1054,13 @@ void PERL5::create_function(char *name, char *iname, DataType *d, ParmList *l)
// into our local hash table
if ((d->is_pointer == 0) || ((d->is_pointer == 1) && NewObject)) {
func << tab4 << "$" << (char *) classes.lookup(d->name) << "::OWNER{$result} = 1;\n";
func << tab4 << "$" << GetChar(classes,d->name) << "::OWNER{$result} = 1;\n";
}
// We're returning a Perl "object" of some kind. Turn it into
// a tied hash
func << tab4 << "my %resulthash;\n"
/* << tab4 << "tie %resulthash, \"" << (char *) classes.lookup(d->name) << "\", $result;\n"
<< tab4 << "return bless \\%resulthash, \"" << (char *) classes.lookup(d->name) << "\";\n"
*/
<< tab4 << "tie %resulthash, ref($result), $result;\n"
<< tab4 << "return bless \\%resulthash, ref($result);\n"
<< "}\n";
@ -1275,12 +1270,12 @@ void PERL5::link_variable(char *name, char *iname, DataType *t)
// 2. Otherwise, just hack Perl's symbol table
if (blessed) {
if ((classes.lookup(t->name)) && (t->is_pointer <= 1)) {
if ((Getattr(classes,t->name)) && (t->is_pointer <= 1)) {
var_stubs << "\nmy %__" << iname << "_hash;\n"
<< "tie %__" << iname << "_hash,\"" << (char *) classes.lookup(t->name) << "\", $"
<< "tie %__" << iname << "_hash,\"" << GetChar(classes,t->name) << "\", $"
<< package << "::" << iname << ";\n"
<< "$" << iname << "= \\%__" << iname << "_hash;\n"
<< "bless $" << iname << ", " << (char *) classes.lookup(t->name) << ";\n";
<< "bless $" << iname << ", " << GetChar(classes,t->name) << ";\n";
} else {
var_stubs << "*" << iname << " = *" << package << "::" << iname << ";\n";
}
@ -1420,12 +1415,12 @@ PERL5::declare_const(char *name, char *, DataType *type, char *value)
}
if (blessed) {
if ((classes.lookup(type->name)) && (type->is_pointer <= 1)) {
if ((Getattr(classes,type->name)) && (type->is_pointer <= 1)) {
var_stubs << "\nmy %__" << name << "_hash;\n"
<< "tie %__" << name << "_hash,\"" << (char *) classes.lookup(type->name) << "\", $"
<< "tie %__" << name << "_hash,\"" << GetChar(classes,type->name) << "\", $"
<< package << "::" << name << ";\n"
<< "$" << name << "= \\%__" << name << "_hash;\n"
<< "bless $" << name << ", " << (char *) classes.lookup(type->name) << ";\n";
<< "bless $" << name << ", " << GetChar(classes,type->name) << ";\n";
} else {
var_stubs << "*" << name << " = *" << package << "::" << name << ";\n";
}
@ -1633,12 +1628,11 @@ void PERL5::cpp_open_class(char *classname, char *rname, char *ctype, int strip)
// Add some symbols to the hash tables
// classes.add(real_classname,copy_string(class_name)); /* Map original classname to class */
classes.add(real_classname,copy_string(fullclassname)); /* Map original classname to class */
Setattr(classes,real_classname,fullclassname);
// Add full name of datatype to the hash table just in case the user uses it
sprintf(temp,"%s %s", class_type, fullclassname.get());
// classes.add(temp,copy_string(class_name)); /* Map full classname to classs */
}
}
@ -1793,9 +1787,10 @@ void PERL5::cpp_member_func(char *name, char *iname, DataType *t, ParmList *l) {
realname = iname;
cname << class_name << "::" << realname;
if ((symbols.add(cname.get(),0)) == -1) {
return; // Forget it, we saw this function already
if (Getattr(symbols,cname.get())) {
return; // Forget it, we saw this already
}
Setattr(symbols,cname.get(),cname.get());
func << "sub " << realname << " {\n"
<< tab4 << "my @args = @_;\n"
@ -1817,7 +1812,7 @@ void PERL5::cpp_member_func(char *name, char *iname, DataType *t, ParmList *l) {
if ((tm = typemap_lookup("perl5in","perl5",p->t,"",sourceNtarget,sourceNtarget)))
func << tm << "\n";
// Look up the datatype name here
else if ((classes.lookup(p->t->name)) && (p->t->is_pointer <= 1)) {
else if ((Getattr(classes,p->t->name)) && (p->t->is_pointer <= 1)) {
// Yep. This smells alot like an object, patch up the arguments
if (i >= (pcount - numopt))
@ -1847,7 +1842,7 @@ void PERL5::cpp_member_func(char *name, char *iname, DataType *t, ParmList *l) {
func << tm << "\n"
<< tab4 <<"return $result;\n"
<< "}\n";
} else if ((classes.lookup(t->name)) && (t->is_pointer <=1)) {
} else if ((Getattr(classes,t->name)) && (t->is_pointer <=1)) {
func << tab4 << "return undef if (!defined($result));\n";
@ -1855,15 +1850,15 @@ void PERL5::cpp_member_func(char *name, char *iname, DataType *t, ParmList *l) {
// into our local hash table
if ((t->is_pointer == 0) || ((t->is_pointer == 1) && NewObject)) {
func << tab4 << "$" << (char *) classes.lookup(t->name) << "::OWNER{$result} = 1;\n";
func << tab4 << "$" << GetChar(classes,t->name) << "::OWNER{$result} = 1;\n";
}
// We're returning a Perl "object" of some kind. Turn it into
// a tied hash
func << tab4 << "my %resulthash;\n"
/* << tab4 << "tie %resulthash, \"" << (char *) classes.lookup(t->name) << "\", $result;\n"
<< tab4 << "return bless \\%resulthash, \"" << (char *) classes.lookup(t->name) << "\";\n" */
/* << tab4 << "tie %resulthash, \"" << GetChar(classes,t->name) << "\", $result;\n"
<< tab4 << "return bless \\%resulthash, \"" << GetChar(classes,t->name) << "\";\n" */
<< tab4 << "tie %resulthash, ref($result), $result;\n"
<< tab4 << "return bless \\%resulthash, ref($result);\n"
@ -1917,9 +1912,10 @@ void PERL5::cpp_variable(char *name, char *iname, DataType *t) {
if (blessed) {
cname << class_name << "::" << realname;
if ((symbols.add(cname.get(),0)) == -1) {
if (Getattr(symbols,cname.get())) {
return; // Forget it, we saw this already
}
Setattr(symbols,cname.get(),cname.get());
// Store name of key for future reference
@ -1927,12 +1923,12 @@ void PERL5::cpp_variable(char *name, char *iname, DataType *t) {
// Now we need to generate a little Perl code for this
if ((classes.lookup(t->name)) && (t->is_pointer <= 1)) {
if ((Getattr(classes,t->name)) && (t->is_pointer <= 1)) {
// This is a Perl object that we have already seen. Add an
// entry to the members list
*blessedmembers << tab4 << realname << " => '" << (hidden ? realpackage : "") << (hidden ? "::" : "") << (char *) classes.lookup(t->name) << "',\n";
*blessedmembers << tab4 << realname << " => '" << (hidden ? realpackage : "") << (hidden ? "::" : "") << GetChar(classes,t->name) << "',\n";
}
}
@ -1970,9 +1966,10 @@ void PERL5::cpp_constructor(char *name, char *iname, ParmList *l) {
}
cname << class_name << "::" << realname;
if ((symbols.add(cname.get(),0)) == -1) {
if (Getattr(symbols,cname.get())) {
return; // Forget it, we saw this already
}
Setattr(symbols,cname.get(), cname.get());
if ((strcmp(realname,class_name) == 0) || ((!iname) && (ObjCClass)) ){
// Emit a blessed constructor
@ -2001,7 +1998,7 @@ void PERL5::cpp_constructor(char *name, char *iname, ParmList *l) {
// Look up the datatype name here
if ((classes.lookup(p->t->name)) && (p->t->is_pointer <= 1)) {
if ((Getattr(classes,p->t->name)) && (p->t->is_pointer <= 1)) {
// Yep. This smells alot like an object, patch up the arguments
*pcode << tab4 << "$args[" << i << "] = tied(%{$args[" << i << "]});\n";
@ -2101,7 +2098,7 @@ void PERL5::cpp_inherit(char **baseclass, int) {
base_class = new String;
while (baseclass[i]) {
// See if this is a class we know about
bc = (char *) classes.lookup(baseclass[i]);
bc = GetChar(classes,baseclass[i]);
if (bc) {
if (have_first) *base_class << " ";
*base_class << bc;
@ -2139,9 +2136,10 @@ void PERL5::cpp_declare_const(char *name, char *iname, DataType *type, char *val
realname = iname;
cname << class_name << "::" << realname;
if ((symbols.add(cname.get(),0)) == -1) {
if (Getattr(symbols, cname.get())) {
return; // Forget it, we saw this already
}
Setattr(symbols, cname.get(),cname.get());
// Create a symbol table entry for it
*pcode << "*" << realname << " = *" << package << "::" << name_member(realname,class_name) << ";\n";
@ -2159,11 +2157,11 @@ void PERL5::cpp_declare_const(char *name, char *iname, DataType *type, char *val
void PERL5::cpp_class_decl(char *name, char *rename, char *type) {
char temp[256];
if (blessed) {
classes.add(name,copy_string(rename));
Setattr(classes, name, rename);
// Add full name of datatype to the hash table
if (strlen(type) > 0) {
sprintf(temp,"%s %s", type, name);
classes.add(temp,copy_string(rename));
Setattr(classes,temp,rename);
}
}
}
@ -2190,17 +2188,17 @@ void PERL5::add_typedef(DataType *t, char *name) {
if (t->is_pointer > 1) return;
if (classes.lookup(name)) return; // Already added
if (Getattr(classes,name)) return; // Already added
// Now look up the datatype in our shadow class hash table
if (classes.lookup(t->name)) {
if (Getattr(classes,t->name)) {
// Yep. This datatype is in the hash
// Put this types 'new' name into the hash
classes.add(name,copy_string((char *) classes.lookup(t->name)));
Setattr(classes,name,GetChar(classes,t->name));
}
}

View file

@ -46,7 +46,8 @@ private:
int blessed; // Enable object oriented features
int hidden; // Every symbol hidden in <hide> package name
Hash classes; // A hash table for storing the classes we've seen so far
DOH *classes; // A hash table for storing the classes we've seen so far
DOH *symbols;
int have_constructor;
int have_destructor;
int have_data_members;
@ -73,6 +74,8 @@ public :
hidden = 0;
alt_header = 0;
member_func = 0;
classes = NewHash();
symbols = NewHash();
};
virtual void parse_args(int, char *argv[]);
virtual void parse();

View file

@ -50,8 +50,6 @@ static String base_getattr;
static String base_setattr;
static int class_renamed = 0;
static Hash symbols;
// --------------------------------------------------------------------------
// PYTHON::cpp_open_class(char *classname, char *rname, char *ctype, int strip)
//
@ -101,10 +99,10 @@ void PYTHON::cpp_open_class(char *classname, char *rname, char *ctype, int strip
class_type = copy_string(ctype);
// Build up the hash table
hash.add(real_classname,copy_string(class_name));
Setattr(hash,real_classname,class_name);
sprintf(temp,"%s %s", class_type, real_classname);
hash.add(temp,copy_string(class_name));
Setattr(hash,temp,class_name);
if (shadow) {
*setattr << tab4 << "def __setattr__(self,name,value):\n"
@ -153,15 +151,16 @@ void PYTHON::cpp_member_func(char *name, char *iname, DataType *t, ParmList *l)
// Check to see if we've already seen this
cname << class_name << "::" << realname;
if ((symbols.add(cname.get(),0)) == -1) {
if (Getattr(symbols,cname.get())) {
return; // Forget it, already saw it
}
Setattr(symbols,cname.get(),cname.get());
if (strcmp(realname,"__repr__") == 0)
have_repr = 1;
if (!((hash.lookup(t->name)) && (t->is_pointer <=1)) && !noopt) {
if (!((Getattr(hash,t->name)) && (t->is_pointer <=1)) && !noopt) {
*imethod << class_name << "." << realname << " = new.instancemethod(" << module << "." << name_member(realname,class_name) << ", None, " << class_name << ")\n";
/* *pyclass << tab4 << realname << " = " << module << ".__shadow__." << name_member(realname,class_name) << "\n"; */
} else {
@ -179,12 +178,12 @@ void PYTHON::cpp_member_func(char *name, char *iname, DataType *t, ParmList *l)
*pyclass << tab8 << "val = apply(" << module << "." << name_member(realname,class_name) << ",args)\n";
// Check to see if the return type is an object
if ((hash.lookup(t->name)) && (t->is_pointer <= 1)) {
if ((Getattr(hash,t->name)) && (t->is_pointer <= 1)) {
if (!typemap_check("out",typemap_lang,t,name_member(realname,class_name))) {
if (!have_output) {
*pyclass << tab8 << "if val: val = " << (char *) hash.lookup(t->name) << "Ptr(val) ";
if (((hash.lookup(t->name)) && (t->is_pointer < 1)) ||
((hash.lookup(t->name)) && (t->is_pointer == 1) && NewObject))
*pyclass << tab8 << "if val: val = " << GetChar(hash,t->name) << "Ptr(val) ";
if (((Getattr(hash,t->name)) && (t->is_pointer < 1)) ||
((Getattr(hash,t->name)) && (t->is_pointer == 1) && NewObject))
*pyclass << "; val.thisown = 1\n";
else
*pyclass << "\n";
@ -230,9 +229,10 @@ void PYTHON::cpp_constructor(char *name, char *iname, ParmList *l) {
// Check to see if we've already seen this
cname << class_name << "::" << realname;
if ((symbols.add(cname.get(), 0)) == -1) {
if (Getattr(symbols,cname.get())) {
return; // Forget it, already seen it
}
Setattr(symbols,cname.get(),cname.get());
if (!have_constructor) {
@ -398,7 +398,7 @@ void PYTHON::cpp_inherit(char **baseclass,int) {
// Now tell the Python module that we're inheriting from a base class
while (baseclass[i]) {
bc = (char *) hash.lookup(baseclass[i]);
bc = GetChar(hash,baseclass[i]);
if (bc) {
if (first_base) *base_class << ",";
*base_class << bc;
@ -439,13 +439,14 @@ void PYTHON::cpp_variable(char *name, char *iname, DataType *t) {
// Check to see if we've already seen this
cname << class_name << "::" << realname;
if ((symbols.add(cname.get(), 0)) == -1) {
if (Getattr(symbols,cname.get())) {
return; // Forget it, already seen it
}
Setattr(symbols,cname.get(),cname.get());
// Figure out if we've seen this datatype before
if ((hash.lookup(t->name)) && (t->is_pointer <= 1)) inhash = 1;
if ((Getattr(hash,t->name)) && (t->is_pointer <= 1)) inhash = 1;
// Now write some code to set the variable
*csetattr << tab8 << "\"" << realname << "\" : " << module << "." << name_set(name_member(realname,class_name)) << ",\n";
@ -456,7 +457,7 @@ void PYTHON::cpp_variable(char *name, char *iname, DataType *t) {
}
// Write some code to get the variable
if (inhash) {
*cgetattr << tab8 << "\"" << realname << "\" : lambda x : " << (char *) hash.lookup(t->name) << "Ptr(" << module << "." << name_get(name_member(realname,class_name)) << "(x)),\n";
*cgetattr << tab8 << "\"" << realname << "\" : lambda x : " << GetChar(hash,t->name) << "Ptr(" << module << "." << name_get(name_member(realname,class_name)) << "(x)),\n";
} else {
*cgetattr << tab8 << "\"" << realname << "\" : " << module << "." << name_get(name_member(realname,class_name)) << ",\n";
@ -488,9 +489,10 @@ void PYTHON::cpp_declare_const(char *name, char *iname, DataType *type, char *va
// Check to see if we've already seen this
cname << class_name << "::" << realname;
if ((symbols.add(cname.get(), 0)) == -1) {
if (Getattr(symbols,cname.get())) {
return; // Forget it, already seen it
}
Setattr(symbols,cname.get(),cname.get());
*cinit << tab4 << realname << " = " << module << "." << name_member(realname,class_name) << "\n";
}
@ -518,17 +520,17 @@ void PYTHON::add_typedef(DataType *t, char *name) {
if (t->is_pointer > 1) return;
if (hash.lookup(name)) return; // Already added
if (Getattr(hash,name)) return; // Already added
// Now look up the datatype in our shadow class hash table
if (hash.lookup(t->name)) {
if (Getattr(hash,t->name)) {
// Yep. This datatype is in the hash
// Put this types 'new' name into the hash
hash.add(name,copy_string((char *) hash.lookup(t->name)));
Setattr(hash,name, GetChar(hash,t->name));
}
}

View file

@ -978,7 +978,7 @@ void PYTHON::create_function(char *name, char *iname, DataType *d, ParmList *l)
int have_optional = 0;
// Check return code for modification
if ((hash.lookup(d->name)) && (d->is_pointer <=1)) {
if ((Getattr(hash,d->name)) && (d->is_pointer <=1)) {
need_wrapper = 1;
munge_return = 1;
}
@ -1003,9 +1003,9 @@ void PYTHON::create_function(char *name, char *iname, DataType *d, ParmList *l)
// unchanged. Otherwise, emit some shadow class conversion code.
if (!have_output) {
func << tab4 << "if val: val = " << (char *) hash.lookup(d->name) << "Ptr(val)";
if (((hash.lookup(d->name)) && (d->is_pointer < 1)) ||
((hash.lookup(d->name)) && (d->is_pointer == 1) && NewObject))
func << tab4 << "if val: val = " << GetChar(hash,d->name) << "Ptr(val)";
if (((Getattr(hash,d->name)) && (d->is_pointer < 1)) ||
((Getattr(hash,d->name)) && (d->is_pointer == 1) && NewObject))
func << "; val.thisown = 1\n";
else
func << "\n";
@ -1241,8 +1241,8 @@ void PYTHON::link_variable(char *name, char *iname, DataType *t) {
// Output a shadow variable. (If applicable and possible)
// ----------------------------------------------------------
if ((shadow) && (!(shadow & PYSHADOW_MEMBER))) {
if ((hash.lookup(t->name)) && (t->is_pointer <= 1)) {
vars << iname << " = " << (char *) hash.lookup(t->name) << "Ptr(" << module << "." << global_name
if ((Getattr(hash,t->name)) && (t->is_pointer <= 1)) {
vars << iname << " = " << GetChar(hash,t->name) << "Ptr(" << module << "." << global_name
<< "." << iname << ")\n";
}
}
@ -1426,11 +1426,11 @@ void PYTHON::add_native(char *name, char *funcname, DataType *, ParmList *) {
void PYTHON::cpp_class_decl(char *name, char *rename, char *type) {
char temp[256];
if (shadow) {
hash.add(name,copy_string(rename));
Setattr(hash,name,rename);
// Add full name of datatype to the hash table
if (strlen(type) > 0) {
sprintf(temp,"%s %s", type, name);
hash.add(temp,copy_string(rename));
Setattr(hash,temp,rename);
}
}
}

View file

@ -35,7 +35,8 @@ protected:
int use_kw;
int noopt;
FILE *f_shadow;
Hash hash;
DOH *hash;
DOH *symbols;
String classes;
String func;
String vars;
@ -68,6 +69,8 @@ public :
import_file = 0;
use_kw = 0;
noopt = 0;
hash = NewHash();
symbols = NewHash();
};
// Don't change any of this

View file

@ -422,7 +422,7 @@ void TCL8::create_command(char *cname, char *iname) {
// Add interpreter name to repeatcmd hash table. This hash is used in C++ code
// generation to try and find repeated wrapper functions.
repeatcmd.add(iname,copy_string(wname));
Setattr(repeatcmd,iname,wname);
}
// ----------------------------------------------------------------------
@ -767,8 +767,6 @@ void TCL8::create_function(char *name, char *iname, DataType *d, ParmList *l)
void TCL8::link_variable(char *name, char *iname, DataType *t)
{
static Hash setget;
String s;
char *tm, *tm1;
@ -782,8 +780,8 @@ void TCL8::link_variable(char *name, char *iname, DataType *t)
}
// Dump a collection of set/get functions suitable for variable tracing
if (!setget.lookup(t->print_type())) {
setget.add(t->print_type(),(void *)1);
if (!Getattr(setget,t->print_type())) {
Setattr(setget,t->print_type(),"1");
WrapperFunction get;
WrapperFunction set;
set.def << "static char *_swig_" << t->print_mangle() << "_set(ClientData clientData, Tcl_Interp *interp, char *name1, char *name2, int flags) {";
@ -1320,7 +1318,7 @@ void TCL8::cpp_member_func(char *name, char *iname, DataType *t, ParmList *l) {
temp = "";
temp << name_member(realname,class_name);
rname = (char *) repeatcmd.lookup(temp);
rname = GetChar(repeatcmd,temp);
if (!rname)
rname = name_wrapper(temp.get(),prefix);
@ -1348,7 +1346,7 @@ void TCL8::cpp_variable(char *name, char *iname, DataType *t) {
// Try to figure out if there is a wrapper for this function
temp = "";
temp << name_get(name_member(realname,bc));
rname = (char *) repeatcmd.lookup(temp);
rname = GetChar(repeatcmd,temp);
if (!rname)
rname = name_wrapper(temp.get(),prefix);
attributes << rname << ", ";
@ -1356,7 +1354,7 @@ void TCL8::cpp_variable(char *name, char *iname, DataType *t) {
if (!(Status & STAT_READONLY)) {
temp = "";
temp << name_set(name_member(realname,bc));
rname = (char *) repeatcmd.lookup(temp);
rname = GetChar(repeatcmd,temp);
if (!rname)
rname = name_wrapper(temp.get(),prefix);
attributes << rname << "},\n";
@ -1409,15 +1407,15 @@ void TCL8::add_typedef(DataType *t, char *name) {
// First check to see if there aren't too many pointers
if (t->is_pointer > 1) return;
if (hash.lookup(name)) return; // Already added
if (Getattr(hash,name)) return; // Already added
// Now look up the datatype in our shadow class hash table
if (hash.lookup(t->name)) {
if (Getattr(hash,t->name)) {
// Yep. This datatype is in the hash
// Put this types 'new' name into the hash
hash.add(name,copy_string((char *) hash.lookup(t->name)));
Setattr(hash,name,GetChar(hash,t->name));
}
}
@ -1433,11 +1431,11 @@ void TCL8::cpp_class_decl(char *name, char *rename, char *type) {
this->Language::cpp_class_decl(name,rename, type);
if (shadow) {
hash.add(name,copy_string(rename));
Setattr(hash,name,rename);
// Add full name of datatype to the hash table
if (strlen(type) > 0) {
sprintf(temp,"%s %s", type, name);
hash.add(temp,copy_string(rename));
Setattr(hash,temp,rename);
}
}
}

View file

@ -48,8 +48,9 @@ private:
char *class_type;
char *real_classname;
char *base_class;
Hash hash;
Hash repeatcmd;
DOH *hash;
DOH *repeatcmd;
DOH *setget;
public :
TCL8() {
@ -65,6 +66,9 @@ public :
class_type = 0;
real_classname = 0;
base_class = 0;
hash = NewHash();
repeatcmd = NewHash();
setget = NewHash();
};
virtual void parse_args(int, char *argv[]);
virtual void parse();