absyntax/absyntax.hh
changeset 286 a4f4990d5c66
parent 279 c0453b7f99df
child 287 9df7fcb9bde5
--- a/absyntax/absyntax.hh	Tue Apr 05 19:42:33 2011 +0100
+++ b/absyntax/absyntax.hh	Thu Apr 14 17:35:25 2011 +0100
@@ -70,16 +70,15 @@
      */
     int first_line;
     int first_column;
+    const char *first_file;  /* filename referenced by first line/column */
     int last_line;
     int last_column;
+    const char *last_file;  /* filename referenced by last line/column */
 
   public:
     /* default constructor */
-    symbol_c(void);
-    symbol_c(int fl     /* first_line   */, 
-             int fc     /* first_column */,
-             int ll = 0 /* last_line    */,
-             int lc = 0 /* last_column  */
+    symbol_c(int fl = 0, int fc = 0, const char *ffile = NULL /* filename */,
+             int ll = 0, int lc = 0, const char *lfile = NULL /* filename */
             );
 
     /* default destructor */
@@ -96,7 +95,10 @@
     const char *value;
 
   public:
-    token_c(const char *value, int fl = 0, int fc = 0, int ll = 0, int lc = 0);
+    token_c(const char *value, 
+            int fl = 0, int fc = 0, const char *ffile = NULL /* filename */,
+            int ll = 0, int lc = 0, const char *lfile = NULL /* filename */
+           );
 };
 
 
@@ -107,8 +109,14 @@
     symbol_c **elements;
 
   public:
-    list_c(int fl = 0, int fc = 0, int ll = 0, int lc = 0);
-    list_c(symbol_c *elem, int fl = 0, int fc = 0, int ll = 0, int lc = 0);
+    list_c(int fl = 0, int fc = 0, const char *ffile = NULL /* filename */,
+           int ll = 0, int lc = 0, const char *lfile = NULL /* filename */
+          );
+
+    list_c(symbol_c *elem, 
+	   int fl = 0, int fc = 0, const char *ffile = NULL /* filename */,
+           int ll = 0, int lc = 0, const char *lfile = NULL /* filename */
+          );
      /* insert a new element */
     virtual void add_element(symbol_c *elem);
 };
@@ -116,131 +124,138 @@
 
 
 
