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:
parent
760aa597c5
commit
e6595219a4
2 changed files with 20 additions and 10 deletions
|
|
@ -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());
|
||||
|
|
|
|||
|
|
@ -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");
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue