Fix memory leak in SWIG's parser (based on patch from Russell
Bryant in SF#1914023).` git-svn-id: https://swig.svn.sourceforge.net/svnroot/swig/trunk@10310 626c5289-ae23-0410-ae9c-e8d60b6d4f22
This commit is contained in:
parent
6f497c2807
commit
f881f98daf
4 changed files with 13 additions and 6 deletions
|
|
@ -1,6 +1,10 @@
|
||||||
Version 1.3.35 (in progress)
|
Version 1.3.35 (in progress)
|
||||||
============================
|
============================
|
||||||
|
|
||||||
|
03/17/2008: olly
|
||||||
|
Fix memory leak in SWIG's parser (based on patch from Russell
|
||||||
|
Bryant in SF#1914023).`
|
||||||
|
|
||||||
03/12/2008: wsfulton
|
03/12/2008: wsfulton
|
||||||
Fix bug #1878285 - unnecessary cast for C struct creation wrappers.
|
Fix bug #1878285 - unnecessary cast for C struct creation wrappers.
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -226,7 +226,6 @@ void Preprocessor_expr_init(void) {
|
||||||
}
|
}
|
||||||
|
|
||||||
void Preprocessor_expr_delete(void) {
|
void Preprocessor_expr_delete(void) {
|
||||||
Scanner_clear(scan);
|
|
||||||
DelScanner(scan);
|
DelScanner(scan);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -44,7 +44,7 @@ Scanner *NewScanner() {
|
||||||
s->nexttoken = -1;
|
s->nexttoken = -1;
|
||||||
s->start_line = 1;
|
s->start_line = 1;
|
||||||
s->yylen = 0;
|
s->yylen = 0;
|
||||||
s->idstart = "";
|
s->idstart = NULL;
|
||||||
s->scanobjs = NewList();
|
s->scanobjs = NewList();
|
||||||
s->text = NewStringEmpty();
|
s->text = NewStringEmpty();
|
||||||
s->str = 0;
|
s->str = 0;
|
||||||
|
|
@ -66,6 +66,7 @@ void DelScanner(Scanner * s) {
|
||||||
Delete(s->file);
|
Delete(s->file);
|
||||||
Delete(s->error);
|
Delete(s->error);
|
||||||
Delete(s->str);
|
Delete(s->str);
|
||||||
|
free(s->idstart);
|
||||||
free(s);
|
free(s);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
@ -170,7 +171,8 @@ int Scanner_start_line(Scanner * s) {
|
||||||
* Change the set of additional characters that can be used to start an identifier.
|
* Change the set of additional characters that can be used to start an identifier.
|
||||||
* ----------------------------------------------------------------------------- */
|
* ----------------------------------------------------------------------------- */
|
||||||
|
|
||||||
void Scanner_idstart(Scanner * s, char *id) {
|
void Scanner_idstart(Scanner * s, const char *id) {
|
||||||
|
free(s->idstart);
|
||||||
s->idstart = Swig_copy_string(id);
|
s->idstart = Swig_copy_string(id);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
@ -421,7 +423,8 @@ static int look(Scanner * s) {
|
||||||
|
|
||||||
/* Look for possible identifiers */
|
/* Look for possible identifiers */
|
||||||
|
|
||||||
else if ((isalpha(c)) || (c == '_') || (strchr(s->idstart, c)))
|
else if ((isalpha(c)) || (c == '_') ||
|
||||||
|
(s->idstart && strchr(s->idstart, c)))
|
||||||
state = 7;
|
state = 7;
|
||||||
|
|
||||||
/* Look for single character symbols */
|
/* Look for single character symbols */
|
||||||
|
|
@ -640,7 +643,8 @@ static int look(Scanner * s) {
|
||||||
Setline(s->text, Getline(s->str));
|
Setline(s->text, Getline(s->str));
|
||||||
Setfile(s->text, Getfile(s->str));
|
Setfile(s->text, Getfile(s->str));
|
||||||
s->start_line = s->line;
|
s->start_line = s->line;
|
||||||
} else if (strchr(s->idstart, '%') && ((isalpha(c)) || (c == '_'))) {
|
} else if (s->idstart && strchr(s->idstart, '%') &&
|
||||||
|
((isalpha(c)) || (c == '_'))) {
|
||||||
state = 7;
|
state = 7;
|
||||||
} else if (c == '=') {
|
} else if (c == '=') {
|
||||||
return SWIG_TOKEN_MODEQUAL;
|
return SWIG_TOKEN_MODEQUAL;
|
||||||
|
|
|
||||||
|
|
@ -24,7 +24,7 @@ extern void Scanner_set_location(Scanner *, String *file, int line);
|
||||||
extern String *Scanner_file(Scanner *);
|
extern String *Scanner_file(Scanner *);
|
||||||
extern int Scanner_line(Scanner *);
|
extern int Scanner_line(Scanner *);
|
||||||
extern int Scanner_start_line(Scanner *);
|
extern int Scanner_start_line(Scanner *);
|
||||||
extern void Scanner_idstart(Scanner *, char *idchar);
|
extern void Scanner_idstart(Scanner *, const char *idchar);
|
||||||
extern String *Scanner_errmsg(Scanner *);
|
extern String *Scanner_errmsg(Scanner *);
|
||||||
extern int Scanner_errline(Scanner *);
|
extern int Scanner_errline(Scanner *);
|
||||||
extern int Scanner_isoperator(int tokval);
|
extern int Scanner_isoperator(int tokval);
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue