Seems the question has been solved, here is the changes of
treelang/parse.y, just for fun :-)

$ diff treelang/parse.y treelang/parse_new.y -u
--- treelang/parse.y    2004-01-08 15:50:46.000000000 +0800
+++ treelang/parse_new.y        2006-04-13 18:00:34.390625000 +0800
@@ -48,6 +48,7 @@
 #include "tm.h"
 #include "diagnostic.h"
 #include "timevar.h"
+#include "tree.h"

 #include "treelang.h"
 #include "treetree.h"
@@ -182,7 +183,7 @@
 ;

 variable_def:
-storage typename NAME init_opt SEMICOLON {
+storage_opt typename NAME init_opt SEMICOLON {
   struct prod_token_parm_item* tok;
   struct prod_token_parm_item *prod;
   tok = $3;
@@ -225,6 +226,15 @@
 }
 ;

+storage_opt:
+/* Nil.   */ {
+  $$ = 0;
+}
+|storage {
+  $$ = $1;
+}
+;
+
 storage:
 STATIC
 |AUTOMATIC
@@ -254,7 +264,7 @@
 ;

 function_prototype:
-storage typename NAME LEFT_PARENTHESIS parameters RIGHT_PARENTHESIS SEMICOLON

+storage_opt typename NAME LEFT_PARENTHESIS parameters RIGHT_PARENTHESIS SEMIC
ON {
   struct prod_token_parm_item* tok;
   struct prod_token_parm_item *prod;
   struct prod_token_parm_item *type;
@@ -951,6 +961,11 @@
 {
   struct prod_token_parm_item* stg_class;
   stg_class = STORAGE_CLASS_TOKEN (prod);
+  if(stg_class==NULL_TREE)
+  {
+    STORAGE_CLASS (prod) = EXTERNAL_DEFINITION_STORAGE;
+    return;
+  }
   switch (stg_class->type)
     {
     case STATIC:

Reply via email to