Fix for virtual

git-svn-id: https://swig.svn.sourceforge.net/svnroot/swig/trunk/SWIG@991 626c5289-ae23-0410-ae9c-e8d60b6d4f22
This commit is contained in:
Dave Beazley 2001-01-10 22:29:21 +00:00
commit e6595219a4
2 changed files with 20 additions and 10 deletions

View file

@ -352,7 +352,7 @@ yylex1(void) {
if (strcmp(yytext,"public") == 0) return(PUBLIC);
if (strcmp(yytext,"protected") == 0) return(PROTECTED);
if (strcmp(yytext,"friend") == 0) return(FRIEND);
if (strcmp(yytext,"virtual") == 0) return(lparse_yylex());
if (strcmp(yytext,"virtual") == 0) return(VIRTUAL);
if (strcmp(yytext,"operator") == 0) return(OPERATOR);
if (strcmp(yytext,"throw") == 0) return(THROW);
if (strcmp(yytext,"inline") == 0) return(lparse_yylex());

View file

@ -223,7 +223,7 @@ static int promote(int t1, int t2) {
%token <tok> CONST ENUM EXTERN SIZEOF STATIC STRUCT TYPEDEF UNION
/* C++ keywords */
%token <tok> CLASS FRIEND OPERATOR PRIVATE PROTECTED PUBLIC TEMPLATE THROW
%token <tok> VIRTUAL CLASS FRIEND OPERATOR PRIVATE PROTECTED PUBLIC TEMPLATE THROW
/* Objective C keywords */
%token <tok> OC_INTERFACE OC_END OC_PUBLIC OC_PRIVATE OC_PROTECTED OC_CLASS OC_IMPLEMENT OC_PROTOCOL
@ -890,20 +890,26 @@ function_decl : storage_spec type declaration LPAREN parms RPAREN cpp_const sta
}
/* A C++ destructor */
| NOT ID LPAREN parms RPAREN cpp_end {
$$ = new_node("c:destructor",$2.filename,$2.line);
Setattr($$,ATTR_NAME,$2.text);
if ($6.text) {
Setattr($$,"code",$6.text);
| storage_spec NOT ID LPAREN parms RPAREN cpp_end {
$$ = new_node("c:destructor",$3.filename,$3.line);
Setattr($$,ATTR_NAME,$3.text);
if ($7.text) {
Setattr($$,"code",$7.text);
}
if (pure_virtual) {
SetInt($$,"abstract",1);
pure_virtual = 0;
}
if ($1.ivalue) {
Setattr($$,ATTR_STORAGE,$1.text);
}
}
| NOT ID LPAREN parms RPAREN cpp_const SEMI {
$$ = new_node("c:destructor",$2.filename,$2.line);
Setattr($$,ATTR_NAME,$2.text);
| storage_spec NOT ID LPAREN parms RPAREN cpp_const SEMI {
$$ = new_node("c:destructor",$3.filename,$3.line);
Setattr($$,ATTR_NAME,$3.text);
if ($1.ivalue) {
Setattr($$,ATTR_STORAGE,$1.text);
}
}
;
@ -942,6 +948,10 @@ storage_spec : EXTERN {
$$.ivalue = 1;
$$.text = NewStringf("extern \"%s\"", $2.text);
}
| VIRTUAL {
$$.ivalue = 1;
$$.text = NewString("virtual");
}
| STATIC {
$$.ivalue = 1;
$$.text = NewString("static");