[Top][All Lists]
[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);