Fixes detecting if a variable is extern when using 'extern thread_local'
This commit is contained in:
parent
b725625e6f
commit
7fcfdeee08
5 changed files with 18 additions and 17 deletions
|
|
@ -506,11 +506,6 @@ int CFFI::functionWrapper(Node *n) {
|
||||||
|
|
||||||
|
|
||||||
void CFFI::emit_defun(Node *n, String *name) {
|
void CFFI::emit_defun(Node *n, String *name) {
|
||||||
|
|
||||||
// String *storage=Getattr(n,"storage");
|
|
||||||
// if(!storage || (Strcmp(storage,"extern") && Strcmp(storage,"externc")))
|
|
||||||
// return SWIG_OK;
|
|
||||||
|
|
||||||
String *func_name = Getattr(n, "sym:name");
|
String *func_name = Getattr(n, "sym:name");
|
||||||
|
|
||||||
ParmList *pl = Getattr(n, "parms");
|
ParmList *pl = Getattr(n, "parms");
|
||||||
|
|
@ -583,12 +578,6 @@ int CFFI::constantWrapper(Node *n) {
|
||||||
}
|
}
|
||||||
|
|
||||||
int CFFI::variableWrapper(Node *n) {
|
int CFFI::variableWrapper(Node *n) {
|
||||||
// String *storage=Getattr(n,"storage");
|
|
||||||
// Printf(stdout,"\"%s\" %s)\n",storage,Getattr(n, "sym:name"));
|
|
||||||
|
|
||||||
// if(!storage || (Strcmp(storage,"extern") && Strcmp(storage,"externc")))
|
|
||||||
// return SWIG_OK;
|
|
||||||
|
|
||||||
String *var_name = Getattr(n, "sym:name");
|
String *var_name = Getattr(n, "sym:name");
|
||||||
String *lisp_type = Swig_typemap_lookup("cin", n, "", 0);
|
String *lisp_type = Swig_typemap_lookup("cin", n, "", 0);
|
||||||
String *lisp_name = lispify_name(n, var_name, "'variable");
|
String *lisp_name = lispify_name(n, var_name, "'variable");
|
||||||
|
|
|
||||||
|
|
@ -148,7 +148,7 @@ int CLISP::top(Node *n) {
|
||||||
int CLISP::functionWrapper(Node *n) {
|
int CLISP::functionWrapper(Node *n) {
|
||||||
is_function = 1;
|
is_function = 1;
|
||||||
String *storage = Getattr(n, "storage");
|
String *storage = Getattr(n, "storage");
|
||||||
if (!extern_all_flag && (!storage || (Strcmp(storage, "extern") && Strcmp(storage, "externc"))))
|
if (!extern_all_flag && (!storage || (!Swig_storage_isextern(n) && Strcmp(storage, "externc"))))
|
||||||
return SWIG_OK;
|
return SWIG_OK;
|
||||||
|
|
||||||
String *func_name = Getattr(n, "sym:name");
|
String *func_name = Getattr(n, "sym:name");
|
||||||
|
|
@ -220,7 +220,7 @@ int CLISP::variableWrapper(Node *n) {
|
||||||
// SwigType *type=;
|
// SwigType *type=;
|
||||||
String *storage = Getattr(n, "storage");
|
String *storage = Getattr(n, "storage");
|
||||||
|
|
||||||
if (!extern_all_flag && (!storage || (Strcmp(storage, "extern") && Strcmp(storage, "externc"))))
|
if (!extern_all_flag && (!storage || (!Swig_storage_isextern(n) && Strcmp(storage, "externc"))))
|
||||||
return SWIG_OK;
|
return SWIG_OK;
|
||||||
|
|
||||||
String *var_name = Getattr(n, "sym:name");
|
String *var_name = Getattr(n, "sym:name");
|
||||||
|
|
|
||||||
|
|
@ -955,7 +955,7 @@ int Language::cDeclaration(Node *n) {
|
||||||
|
|
||||||
if (AddExtern) {
|
if (AddExtern) {
|
||||||
if (f_header) {
|
if (f_header) {
|
||||||
if ((Cmp(storage, "extern") == 0) || (ForceExtern && !storage)) {
|
if (Swig_storage_isextern(n) || (ForceExtern && !storage)) {
|
||||||
/* we don't need the 'extern' part in the C/C++ declaration,
|
/* we don't need the 'extern' part in the C/C++ declaration,
|
||||||
and it produces some problems when namespace and SUN
|
and it produces some problems when namespace and SUN
|
||||||
Studio is used.
|
Studio is used.
|
||||||
|
|
@ -1017,12 +1017,12 @@ int Language::cDeclaration(Node *n) {
|
||||||
if (Getattr(n, "nested"))
|
if (Getattr(n, "nested"))
|
||||||
SetFlag(n, "feature:immutable");
|
SetFlag(n, "feature:immutable");
|
||||||
if (!CurrentClass) {
|
if (!CurrentClass) {
|
||||||
if ((Cmp(storage, "extern") == 0) || ForceExtern) {
|
if (Swig_storage_isextern(n) || ForceExtern) {
|
||||||
f_header = Swig_filebyname("header");
|
|
||||||
if (AddExtern) {
|
if (AddExtern) {
|
||||||
|
f_header = Swig_filebyname("header");
|
||||||
if (f_header) {
|
if (f_header) {
|
||||||
String *str = SwigType_str(ty, name);
|
String *str = SwigType_str(ty, name);
|
||||||
Printf(f_header, "extern %s;\n", str);
|
Printf(f_header, "%s %s;\n", Getattr(n, "storage"), str);
|
||||||
Delete(str);
|
Delete(str);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -262,6 +262,17 @@ void Swig_filename_unescape(String *filename) {
|
||||||
#endif
|
#endif
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/* -----------------------------------------------------------------------------
|
||||||
|
* Swig_storage_isextern()
|
||||||
|
*
|
||||||
|
* Determine if the storage class specifier is extern (but not externc)
|
||||||
|
* ----------------------------------------------------------------------------- */
|
||||||
|
|
||||||
|
int Swig_storage_isextern(Node *n) {
|
||||||
|
const String *storage = Getattr(n, "storage");
|
||||||
|
return storage ? Strcmp(storage, "extern") == 0 || Strncmp(storage, "extern ", 7) == 0 : 0;
|
||||||
|
}
|
||||||
|
|
||||||
/* -----------------------------------------------------------------------------
|
/* -----------------------------------------------------------------------------
|
||||||
* Swig_storage_isstatic_custom()
|
* Swig_storage_isstatic_custom()
|
||||||
*
|
*
|
||||||
|
|
|
||||||
|
|
@ -315,6 +315,7 @@ extern int ParmList_is_compactdefargs(ParmList *p);
|
||||||
extern void Swig_filename_correct(String *filename);
|
extern void Swig_filename_correct(String *filename);
|
||||||
extern String *Swig_filename_escape(String *filename);
|
extern String *Swig_filename_escape(String *filename);
|
||||||
extern void Swig_filename_unescape(String *filename);
|
extern void Swig_filename_unescape(String *filename);
|
||||||
|
extern int Swig_storage_isextern(Node *n);
|
||||||
extern int Swig_storage_isstatic_custom(Node *n, const_String_or_char_ptr storage);
|
extern int Swig_storage_isstatic_custom(Node *n, const_String_or_char_ptr storage);
|
||||||
extern int Swig_storage_isstatic(Node *n);
|
extern int Swig_storage_isstatic(Node *n);
|
||||||
extern String *Swig_string_escape(String *s);
|
extern String *Swig_string_escape(String *s);
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue