struct elem_attr {
                int     attr;
                char    *val;
+               int     intval;
        }                       attr;
 }
 
                *type = $2.attr == TYPE ? $2.val :
                                $4.attr == TYPE ? $4.val :
                                $5.attr == TYPE ? $5.val : NULL;
-       int     prefix = $2.attr == PREFIX ? (int) $2.val :
-                               $4.attr == PREFIX ? (int) $4.val :
-                               $5.attr == PREFIX ? (int) $5.val : 0;
+       int     prefix = $2.attr == PREFIX ? $2.intval :
+                               $4.attr == PREFIX ? $4.intval :
+                               $5.attr == PREFIX ? $5.intval : 0;
 
 
        if (!name) bailout("`name' required");
 
 elem_attr      : TYPE '=' string       { $$.attr = TYPE; $$.val = $3; }
                | NAME '=' string       { $$.attr = NAME; $$.val = $3; }
-               | PREFIX '=' int        { $$.attr = PREFIX; $$.val = (char *) $3; }
+               | PREFIX '=' int        { $$.attr = PREFIX; $$.intval = $3; }
                ;
 
 opt_elem_attr  :       { $$.attr = 0; $$.val = NULL; }