Index: src/parse.c
===================================================================
--- src/parse.c	(révision 421)
+++ src/parse.c	(copie de travail)
@@ -270,20 +270,23 @@
 static struct node *
 parsenullabletype(struct tok *tok)
 {
-    struct node *node = newelement("Type");
+  struct node *node;
     switch (tok->type) {
     case TOK_unsigned:
     case TOK_short:
     case TOK_long:
+        node = newelement("Type");
         addnode(node, newattr("type", parseunsignedintegertype(tok)));
         break;
     case TOK_sequence:
+        node = newelement("Sequence");
         lexnocomment();
         eat(tok, '<');
         addnode(node, parsetype(tok));
         eat(tok, '>');
         break;
     default:
+        node = newelement("Type");
         switch (tok->type) {
         default:
             tokerrorexit(tok, "expected type");
@@ -345,6 +348,12 @@
         node = parsenullabletype(tok);
         break;
     }
+    while (tok->type == TOK_DOUBLEBRACKET) {
+        struct node *typenode = node;
+	node = newelement("Array");
+        addnode(node, typenode);
+        lexnocomment();
+    }
     return node;
 }
 
@@ -640,7 +649,22 @@
     setcommentnode(node);
     if (eal) addnode(node, eal);
     tok = lexnocomment();
-    addnode(node, parsetype(tok));
+    switch(tok->type) {
+    case TOK_boolean:
+    case TOK_byte:
+    case TOK_octet:
+    case TOK_float:
+    case TOK_double:
+    case TOK_DOMString:
+    case TOK_unsigned:
+    case TOK_short:
+    case TOK_long:
+        addnode(node, parsetype(tok));
+	break;
+    default:
+        tokerrorexit(tok, "expected acceptable constant type");
+        break;
+    }
     addnode(node, newattr("name", setidentifier(tok)));
     tok = lexnocomment();
     eat(tok, '=');
@@ -649,6 +673,7 @@
     case TOK_false:
     case TOK_INTEGER:
     case TOK_FLOAT:
+    case TOK_STRING:
         break;
     default:
         tokerrorexit(tok, "expected constant value");
Index: src/lex.c
===================================================================
--- src/lex.c	(révision 421)
+++ src/lex.c	(copie de travail)
@@ -418,6 +418,14 @@
             }
             goto done;
         }
+        if (ch == '[') {
+            tok.type = '[';
+            if (*++p == ']') {
+                tok.type = TOK_DOUBLEBRACKET;
+                p++;
+            }
+            goto done;
+        }
     }
     /* Single symbol token. */
     tok.type = ch;
Index: src/lex.h
===================================================================
--- src/lex.h	(révision 421)
+++ src/lex.h	(copie de travail)
@@ -22,6 +22,7 @@
     "any\0" \
     "attribute\0" \
     "boolean\0" \
+    "byte\0" \
     "caller\0" \
     "const\0" \
     "creator\0" \
@@ -56,7 +57,7 @@
     TOK_EOF = -1,
     TOK_BLOCKCOMMENT = 0x80,
     TOK_INLINECOMMENT, TOK_INTEGER, TOK_FLOAT, TOK_IDENTIFIER,
-    TOK_STRING, TOK_DOUBLECOLON, TOK_ELLIPSIS,
+    TOK_STRING, TOK_DOUBLECOLON, TOK_ELLIPSIS, TOK_DOUBLEBRACKET,
     /* Keywords must be in the same order as above. */
     TOK_DOMString,
     TOK_false,
@@ -65,6 +66,7 @@
     TOK_any,
     TOK_attribute,
     TOK_boolean,
+    TOK_byte,
     TOK_caller,
     TOK_const,
     TOK_creator,

