commit-gnue
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

gnue/geas/src/classdef parse.y


From: Reinhard Mueller
Subject: gnue/geas/src/classdef parse.y
Date: Wed, 21 Nov 2001 16:57:44 -0500

CVSROOT:        /cvsroot/gnue
Module name:    gnue
Changes by:     Reinhard Mueller <address@hidden>       01/11/21 16:57:44

Modified files:
        geas/src/classdef: parse.y 

Log message:
        Implemented fully qualified fieldnames in explicit references and lists.

CVSWeb URLs:
http://savannah.gnu.org/cgi-bin/viewcvs/gnue/gnue/geas/src/classdef/parse.y.diff?tr1=1.25&tr2=1.26&r1=text&r2=text

Patches:
Index: gnue/geas/src/classdef/parse.y
diff -u gnue/geas/src/classdef/parse.y:1.25 gnue/geas/src/classdef/parse.y:1.26
--- gnue/geas/src/classdef/parse.y:1.25 Wed Nov 21 16:41:58 2001
+++ gnue/geas/src/classdef/parse.y      Wed Nov 21 16:57:43 2001
@@ -19,7 +19,7 @@
    along with GEAS; if not, write to the Free Software Foundation, Inc.,
    59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
 
-   $Id: parse.y,v 1.25 2001/11/21 21:41:58 reinhard Exp $
+   $Id: parse.y,v 1.26 2001/11/21 21:57:43 reinhard Exp $
 */
 
 %{
@@ -71,7 +71,8 @@
 static geas_cd_module *_find_module (const gchar *name);
 static geas_cd_class  *_find_class  (geas_cd_module *module, const gchar 
*name);
 static geas_cd_type   *_find_type   (geas_cd_module *module, const gchar 
*name);
-static geas_cd_field  *_find_field  (geas_cd_class *clss, const gchar *name);
+static geas_cd_field  *_find_field  (geas_cd_class *clss,
+                                     geas_cd_module *module, const gchar 
*name);
 
 static void _set_type_type (geas_cd_type *type);
 static void _set_type_ref  (geas_cd_class *clss);
@@ -270,17 +271,28 @@
 ;
 
 thisfield:  SYMBOL                      {
-                                          $$ = _find_field (NULL, $1);
+                                          $$ = _find_field (NULL, NULL, $1);
                                           g_free ($1);
                                           if (!$$) YYERROR;
                                         }
+  |         moduleref ':' ':' SYMBOL    {
+                                          $$ = _find_field (NULL, $1, $4);
+                                          g_free ($4);
+                                          if (!$$) YYERROR;
+                                        }
 ;
 
 otherfield: classref '.' SYMBOL         {
-                                          $$ = _find_field ($1, $3);
+                                          $$ = _find_field ($1, NULL, $3);
                                           g_free ($3);
                                           if (!$$) YYERROR;
                                         }
+  |         classref '.' moduleref ':' ':' SYMBOL
+                                        {
+                                          $$ = _find_field ($1, $3, $6);
+                                          g_free ($6);
+                                          if (!$$) YYERROR;
+                                        }
 ;
 
 reference:  elemname WHERE otherfield '=' thisfield
@@ -797,7 +809,7 @@
  * Reference to a field
 \* ------------------------------------------------------------------------- */
 static geas_cd_field *
-_find_field (geas_cd_class *clss, const gchar *name)
+_find_field (geas_cd_class *clss, geas_cd_module *module, const gchar *name)
 {
   geas_cd_field *result;
 
@@ -808,17 +820,15 @@
       break;
 
     case 2:
-      if (clss)
+      if (!clss)
         {
-          /* FIXME: Should allow fully qualified name */
-          result = geas_cd_class_find_field (clss, _current_module, name);
+          clss = _current_class;
         }
-      else
+      if (!module)
         {
-          /* FIXME: Should allow fully qualified name */
-          result = geas_cd_class_find_field (_current_class, _current_module,
-                                             name);
+          module = _current_module;
         }
+      result = geas_cd_class_find_field (clss, module, name);
       if (!result)
         {
           yyerror ("unknown field '%s'", name);



reply via email to

[Prev in Thread] Current Thread [Next in Thread]