static void
push_function(int scope, int method, char *oid, char *id, char *onerror,
- GString *cbuf,int line_no, int ccode_line, int vararg)
+ GString *cbuf, int line_no, int ccode_line, gboolean vararg,
+ GList *flags)
{
Node *node;
Type *type;
} else
c_cbuf = NULL;
- node = new_method(scope,method,type,oid,gtktypes,id,funcargs,
- onerror,c_cbuf,line_no,ccode_line,vararg);
+ node = new_method(scope, method, type, oid, gtktypes, flags,
+ id, funcargs, onerror, c_cbuf, line_no,
+ ccode_line, vararg);
if(cbuf)
g_string_free(cbuf,
%token ONERROR
%token <id> TOKEN NUMBER TYPETOKEN ARRAY_DIM
-%token <cbuf> CCODE HTCODE PHCODE HCODE
+%token <cbuf> CCODE HTCODE PHCODE HCODE ACODE ATCODE
%token <line> PUBLIC PRIVATE PROTECTED ARGUMENT VIRTUAL SIGNAL OVERRIDE
%%
nodes = g_list_append(nodes,node);
g_string_free($<cbuf>1,FALSE);
}
+ | ACODE {
+ Node *node = new_ccode(A_CCODE,($<cbuf>1)->str,
+ ccode_line);
+ nodes = g_list_append(nodes,node);
+ g_string_free($<cbuf>1,FALSE);
+ }
+ | ATCODE {
+ Node *node = new_ccode(AT_CCODE,($<cbuf>1)->str,
+ ccode_line);
+ nodes = g_list_append(nodes,node);
+ g_string_free($<cbuf>1,FALSE);
+ }
;
ccodes: ccodes ccode { ; }
push_variable($<id>3,the_scope,$<line>1,$<id>4);
}
;
-argument: ARGUMENT argflags argtype TOKEN TOKEN '{' CCODE TOKEN '{' CCODE ';' {
+argument: ARGUMENT flags argtype TOKEN TOKEN '{' CCODE TOKEN '{' CCODE ';' {
if(strcmp($<id>5,"get")==0 &&
strcmp($<id>8,"set")==0) {
Node *node;
YYERROR;
}
}
- | ARGUMENT argflags argtype TOKEN TOKEN '{' CCODE ';' {
+ | ARGUMENT flags argtype TOKEN TOKEN '{' CCODE ';' {
if(strcmp($<id>5,"get")==0) {
Node *node;
Type *type = pop_type();
}
;
-argflags: '(' flaglist ')' { $<list>$ = $<list>2; }
+flags: '(' flaglist ')' { $<list>$ = $<list>2; }
| { $<list>$ = NULL; }
;
;
/*here CCODE will include the ending '}' */
-method: SIGNAL fullsigtype type TOKEN '(' funcargs ')' onerror codenocode {
+method: SIGNAL flags fullsigtype type TOKEN '(' funcargs ')' onerror codenocode {
if(!has_self) {
yyerror(_("signal without 'self' as "
"first parameter"));
YYERROR;
}
- push_function(the_scope, $<sigtype>2,NULL,
- $<id>4, $<id>8, $<cbuf>9,$<line>1,
- ccode_line,vararg);
+ push_function(the_scope, $<sigtype>3,NULL,
+ $<id>5, $<id>9, $<cbuf>10,$<line>1,
+ ccode_line, vararg, $<list>2);
}
- | scope SIGNAL simplesigtype type TOKEN '(' funcargs ')' onerror codenocode {
+ | scope SIGNAL flags simplesigtype type TOKEN '(' funcargs ')' onerror codenocode {
if(!has_self) {
yyerror(_("signal without 'self' as "
"first parameter"));
YYERROR;
}
- push_function(the_scope, $<sigtype>3,NULL,
- $<id>5, $<id>9, $<cbuf>10,$<line>2,
- ccode_line,vararg);
+ push_function(the_scope, $<sigtype>4, NULL,
+ $<id>6, $<id>10, $<cbuf>11, $<line>2,
+ ccode_line, vararg, $<list>3);
}
| VIRTUAL scope type TOKEN '(' funcargs ')' onerror codenocode {
if(!has_self) {
YYERROR;
}
push_function(the_scope, VIRTUAL_METHOD, NULL, $<id>4,
- $<id>8, $<cbuf>9,$<line>1,
- ccode_line,vararg);
+ $<id>8, $<cbuf>9, $<line>1,
+ ccode_line, vararg, NULL);
}
| scope VIRTUAL type TOKEN '(' funcargs ')' onerror codenocode {
if(!has_self) {
YYERROR;
}
push_function(the_scope, VIRTUAL_METHOD, NULL, $<id>4,
- $<id>8, $<cbuf>9,$<line>2,
- ccode_line,vararg);
+ $<id>8, $<cbuf>9, $<line>2,
+ ccode_line, vararg, NULL);
}
| VIRTUAL type TOKEN '(' funcargs ')' onerror codenocode {
if(!has_self) {
YYERROR;
}
push_function(PUBLIC_SCOPE, VIRTUAL_METHOD, NULL,
- $<id>3, $<id>7, $<cbuf>8,$<line>1,
- ccode_line,vararg);
+ $<id>3, $<id>7, $<cbuf>8, $<line>1,
+ ccode_line, vararg, NULL);
}
| OVERRIDE '(' TYPETOKEN ')' type TOKEN '(' funcargs ')' onerror codenocode {
push_function(NO_SCOPE, OVERRIDE_METHOD, $<id>3,
$<id>6, $<id>10, $<cbuf>11,
- $<line>1,ccode_line,
- vararg);
+ $<line>1, ccode_line,
+ vararg, NULL);
}
| scope type TOKEN '(' funcargs ')' onerror codenocode {
push_function(the_scope, REGULAR_METHOD, NULL, $<id>3,
- $<id>7, $<cbuf>8,$<line>1,ccode_line,
- vararg);
+ $<id>7, $<cbuf>8, $<line>1, ccode_line,
+ vararg, NULL);
}
| TOKEN '(' TOKEN ')' codenocode {
if(strcmp($<id>1,"init")==0) {
push_init_arg($<id>3,FALSE);
push_function(NO_SCOPE, INIT_METHOD, NULL,
- $<id>1, NULL, $<cbuf>5,$<line>2,
- ccode_line,FALSE);
+ $<id>1, NULL, $<cbuf>5, $<line>2,
+ ccode_line, FALSE, NULL);
} else if(strcmp($<id>1,"class_init")==0) {
push_init_arg($<id>3,TRUE);
push_function(NO_SCOPE, CLASS_INIT_METHOD, NULL,
- $<id>1, NULL, $<cbuf>5,$<line>2,
- ccode_line,FALSE);
+ $<id>1, NULL, $<cbuf>5, $<line>2,
+ ccode_line, FALSE, NULL);
} else {
g_free($<id>1);
g_free($<id>3);