]> git.draconx.ca Git - gob-dx.git/blobdiff - src/parse.y
Release 0.92.4
[gob-dx.git] / src / parse.y
index a6892e9838fa51908d4d4655272088433ddf2eb8..63f0a7a1d21e743c9051b6c571785fe2ed23c3a0 100644 (file)
@@ -104,7 +104,8 @@ push_variable(char *name, int scope, int line_no, char *postfix)
 
 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;
@@ -138,8 +139,9 @@ push_function(int scope, int method, char *oid, char *id, char *onerror,
        } 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,
@@ -212,7 +214,7 @@ push_self(char *id)
 %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
 
 %%
@@ -247,6 +249,18 @@ ccode:             CCODE                   {
                        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            { ; }
@@ -290,7 +304,7 @@ variable:   scope type TOKEN ';'            {
                        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;
@@ -325,7 +339,7 @@ argument:   ARGUMENT argflags argtype TOKEN TOKEN '{' CCODE TOKEN '{' CCODE ';' {
                                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();
@@ -370,7 +384,7 @@ argtype:    TOKEN '(' TOKEN type ')'        {
                                                }
        ;
        
-argflags:      '(' flaglist ')'                { $<list>$ = $<list>2; }
+flags:         '(' flaglist ')'                { $<list>$ = $<list>2; }
        |                                       { $<list>$ = NULL; }
        ;
 
@@ -544,25 +558,25 @@ codenocode:       '{' CCODE                       { $<cbuf>$ = $<cbuf>2; }
        ;
 
 /*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) {
@@ -571,8 +585,8 @@ method:             SIGNAL fullsigtype type TOKEN '(' funcargs ')' onerror codenocode {
                                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) {
@@ -581,8 +595,8 @@ method:             SIGNAL fullsigtype type TOKEN '(' funcargs ')' onerror codenocode {
                                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) {
@@ -591,31 +605,31 @@ method:           SIGNAL fullsigtype type TOKEN '(' funcargs ')' onerror codenocode {
                                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);