-#define SYM_LIST(class_name_c)								\
-class class_name_c:	public list_c {							\
-  public:										\
-    class_name_c(int fl = 0, int fc = 0, int ll = 0, int lc = 0);			\
-    class_name_c(symbol_c *elem, int fl = 0, int fc = 0, int ll = 0, int lc = 0);	\
-    virtual void *accept(visitor_c &visitor);						\
-};
-
-
-#define SYM_TOKEN(class_name_c)								\
-class class_name_c: 	public token_c {						\
-  public:										\
-    class_name_c(const char *value, int fl = 0, int fc = 0, int ll = 0, int lc = 0);	\
-    virtual void *accept(visitor_c &visitor);						\
-};
-
-
-#define SYM_REF0(class_name_c)			\
-class class_name_c: public symbol_c {		\
-  public:					\
-    class_name_c(int fl = 0, int fc = 0, 	\
-		 int ll = 0, int lc = 0);	\
-    virtual void *accept(visitor_c &visitor);	\
-};
-
-
-#define SYM_REF1(class_name_c, ref1)			\
-class class_name_c: public symbol_c {			\
-  public:						\
-    symbol_c *ref1;					\
-  public:						\
-    class_name_c(symbol_c *ref1,			\
-		 int fl = 0, int fc = 0, 		\
-		 int ll = 0, int lc = 0);		\
-    virtual void *accept(visitor_c &visitor);		\
-};
-
-
-#define SYM_REF2(class_name_c, ref1, ref2)		\
-class class_name_c: public symbol_c {			\
-  public:						\
-    symbol_c *ref1;					\
-    symbol_c *ref2;					\
-  public:						\
-    class_name_c(symbol_c *ref1,			\
-		 symbol_c *ref2 = NULL,			\
-		 int fl = 0, int fc = 0, 		\
-		 int ll = 0, int lc = 0);		\
-    virtual void *accept(visitor_c &visitor);		\
-};
-
-
-#define SYM_REF3(class_name_c, ref1, ref2, ref3)	\
-class class_name_c: public symbol_c {			\
-  public:						\
-    symbol_c *ref1;					\
-    symbol_c *ref2;					\
-    symbol_c *ref3;					\
-  public:						\
-    class_name_c(symbol_c *ref1,			\
-		 symbol_c *ref2,			\
-		 symbol_c *ref3,			\
-		 int fl = 0, int fc = 0, 		\
-		 int ll = 0, int lc = 0);		\
-    virtual void *accept(visitor_c &visitor);		\
-};
-
-
-#define SYM_REF4(class_name_c, ref1, ref2, ref3, ref4)	\
-class class_name_c: public symbol_c {			\
-  public:						\
-    symbol_c *ref1;					\
-    symbol_c *ref2;					\
-    symbol_c *ref3;					\
-    symbol_c *ref4;					\
-  public:						\
-    class_name_c(symbol_c *ref1,			\
-		 symbol_c *ref2,			\
-		 symbol_c *ref3,			\
-		 symbol_c *ref4 = NULL,			\
-		 int fl = 0, int fc = 0, 		\
-		 int ll = 0, int lc = 0);		\
-    virtual void *accept(visitor_c &visitor);		\
-};
-
-
-#define SYM_REF5(class_name_c, ref1, ref2, ref3, ref4, ref5)		\
-class class_name_c: public symbol_c {					\
-  public:								\
-    symbol_c *ref1;							\
-    symbol_c *ref2;							\
-    symbol_c *ref3;							\
-    symbol_c *ref4;							\
-    symbol_c *ref5;							\
-  public:								\
-    class_name_c(symbol_c *ref1,					\
-		 symbol_c *ref2,					\
-		 symbol_c *ref3,					\
-		 symbol_c *ref4,					\
-		 symbol_c *ref5,					\
-		 int fl = 0, int fc = 0, 				\
-		 int ll = 0, int lc = 0);				\
-    virtual void *accept(visitor_c &visitor);				\
-};
-
-
-#define SYM_REF6(class_name_c, ref1, ref2, ref3, ref4, ref5, ref6)	\
-class class_name_c: public symbol_c {					\
-  public:								\
-    symbol_c *ref1;							\
-    symbol_c *ref2;							\
-    symbol_c *ref3;							\
-    symbol_c *ref4;							\
-    symbol_c *ref5;							\
-    symbol_c *ref6;							\
-  public:								\
-    class_name_c(symbol_c *ref1,					\
-		 symbol_c *ref2,					\
-		 symbol_c *ref3,					\
-		 symbol_c *ref4,					\
-		 symbol_c *ref5,					\
-		 symbol_c *ref6 = NULL,					\
-		 int fl = 0, int fc = 0, 				\
-		 int ll = 0, int lc = 0);				\
-    virtual void *accept(visitor_c &visitor);				\
+#define SYM_LIST(class_name_c)												\
+class class_name_c:	public list_c {											\
+  public:														\
+    class_name_c(													\
+                 int fl = 0, int fc = 0, const char *ffile = NULL /* filename */, 					\
+                 int ll = 0, int lc = 0, const char *lfile = NULL /* filename */);					\
+    class_name_c(symbol_c *elem, 											\
+                 int fl = 0, int fc = 0, const char *ffile = NULL /* filename */, 					\
+                 int ll = 0, int lc = 0, const char *lfile = NULL /* filename */);					\
+    virtual void *accept(visitor_c &visitor);										\
+};
+
+
+#define SYM_TOKEN(class_name_c)												\
+class class_name_c: 	public token_c {										\
+  public:														\
+    class_name_c(const char *value, 											\
+                 int fl = 0, int fc = 0, const char *ffile = NULL /* filename */, 					\
+                 int ll = 0, int lc = 0, const char *lfile = NULL /* filename */);					\
+    virtual void *accept(visitor_c &visitor);										\
+};
+
+
+#define SYM_REF0(class_name_c)												\
+class class_name_c: public symbol_c {											\
+  public:														\
+    class_name_c(		 											\
+                 int fl = 0, int fc = 0, const char *ffile = NULL /* filename */, 					\
+                 int ll = 0, int lc = 0, const char *lfile = NULL /* filename */);					\
+    virtual void *accept(visitor_c &visitor);										\
+};
+
+
+#define SYM_REF1(class_name_c, ref1)											\
+class class_name_c: public symbol_c {											\
+  public:														\
+    symbol_c *ref1;													\
+  public:														\
+    class_name_c(symbol_c *ref1,											\
+                 int fl = 0, int fc = 0, const char *ffile = NULL /* filename */, 					\
+                 int ll = 0, int lc = 0, const char *lfile = NULL /* filename */);					\
+    virtual void *accept(visitor_c &visitor);										\
+};
+
+
+#define SYM_REF2(class_name_c, ref1, ref2)										\
+class class_name_c: public symbol_c {											\
+  public:														\
+    symbol_c *ref1;													\
+    symbol_c *ref2;													\
+  public:														\
+    class_name_c(symbol_c *ref1,											\
+		 symbol_c *ref2 = NULL,											\
+                 int fl = 0, int fc = 0, const char *ffile = NULL /* filename */, 					\
+                 int ll = 0, int lc = 0, const char *lfile = NULL /* filename */);					\
+    virtual void *accept(visitor_c &visitor);										\
+};
+
+
+#define SYM_REF3(class_name_c, ref1, ref2, ref3)									\
+class class_name_c: public symbol_c {											\
+  public:														\
+    symbol_c *ref1;													\
+    symbol_c *ref2;													\
+    symbol_c *ref3;													\
+  public:														\
+    class_name_c(symbol_c *ref1,											\
+		 symbol_c *ref2,											\
+		 symbol_c *ref3,											\
+                 int fl = 0, int fc = 0, const char *ffile = NULL /* filename */, 					\
+                 int ll = 0, int lc = 0, const char *lfile = NULL /* filename */);					\
+    virtual void *accept(visitor_c &visitor);										\
+};
+
+
+#define SYM_REF4(class_name_c, ref1, ref2, ref3, ref4)									\
+class class_name_c: public symbol_c {											\
+  public:														\
+    symbol_c *ref1;													\
+    symbol_c *ref2;													\
+    symbol_c *ref3;													\
+    symbol_c *ref4;													\
+  public:														\
+    class_name_c(symbol_c *ref1,											\
+		 symbol_c *ref2,											\
+		 symbol_c *ref3,											\
+		 symbol_c *ref4 = NULL,											\
+                 int fl = 0, int fc = 0, const char *ffile = NULL /* filename */, 					\
+                 int ll = 0, int lc = 0, const char *lfile = NULL /* filename */);					\
+    virtual void *accept(visitor_c &visitor);										\
+};
+
+
+#define SYM_REF5(class_name_c, ref1, ref2, ref3, ref4, ref5)								\
+class class_name_c: public symbol_c {											\
+  public:														\
+    symbol_c *ref1;													\
+    symbol_c *ref2;													\
+    symbol_c *ref3;													\
+    symbol_c *ref4;													\
+    symbol_c *ref5;													\
+  public:														\
+    class_name_c(symbol_c *ref1,											\
+		 symbol_c *ref2,											\
+		 symbol_c *ref3,											\
+		 symbol_c *ref4,											\
+		 symbol_c *ref5,											\
+                 int fl = 0, int fc = 0, const char *ffile = NULL /* filename */, 					\
+                 int ll = 0, int lc = 0, const char *lfile = NULL /* filename */);					\
+    virtual void *accept(visitor_c &visitor);										\
+};
+
+
+#define SYM_REF6(class_name_c, ref1, ref2, ref3, ref4, ref5, ref6)							\
+class class_name_c: public symbol_c {											\
+  public:														\
+    symbol_c *ref1;													\
+    symbol_c *ref2;													\
+    symbol_c *ref3;													\
+    symbol_c *ref4;													\
+    symbol_c *ref5;													\
+    symbol_c *ref6;													\
+  public:														\
+    class_name_c(symbol_c *ref1,											\
+		 symbol_c *ref2,											\
+		 symbol_c *ref3,											\
+		 symbol_c *ref4,											\
+		 symbol_c *ref5,											\
+		 symbol_c *ref6 = NULL,											\
+                 int fl = 0, int fc = 0, const char *ffile = NULL /* filename */, 					\
+                 int ll = 0, int lc = 0, const char *lfile = NULL /* filename */);					\
+    virtual void *accept(visitor_c &visitor);										\
 };