oops, should actually include the new patch in the repo!
[debian/as31] / debian / patches / regenerate_parser.c
diff --git a/debian/patches/regenerate_parser.c b/debian/patches/regenerate_parser.c
new file mode 100644 (file)
index 0000000..9aa5b05
--- /dev/null
@@ -0,0 +1,3852 @@
+diff --git a/as31/parser.c b/as31/parser.c
+index dd388a9..53a9c8f 100644
+--- a/as31/parser.c
++++ b/as31/parser.c
+@@ -1,30 +1,37 @@
+-/* A Bison parser, made by GNU Bison 1.875d.  */
++/* A Bison parser, made by GNU Bison 2.5.  */
+-/* Skeleton parser for Yacc-like parsing with Bison,
+-   Copyright (C) 1984, 1989, 1990, 2000, 2001, 2002, 2003, 2004 Free Software Foundation, Inc.
+-
+-   This program is free software; you can redistribute it and/or modify
++/* Bison implementation for Yacc-like parsers in C
++   
++      Copyright (C) 1984, 1989-1990, 2000-2011 Free Software Foundation, Inc.
++   
++   This program is free software: you can redistribute it and/or modify
+    it under the terms of the GNU General Public License as published by
+-   the Free Software Foundation; either version 2, or (at your option)
+-   any later version.
+-
++   the Free Software Foundation, either version 3 of the License, or
++   (at your option) any later version.
++   
+    This program is distributed in the hope that it will be useful,
+    but WITHOUT ANY WARRANTY; without even the implied warranty of
+    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+    GNU General Public License for more details.
+-
++   
+    You should have received a copy of the GNU General Public License
+-   along with this program; if not, write to the Free Software
+-   Foundation, Inc., 59 Temple Place - Suite 330,
+-   Boston, MA 02111-1307, USA.  */
+-
+-/* As a special exception, when this file is copied by Bison into a
+-   Bison output file, you may use that output file without restriction.
+-   This special exception was added by the Free Software Foundation
+-   in version 1.24 of Bison.  */
+-
+-/* Written by Richard Stallman by simplifying the original so called
+-   ``semantic'' parser.  */
++   along with this program.  If not, see <http://www.gnu.org/licenses/>.  */
++
++/* As a special exception, you may create a larger work that contains
++   part or all of the Bison parser skeleton and distribute that work
++   under terms of your choice, so long as that work isn't itself a
++   parser generator using the skeleton or a modified version thereof
++   as a parser skeleton.  Alternatively, if you modify or redistribute
++   the parser skeleton itself, you may (at your option) remove this
++   special exception, which will cause the skeleton and the resulting
++   Bison output files to be licensed under the GNU General Public
++   License without this special exception.
++   
++   This special exception was added by the Free Software Foundation in
++   version 2.2 of Bison.  */
++
++/* C LALR(1) parser skeleton written by Richard Stallman, by
++   simplifying the original so-called "semantic" parser.  */
+ /* All symbols defined below should begin with yy or YY, to avoid
+    infringing on user name space.  This should be done even for local
+@@ -36,17 +43,80 @@
+ /* Identify Bison output.  */
+ #define YYBISON 1
++/* Bison version.  */
++#define YYBISON_VERSION "2.5"
++
+ /* Skeleton name.  */
+ #define YYSKELETON_NAME "yacc.c"
+ /* Pure parsers.  */
+ #define YYPURE 0
++/* Push parsers.  */
++#define YYPUSH 0
++
++/* Pull parsers.  */
++#define YYPULL 1
++
+ /* Using locations.  */
+ #define YYLSP_NEEDED 0
++/* Copy the first part of user declarations.  */
++
++/* Line 268 of yacc.c  */
++#line 21 "parser.y"
++
++
++#include <stdio.h>
++#include <stdlib.h>
++
++#define NOPE
++#include "as31.h"
++#undef NOPE
++
++#define YYSTYPE union ystack
++
++static unsigned char bytebuf[1024];           /* used by dumplist() */
++static int bytecount;
++
++
++void yyerror(const char *s);
++int makeop(struct opcode * op, struct mode *m, int add);
++void inclc(int i);
++char *padline(char *line);
++void dumplist(char *txt, int show);
++void genbyte(int b);
++void genstr(const char *s);
++void genword(unsigned long w);
++
++/* ------------------------ G R A M M E R ----------------------------- */
++
++
++
++/* Line 268 of yacc.c  */
++#line 100 "y.tab.c"
++
++/* Enabling traces.  */
++#ifndef YYDEBUG
++# define YYDEBUG 0
++#endif
++
++/* Enabling verbose error messages.  */
++#ifdef YYERROR_VERBOSE
++# undef YYERROR_VERBOSE
++# define YYERROR_VERBOSE 1
++#else
++# define YYERROR_VERBOSE 0
++#endif
++
++/* Enabling the token table.  */
++#ifndef YYTOKEN_TABLE
++# define YYTOKEN_TABLE 0
++#endif
++
++
+ /* Tokens.  */
+ #ifndef YYTOKENTYPE
+ # define YYTOKENTYPE
+@@ -123,6 +193,7 @@
+      SYMBOL = 325
+    };
+ #endif
++/* Tokens.  */
+ #define STRING 258
+ #define D_ORG 259
+ #define D_BYTE 260
+@@ -195,113 +266,184 @@
+-/* Copy the first part of user declarations.  */
+-#line 21 "parser.y"
+-
+-
+-#include <stdio.h>
+-#include <stdlib.h>
+-
+-#define NOPE
+-#include "as31.h"
+-#undef NOPE
+-
+-#define YYSTYPE union ystack
+-
+-static unsigned char bytebuf[1024];           /* used by dumplist() */
+-static int bytecount;
++#if ! defined YYSTYPE && ! defined YYSTYPE_IS_DECLARED
++typedef int YYSTYPE;
++# define YYSTYPE_IS_TRIVIAL 1
++# define yystype YYSTYPE /* obsolescent; will be withdrawn */
++# define YYSTYPE_IS_DECLARED 1
++#endif
+-void yyerror(const char *s);
+-int makeop(struct opcode * op, struct mode *m, int add);
+-void inclc(int i);
+-char *padline(char *line);
+-void dumplist(char *txt, int show);
+-void genbyte(int b);
+-void genstr(const char *s);
+-void genword(unsigned long w);
++/* Copy the second part of user declarations.  */
+-/* ------------------------ G R A M M E R ----------------------------- */
++/* Line 343 of yacc.c  */
++#line 282 "y.tab.c"
++#ifdef short
++# undef short
++#endif
+-/* Enabling traces.  */
+-#ifndef YYDEBUG
+-# define YYDEBUG 0
++#ifdef YYTYPE_UINT8
++typedef YYTYPE_UINT8 yytype_uint8;
++#else
++typedef unsigned char yytype_uint8;
+ #endif
+-/* Enabling verbose error messages.  */
+-#ifdef YYERROR_VERBOSE
+-# undef YYERROR_VERBOSE
+-# define YYERROR_VERBOSE 1
++#ifdef YYTYPE_INT8
++typedef YYTYPE_INT8 yytype_int8;
++#elif (defined __STDC__ || defined __C99__FUNC__ \
++     || defined __cplusplus || defined _MSC_VER)
++typedef signed char yytype_int8;
+ #else
+-# define YYERROR_VERBOSE 0
++typedef short int yytype_int8;
+ #endif
+-#if ! defined (YYSTYPE) && ! defined (YYSTYPE_IS_DECLARED)
+-typedef int YYSTYPE;
+-# define yystype YYSTYPE /* obsolescent; will be withdrawn */
+-# define YYSTYPE_IS_DECLARED 1
+-# define YYSTYPE_IS_TRIVIAL 1
++#ifdef YYTYPE_UINT16
++typedef YYTYPE_UINT16 yytype_uint16;
++#else
++typedef unsigned short int yytype_uint16;
+ #endif
++#ifdef YYTYPE_INT16
++typedef YYTYPE_INT16 yytype_int16;
++#else
++typedef short int yytype_int16;
++#endif
++#ifndef YYSIZE_T
++# ifdef __SIZE_TYPE__
++#  define YYSIZE_T __SIZE_TYPE__
++# elif defined size_t
++#  define YYSIZE_T size_t
++# elif ! defined YYSIZE_T && (defined __STDC__ || defined __C99__FUNC__ \
++     || defined __cplusplus || defined _MSC_VER)
++#  include <stddef.h> /* INFRINGES ON USER NAME SPACE */
++#  define YYSIZE_T size_t
++# else
++#  define YYSIZE_T unsigned int
++# endif
++#endif
+-/* Copy the second part of user declarations.  */
++#define YYSIZE_MAXIMUM ((YYSIZE_T) -1)
++#ifndef YY_
++# if defined YYENABLE_NLS && YYENABLE_NLS
++#  if ENABLE_NLS
++#   include <libintl.h> /* INFRINGES ON USER NAME SPACE */
++#   define YY_(msgid) dgettext ("bison-runtime", msgid)
++#  endif
++# endif
++# ifndef YY_
++#  define YY_(msgid) msgid
++# endif
++#endif
+-/* Line 214 of yacc.c.  */
+-#line 255 "y.tab.c"
++/* Suppress unused-variable warnings by "using" E.  */
++#if ! defined lint || defined __GNUC__
++# define YYUSE(e) ((void) (e))
++#else
++# define YYUSE(e) /* empty */
++#endif
+-#if ! defined (yyoverflow) || YYERROR_VERBOSE
++/* Identity function, used to suppress warnings about constant conditions.  */
++#ifndef lint
++# define YYID(n) (n)
++#else
++#if (defined __STDC__ || defined __C99__FUNC__ \
++     || defined __cplusplus || defined _MSC_VER)
++static int
++YYID (int yyi)
++#else
++static int
++YYID (yyi)
++    int yyi;
++#endif
++{
++  return yyi;
++}
++#endif
+-# ifndef YYFREE
+-#  define YYFREE free
+-# endif
+-# ifndef YYMALLOC
+-#  define YYMALLOC malloc
+-# endif
++#if ! defined yyoverflow || YYERROR_VERBOSE
+ /* The parser invokes alloca or malloc; define the necessary symbols.  */
+ # ifdef YYSTACK_USE_ALLOCA
+ #  if YYSTACK_USE_ALLOCA
+-#   define YYSTACK_ALLOC alloca
+-#  endif
+-# else
+-#  if defined (alloca) || defined (_ALLOCA_H)
+-#   define YYSTACK_ALLOC alloca
+-#  else
+ #   ifdef __GNUC__
+ #    define YYSTACK_ALLOC __builtin_alloca
++#   elif defined __BUILTIN_VA_ARG_INCR
++#    include <alloca.h> /* INFRINGES ON USER NAME SPACE */
++#   elif defined _AIX
++#    define YYSTACK_ALLOC __alloca
++#   elif defined _MSC_VER
++#    include <malloc.h> /* INFRINGES ON USER NAME SPACE */
++#    define alloca _alloca
++#   else
++#    define YYSTACK_ALLOC alloca
++#    if ! defined _ALLOCA_H && ! defined EXIT_SUCCESS && (defined __STDC__ || defined __C99__FUNC__ \
++     || defined __cplusplus || defined _MSC_VER)
++#     include <stdlib.h> /* INFRINGES ON USER NAME SPACE */
++#     ifndef EXIT_SUCCESS
++#      define EXIT_SUCCESS 0
++#     endif
++#    endif
+ #   endif
+ #  endif
+ # endif
+ # ifdef YYSTACK_ALLOC
+-   /* Pacify GCC's `empty if-body' warning. */
+-#  define YYSTACK_FREE(Ptr) do { /* empty */; } while (0)
+-# else
+-#  if defined (__STDC__) || defined (__cplusplus)
+-#   include <stdlib.h> /* INFRINGES ON USER NAME SPACE */
+-#   define YYSIZE_T size_t
++   /* Pacify GCC's `empty if-body' warning.  */
++#  define YYSTACK_FREE(Ptr) do { /* empty */; } while (YYID (0))
++#  ifndef YYSTACK_ALLOC_MAXIMUM
++    /* The OS might guarantee only one guard page at the bottom of the stack,
++       and a page size can be as small as 4096 bytes.  So we cannot safely
++       invoke alloca (N) if N exceeds 4096.  Use a slightly smaller number
++       to allow for a few compiler-allocated temporary stack slots.  */
++#   define YYSTACK_ALLOC_MAXIMUM 4032 /* reasonable circa 2006 */
+ #  endif
++# else
+ #  define YYSTACK_ALLOC YYMALLOC
+ #  define YYSTACK_FREE YYFREE
++#  ifndef YYSTACK_ALLOC_MAXIMUM
++#   define YYSTACK_ALLOC_MAXIMUM YYSIZE_MAXIMUM
++#  endif
++#  if (defined __cplusplus && ! defined EXIT_SUCCESS \
++       && ! ((defined YYMALLOC || defined malloc) \
++           && (defined YYFREE || defined free)))
++#   include <stdlib.h> /* INFRINGES ON USER NAME SPACE */
++#   ifndef EXIT_SUCCESS
++#    define EXIT_SUCCESS 0
++#   endif
++#  endif
++#  ifndef YYMALLOC
++#   define YYMALLOC malloc
++#   if ! defined malloc && ! defined EXIT_SUCCESS && (defined __STDC__ || defined __C99__FUNC__ \
++     || defined __cplusplus || defined _MSC_VER)
++void *malloc (YYSIZE_T); /* INFRINGES ON USER NAME SPACE */
++#   endif
++#  endif
++#  ifndef YYFREE
++#   define YYFREE free
++#   if ! defined free && ! defined EXIT_SUCCESS && (defined __STDC__ || defined __C99__FUNC__ \
++     || defined __cplusplus || defined _MSC_VER)
++void free (void *); /* INFRINGES ON USER NAME SPACE */
++#   endif
++#  endif
+ # endif
+-#endif /* ! defined (yyoverflow) || YYERROR_VERBOSE */
++#endif /* ! defined yyoverflow || YYERROR_VERBOSE */
+-#if (! defined (yyoverflow) \
+-     && (! defined (__cplusplus) \
+-       || (defined (YYSTYPE_IS_TRIVIAL) && YYSTYPE_IS_TRIVIAL)))
++#if (! defined yyoverflow \
++     && (! defined __cplusplus \
++       || (defined YYSTYPE_IS_TRIVIAL && YYSTYPE_IS_TRIVIAL)))
+ /* A type that is properly aligned for any stack member.  */
+ union yyalloc
+ {
+-  short int yyss;
+-  YYSTYPE yyvs;
+-  };
++  yytype_int16 yyss_alloc;
++  YYSTYPE yyvs_alloc;
++};
+ /* The size of the maximum gap between one aligned stack and the next.  */
+ # define YYSTACK_GAP_MAXIMUM (sizeof (union yyalloc) - 1)
+@@ -309,74 +451,72 @@ union yyalloc
+ /* The size of an array large to enough to hold all stacks, each with
+    N elements.  */
+ # define YYSTACK_BYTES(N) \
+-     ((N) * (sizeof (short int) + sizeof (YYSTYPE))                   \
++     ((N) * (sizeof (yytype_int16) + sizeof (YYSTYPE)) \
+       + YYSTACK_GAP_MAXIMUM)
+-/* Copy COUNT objects from FROM to TO.  The source and destination do
+-   not overlap.  */
+-# ifndef YYCOPY
+-#  if defined (__GNUC__) && 1 < __GNUC__
+-#   define YYCOPY(To, From, Count) \
+-      __builtin_memcpy (To, From, (Count) * sizeof (*(From)))
+-#  else
+-#   define YYCOPY(To, From, Count)            \
+-      do                                      \
+-      {                                       \
+-        register YYSIZE_T yyi;                \
+-        for (yyi = 0; yyi < (Count); yyi++)   \
+-          (To)[yyi] = (From)[yyi];            \
+-      }                                       \
+-      while (0)
+-#  endif
+-# endif
++# define YYCOPY_NEEDED 1
+ /* Relocate STACK from its old location to the new one.  The
+    local variables YYSIZE and YYSTACKSIZE give the old and new number of
+    elements in the stack, and YYPTR gives the new location of the
+    stack.  Advance YYPTR to a properly aligned location for the next
+    stack.  */
+-# define YYSTACK_RELOCATE(Stack)                                      \
++# define YYSTACK_RELOCATE(Stack_alloc, Stack)                         \
+     do                                                                        \
+       {                                                                       \
+       YYSIZE_T yynewbytes;                                            \
+-      YYCOPY (&yyptr->Stack, Stack, yysize);                          \
+-      Stack = &yyptr->Stack;                                          \
++      YYCOPY (&yyptr->Stack_alloc, Stack, yysize);                    \
++      Stack = &yyptr->Stack_alloc;                                    \
+       yynewbytes = yystacksize * sizeof (*Stack) + YYSTACK_GAP_MAXIMUM; \
+       yyptr += yynewbytes / sizeof (*yyptr);                          \
+       }                                                                       \
+-    while (0)
++    while (YYID (0))
+ #endif
+-#if defined (__STDC__) || defined (__cplusplus)
+-   typedef signed char yysigned_char;
+-#else
+-   typedef short int yysigned_char;
+-#endif
++#if defined YYCOPY_NEEDED && YYCOPY_NEEDED
++/* Copy COUNT objects from FROM to TO.  The source and destination do
++   not overlap.  */
++# ifndef YYCOPY
++#  if defined __GNUC__ && 1 < __GNUC__
++#   define YYCOPY(To, From, Count) \
++      __builtin_memcpy (To, From, (Count) * sizeof (*(From)))
++#  else
++#   define YYCOPY(To, From, Count)            \
++      do                                      \
++      {                                       \
++        YYSIZE_T yyi;                         \
++        for (yyi = 0; yyi < (Count); yyi++)   \
++          (To)[yyi] = (From)[yyi];            \
++      }                                       \
++      while (YYID (0))
++#  endif
++# endif
++#endif /* !YYCOPY_NEEDED */
+-/* YYFINAL -- State number of the termination state. */
++/* YYFINAL -- State number of the termination state.  */
+ #define YYFINAL  155
+ /* YYLAST -- Last index in YYTABLE.  */
+ #define YYLAST   599
+-/* YYNTOKENS -- Number of terminals. */
++/* YYNTOKENS -- Number of terminals.  */
+ #define YYNTOKENS  89
+-/* YYNNTS -- Number of nonterminals. */
++/* YYNNTS -- Number of nonterminals.  */
+ #define YYNNTS  35
+-/* YYNRULES -- Number of rules. */
++/* YYNRULES -- Number of rules.  */
+ #define YYNRULES  165
+-/* YYNRULES -- Number of states. */
++/* YYNRULES -- Number of states.  */
+ #define YYNSTATES  316
+ /* YYTRANSLATE(YYLEX) -- Bison symbol number corresponding to YYLEX.  */
+ #define YYUNDEFTOK  2
+ #define YYMAXUTOK   325
+-#define YYTRANSLATE(YYX)                                              \
++#define YYTRANSLATE(YYX)                                              \
+   ((unsigned int) (YYX) <= YYMAXUTOK ? yytranslate[YYX] : YYUNDEFTOK)
+ /* YYTRANSLATE[YYLEX] -- Bison symbol number corresponding to YYLEX.  */
+-static const unsigned char yytranslate[] =
++static const yytype_uint8 yytranslate[] =
+ {
+        0,     2,     2,     2,     2,     2,     2,     2,     2,     2,
+       81,     2,     2,     2,     2,     2,     2,     2,     2,     2,
+@@ -416,7 +556,7 @@ static const unsigned char yytranslate[] =
+ #if YYDEBUG
+ /* YYPRHS[YYN] -- Index of the first RHS symbol of rule number YYN in
+    YYRHS.  */
+-static const unsigned short int yyprhs[] =
++static const yytype_uint16 yyprhs[] =
+ {
+        0,     0,     3,     5,     8,    10,    14,    16,    19,    22,
+       24,    25,    29,    33,    37,    41,    45,    51,    57,    60,
+@@ -437,8 +577,8 @@ static const unsigned short int yyprhs[] =
+      551,   553,   555,   557,   559,   561
+ };
+-/* YYRHS -- A `-1'-separated list of the rules' RHS. */
+-static const yysigned_char yyrhs[] =
++/* YYRHS -- A `-1'-separated list of the rules' RHS.  */
++static const yytype_int8 yyrhs[] =
+ {
+       90,     0,    -1,    91,    -1,    91,    92,    -1,    92,    -1,
+       99,    80,    93,    -1,    93,    -1,    95,    81,    -1,   103,
+@@ -500,7 +640,7 @@ static const yysigned_char yyrhs[] =
+ };
+ /* YYRLINE[YYN] -- source line where rule number YYN was defined.  */
+-static const unsigned short int yyrline[] =
++static const yytype_uint16 yyrline[] =
+ {
+        0,   126,   126,   131,   132,   135,   145,   148,   153,   159,
+      164,   164,   183,   190,   191,   192,   195,   204,   210,   213,
+@@ -522,9 +662,9 @@ static const unsigned short int yyrline[] =
+ };
+ #endif
+-#if YYDEBUG || YYERROR_VERBOSE
+-/* YYTNME[SYMBOL-NUM] -- String name of the symbol SYMBOL-NUM.
+-   First, the terminals, then, starting at YYNTOKENS, nonterminals. */
++#if YYDEBUG || YYERROR_VERBOSE || YYTOKEN_TABLE
++/* YYTNAME[SYMBOL-NUM] -- String name of the symbol SYMBOL-NUM.
++   First, the terminals, then, starting at YYNTOKENS, nonterminals.  */
+ static const char *const yytname[] =
+ {
+   "$end", "error", "$undefined", "STRING", "D_ORG", "D_BYTE", "D_WORD",
+@@ -537,7 +677,7 @@ static const char *const yytname[] =
+   "R5", "R6", "R7", "VALUE", "SYMBOL", "'+'", "'-'", "'*'", "'/'", "'%'",
+   "'|'", "'&'", "'>'", "'<'", "':'", "'\\n'", "'.'", "','", "'('", "')'",
+   "'@'", "'#'", "'!'", "$accept", "program", "linelist", "line",
+-  "linerest", "@1", "directive", "defexpr", "flag", "flagv", "undefsym",
++  "linerest", "$@1", "directive", "defexpr", "flag", "flagv", "undefsym",
+   "blist", "wlist", "expr", "instr", "two_op1", "two_op2", "two_op3",
+   "two_op4", "two_op5", "two_op6", "single_op1", "single_op2", "three_op1",
+   "rel", "rel2", "bit", "bitv", "reg", "regi", "data8", "data16", "addr11",
+@@ -548,7 +688,7 @@ static const char *const yytname[] =
+ # ifdef YYPRINT
+ /* YYTOKNUM[YYLEX-NUM] -- Internal token number corresponding to
+    token YYLEX-NUM.  */
+-static const unsigned short int yytoknum[] =
++static const yytype_uint16 yytoknum[] =
+ {
+        0,   256,   257,   258,   259,   260,   261,   262,   263,   264,
+      265,   266,   267,   268,   269,   270,   271,   272,   273,   274,
+@@ -563,7 +703,7 @@ static const unsigned short int yytoknum[] =
+ # endif
+ /* YYR1[YYN] -- Symbol number of symbol that rule YYN derives.  */
+-static const unsigned char yyr1[] =
++static const yytype_uint8 yyr1[] =
+ {
+        0,    89,    90,    91,    91,    92,    92,    93,    93,    93,
+       94,    93,    95,    95,    95,    95,    95,    95,    95,    96,
+@@ -585,7 +725,7 @@ static const unsigned char yyr1[] =
+ };
+ /* YYR2[YYN] -- Number of symbols composing right hand side of rule YYN.  */
+-static const unsigned char yyr2[] =
++static const yytype_uint8 yyr2[] =
+ {
+        0,     2,     1,     2,     1,     3,     1,     2,     2,     1,
+        0,     3,     3,     3,     3,     3,     5,     5,     2,     1,
+@@ -606,10 +746,10 @@ static const unsigned char yyr2[] =
+        1,     1,     1,     1,     1,     1
+ };
+-/* YYDEFACT[STATE-NAME] -- Default rule to reduce with in state
+-   STATE-NUM when YYTABLE doesn't specify something else to do.  Zero
++/* YYDEFACT[STATE-NAME] -- Default reduction number in state STATE-NUM.
++   Performed when YYTABLE doesn't specify something else to do.  Zero
+    means the default is an error.  */
+-static const unsigned char yydefact[] =
++static const yytype_uint8 yydefact[] =
+ {
+        0,    10,     0,     0,     0,     0,     0,     0,     0,     0,
+        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
+@@ -645,8 +785,8 @@ static const unsigned char yydefact[] =
+      137,    97,    95,    98,    96,   138
+ };
+-/* YYDEFGOTO[NTERM-NUM]. */
+-static const short int yydefgoto[] =
++/* YYDEFGOTO[NTERM-NUM].  */
++static const yytype_int16 yydefgoto[] =
+ {
+       -1,    49,    50,    51,    52,    56,    53,   203,   297,   298,
+       54,   206,   208,    69,    55,    65,    71,    72,   106,   101,
+@@ -657,7 +797,7 @@ static const short int yydefgoto[] =
+ /* YYPACT[STATE-NUM] -- Index in YYTABLE of the portion describing
+    STATE-NUM.  */
+ #define YYPACT_NINF -239
+-static const short int yypact[] =
++static const yytype_int16 yypact[] =
+ {
+      370,  -239,   139,   -24,   -24,   139,   120,    70,    15,    15,
+      -19,   470,   -12,   292,   441,    23,    23,   139,   -45,    23,
+@@ -694,7 +834,7 @@ static const short int yypact[] =
+ };
+ /* YYPGOTO[NTERM-NUM].  */
+-static const short int yypgoto[] =
++static const yytype_int16 yypgoto[] =
+ {
+     -239,  -239,  -239,   214,   107,  -239,  -239,   116,  -239,  -239,
+      114,  -239,  -239,    -2,  -239,    21,    33,   238,    26,  -239,
+@@ -704,10 +844,9 @@ static const short int yypgoto[] =
+ /* YYTABLE[YYPACT[STATE-NUM]].  What to do in state STATE-NUM.  If
+    positive, shift that token.  If negative, reduce the rule which
+-   number is the opposite.  If zero, do what YYDEFACT says.
+-   If YYTABLE_NINF, syntax error.  */
++   number is the opposite.  If YYTABLE_NINF, syntax error.  */
+ #define YYTABLE_NINF -3
+-static const short int yytable[] =
++static const yytype_int16 yytable[] =
+ {
+       62,   107,   107,    62,   242,   107,    85,   205,   277,   232,
+      197,   187,   102,   291,    99,   109,   103,    99,   109,   109,
+@@ -771,7 +910,13 @@ static const short int yytable[] =
+      169,   170,   171,   165,   166,   167,   168,   169,   170,   171
+ };
+-static const short int yycheck[] =
++#define yypact_value_is_default(yystate) \
++  ((yystate) == (-239))
++
++#define yytable_value_is_error(yytable_value) \
++  YYID (0)
++
++static const yytype_int16 yycheck[] =
+ {
+        2,    15,    16,     5,   190,    19,     7,     3,   246,    56,
+       60,    96,    13,     3,    11,    17,    13,    14,    20,    21,
+@@ -837,7 +982,7 @@ static const short int yycheck[] =
+ /* YYSTOS[STATE-NUM] -- The (internal number of the) accessing
+    symbol of state STATE-NUM.  */
+-static const unsigned char yystos[] =
++static const yytype_uint8 yystos[] =
+ {
+        0,     1,    11,    12,    13,    14,    15,    16,    17,    18,
+       19,    20,    21,    22,    23,    24,    25,    26,    27,    28,
+@@ -873,22 +1018,6 @@ static const unsigned char yystos[] =
+      113,    58,    59,    56,    56,   113
+ };
+-#if ! defined (YYSIZE_T) && defined (__SIZE_TYPE__)
+-# define YYSIZE_T __SIZE_TYPE__
+-#endif
+-#if ! defined (YYSIZE_T) && defined (size_t)
+-# define YYSIZE_T size_t
+-#endif
+-#if ! defined (YYSIZE_T)
+-# if defined (__STDC__) || defined (__cplusplus)
+-#  include <stddef.h> /* INFRINGES ON USER NAME SPACE */
+-#  define YYSIZE_T size_t
+-# endif
+-#endif
+-#if ! defined (YYSIZE_T)
+-# define YYSIZE_T unsigned int
+-#endif
+-
+ #define yyerrok               (yyerrstatus = 0)
+ #define yyclearin     (yychar = YYEMPTY)
+ #define YYEMPTY               (-2)
+@@ -901,9 +1030,18 @@ static const unsigned char yystos[] =
+ /* Like YYERROR except do call yyerror.  This remains here temporarily
+    to ease the transition to the new meaning of YYERROR, for GCC.
+-   Once GCC version 2 has supplanted version 1, this can go.  */
++   Once GCC version 2 has supplanted version 1, this can go.  However,
++   YYFAIL appears to be in use.  Nevertheless, it is formally deprecated
++   in Bison 2.4.2's NEWS entry, where a plan to phase it out is
++   discussed.  */
+ #define YYFAIL                goto yyerrlab
++#if defined YYFAIL
++  /* This is here to suppress warnings from the GCC cpp's
++     -Wunused-macros.  Normally we don't worry about that warning, but
++     some users do, and we want to make it easy for users to remove
++     YYFAIL uses, which will produce warnings from Bison 2.5.  */
++#endif
+ #define YYRECOVERING()  (!!yyerrstatus)
+@@ -913,31 +1051,54 @@ do                                                              \
+     {                                                         \
+       yychar = (Token);                                               \
+       yylval = (Value);                                               \
+-      yytoken = YYTRANSLATE (yychar);                         \
+-      YYPOPSTACK;                                             \
++      YYPOPSTACK (1);                                         \
+       goto yybackup;                                          \
+     }                                                         \
+   else                                                                \
+-    {                                                                 \
+-      yyerror ("syntax error: cannot back up");\
++    {                                                         \
++      yyerror (YY_("syntax error: cannot back up")); \
+       YYERROR;                                                        \
+     }                                                         \
+-while (0)
++while (YYID (0))
++
+ #define YYTERROR      1
+ #define YYERRCODE     256
+-/* YYLLOC_DEFAULT -- Compute the default location (before the actions
+-   are run).  */
++/* YYLLOC_DEFAULT -- Set CURRENT to span from RHS[1] to RHS[N].
++   If N is 0, then set CURRENT to the empty location which ends
++   the previous symbol: RHS[0] (always defined).  */
++
++#define YYRHSLOC(Rhs, K) ((Rhs)[K])
+ #ifndef YYLLOC_DEFAULT
+-# define YYLLOC_DEFAULT(Current, Rhs, N)              \
+-   ((Current).first_line   = (Rhs)[1].first_line,     \
+-    (Current).first_column = (Rhs)[1].first_column,   \
+-    (Current).last_line    = (Rhs)[N].last_line,      \
+-    (Current).last_column  = (Rhs)[N].last_column)
++# define YYLLOC_DEFAULT(Current, Rhs, N)                              \
++    do                                                                        \
++      if (YYID (N))                                                    \
++      {                                                               \
++        (Current).first_line   = YYRHSLOC (Rhs, 1).first_line;        \
++        (Current).first_column = YYRHSLOC (Rhs, 1).first_column;      \
++        (Current).last_line    = YYRHSLOC (Rhs, N).last_line;         \
++        (Current).last_column  = YYRHSLOC (Rhs, N).last_column;       \
++      }                                                               \
++      else                                                            \
++      {                                                               \
++        (Current).first_line   = (Current).last_line   =              \
++          YYRHSLOC (Rhs, 0).last_line;                                \
++        (Current).first_column = (Current).last_column =              \
++          YYRHSLOC (Rhs, 0).last_column;                              \
++      }                                                               \
++    while (YYID (0))
++#endif
++
++
++/* This macro is provided for backward compatibility. */
++
++#ifndef YY_LOCATION_PRINT
++# define YY_LOCATION_PRINT(File, Loc) ((void) 0)
+ #endif
++
+ /* YYLEX -- calling `yylex' with the right arguments.  */
+ #ifdef YYLEX_PARAM
+@@ -958,43 +1119,100 @@ while (0)
+ do {                                          \
+   if (yydebug)                                        \
+     YYFPRINTF Args;                           \
+-} while (0)
++} while (YYID (0))
+-# define YYDSYMPRINT(Args)                    \
+-do {                                          \
+-  if (yydebug)                                        \
+-    yysymprint Args;                          \
+-} while (0)
++# define YY_SYMBOL_PRINT(Title, Type, Value, Location)                          \
++do {                                                                    \
++  if (yydebug)                                                                  \
++    {                                                                   \
++      YYFPRINTF (stderr, "%s ", Title);                                         \
++      yy_symbol_print (stderr,                                                  \
++                Type, Value); \
++      YYFPRINTF (stderr, "\n");                                                 \
++    }                                                                   \
++} while (YYID (0))
+-# define YYDSYMPRINTF(Title, Token, Value, Location)          \
+-do {                                                          \
+-  if (yydebug)                                                        \
+-    {                                                         \
+-      YYFPRINTF (stderr, "%s ", Title);                               \
+-      yysymprint (stderr,                                     \
+-                  Token, Value);      \
+-      YYFPRINTF (stderr, "\n");                                       \
+-    }                                                         \
+-} while (0)
++
++/*--------------------------------.
++| Print this symbol on YYOUTPUT.  |
++`--------------------------------*/
++
++/*ARGSUSED*/
++#if (defined __STDC__ || defined __C99__FUNC__ \
++     || defined __cplusplus || defined _MSC_VER)
++static void
++yy_symbol_value_print (FILE *yyoutput, int yytype, YYSTYPE const * const yyvaluep)
++#else
++static void
++yy_symbol_value_print (yyoutput, yytype, yyvaluep)
++    FILE *yyoutput;
++    int yytype;
++    YYSTYPE const * const yyvaluep;
++#endif
++{
++  if (!yyvaluep)
++    return;
++# ifdef YYPRINT
++  if (yytype < YYNTOKENS)
++    YYPRINT (yyoutput, yytoknum[yytype], *yyvaluep);
++# else
++  YYUSE (yyoutput);
++# endif
++  switch (yytype)
++    {
++      default:
++      break;
++    }
++}
++
++
++/*--------------------------------.
++| Print this symbol on YYOUTPUT.  |
++`--------------------------------*/
++
++#if (defined __STDC__ || defined __C99__FUNC__ \
++     || defined __cplusplus || defined _MSC_VER)
++static void
++yy_symbol_print (FILE *yyoutput, int yytype, YYSTYPE const * const yyvaluep)
++#else
++static void
++yy_symbol_print (yyoutput, yytype, yyvaluep)
++    FILE *yyoutput;
++    int yytype;
++    YYSTYPE const * const yyvaluep;
++#endif
++{
++  if (yytype < YYNTOKENS)
++    YYFPRINTF (yyoutput, "token %s (", yytname[yytype]);
++  else
++    YYFPRINTF (yyoutput, "nterm %s (", yytname[yytype]);
++
++  yy_symbol_value_print (yyoutput, yytype, yyvaluep);
++  YYFPRINTF (yyoutput, ")");
++}
+ /*------------------------------------------------------------------.
+ | yy_stack_print -- Print the state stack from its BOTTOM up to its |
+ | TOP (included).                                                   |
+ `------------------------------------------------------------------*/
+-#if defined (__STDC__) || defined (__cplusplus)
++#if (defined __STDC__ || defined __C99__FUNC__ \
++     || defined __cplusplus || defined _MSC_VER)
+ static void
+-yy_stack_print (short int *bottom, short int *top)
++yy_stack_print (yytype_int16 *yybottom, yytype_int16 *yytop)
+ #else
+ static void
+-yy_stack_print (bottom, top)
+-    short int *bottom;
+-    short int *top;
++yy_stack_print (yybottom, yytop)
++    yytype_int16 *yybottom;
++    yytype_int16 *yytop;
+ #endif
+ {
+   YYFPRINTF (stderr, "Stack now");
+-  for (/* Nothing. */; bottom <= top; ++bottom)
+-    YYFPRINTF (stderr, " %d", *bottom);
++  for (; yybottom <= yytop; yybottom++)
++    {
++      int yybot = *yybottom;
++      YYFPRINTF (stderr, " %d", yybot);
++    }
+   YYFPRINTF (stderr, "\n");
+ }
+@@ -1002,45 +1220,52 @@ yy_stack_print (bottom, top)
+ do {                                                          \
+   if (yydebug)                                                        \
+     yy_stack_print ((Bottom), (Top));                         \
+-} while (0)
++} while (YYID (0))
+ /*------------------------------------------------.
+ | Report that the YYRULE is going to be reduced.  |
+ `------------------------------------------------*/
+-#if defined (__STDC__) || defined (__cplusplus)
++#if (defined __STDC__ || defined __C99__FUNC__ \
++     || defined __cplusplus || defined _MSC_VER)
+ static void
+-yy_reduce_print (int yyrule)
++yy_reduce_print (YYSTYPE *yyvsp, int yyrule)
+ #else
+ static void
+-yy_reduce_print (yyrule)
++yy_reduce_print (yyvsp, yyrule)
++    YYSTYPE *yyvsp;
+     int yyrule;
+ #endif
+ {
++  int yynrhs = yyr2[yyrule];
+   int yyi;
+-  unsigned int yylno = yyrline[yyrule];
+-  YYFPRINTF (stderr, "Reducing stack by rule %d (line %u), ",
+-             yyrule - 1, yylno);
+-  /* Print the symbols being reduced, and their result.  */
+-  for (yyi = yyprhs[yyrule]; 0 <= yyrhs[yyi]; yyi++)
+-    YYFPRINTF (stderr, "%s ", yytname [yyrhs[yyi]]);
+-  YYFPRINTF (stderr, "-> %s\n", yytname [yyr1[yyrule]]);
++  unsigned long int yylno = yyrline[yyrule];
++  YYFPRINTF (stderr, "Reducing stack by rule %d (line %lu):\n",
++           yyrule - 1, yylno);
++  /* The symbols being reduced.  */
++  for (yyi = 0; yyi < yynrhs; yyi++)
++    {
++      YYFPRINTF (stderr, "   $%d = ", yyi + 1);
++      yy_symbol_print (stderr, yyrhs[yyprhs[yyrule] + yyi],
++                     &(yyvsp[(yyi + 1) - (yynrhs)])
++                                     );
++      YYFPRINTF (stderr, "\n");
++    }
+ }
+ # define YY_REDUCE_PRINT(Rule)                \
+ do {                                  \
+   if (yydebug)                                \
+-    yy_reduce_print (Rule);           \
+-} while (0)
++    yy_reduce_print (yyvsp, Rule); \
++} while (YYID (0))
+ /* Nonzero means print parse trace.  It is left uninitialized so that
+    multiple parsers can coexist.  */
+ int yydebug;
+ #else /* !YYDEBUG */
+ # define YYDPRINTF(Args)
+-# define YYDSYMPRINT(Args)
+-# define YYDSYMPRINTF(Title, Token, Value, Location)
++# define YY_SYMBOL_PRINT(Title, Type, Value, Location)
+ # define YY_STACK_PRINT(Bottom, Top)
+ # define YY_REDUCE_PRINT(Rule)
+ #endif /* !YYDEBUG */
+@@ -1055,61 +1280,58 @@ int yydebug;
+    if the built-in stack extension method is used).
+    Do not make this value too large; the results are undefined if
+-   SIZE_MAX < YYSTACK_BYTES (YYMAXDEPTH)
++   YYSTACK_ALLOC_MAXIMUM < YYSTACK_BYTES (YYMAXDEPTH)
+    evaluated with infinite-precision integer arithmetic.  */
+-#if defined (YYMAXDEPTH) && YYMAXDEPTH == 0
+-# undef YYMAXDEPTH
+-#endif
+-
+ #ifndef YYMAXDEPTH
+ # define YYMAXDEPTH 10000
+ #endif
+-\f
+ #if YYERROR_VERBOSE
+ # ifndef yystrlen
+-#  if defined (__GLIBC__) && defined (_STRING_H)
++#  if defined __GLIBC__ && defined _STRING_H
+ #   define yystrlen strlen
+ #  else
+ /* Return the length of YYSTR.  */
++#if (defined __STDC__ || defined __C99__FUNC__ \
++     || defined __cplusplus || defined _MSC_VER)
+ static YYSIZE_T
+-#   if defined (__STDC__) || defined (__cplusplus)
+ yystrlen (const char *yystr)
+-#   else
++#else
++static YYSIZE_T
+ yystrlen (yystr)
+-     const char *yystr;
+-#   endif
++    const char *yystr;
++#endif
+ {
+-  register const char *yys = yystr;
+-
+-  while (*yys++ != '\0')
++  YYSIZE_T yylen;
++  for (yylen = 0; yystr[yylen]; yylen++)
+     continue;
+-
+-  return yys - yystr - 1;
++  return yylen;
+ }
+ #  endif
+ # endif
+ # ifndef yystpcpy
+-#  if defined (__GLIBC__) && defined (_STRING_H) && defined (_GNU_SOURCE)
++#  if defined __GLIBC__ && defined _STRING_H && defined _GNU_SOURCE
+ #   define yystpcpy stpcpy
+ #  else
+ /* Copy YYSRC to YYDEST, returning the address of the terminating '\0' in
+    YYDEST.  */
++#if (defined __STDC__ || defined __C99__FUNC__ \
++     || defined __cplusplus || defined _MSC_VER)
+ static char *
+-#   if defined (__STDC__) || defined (__cplusplus)
+ yystpcpy (char *yydest, const char *yysrc)
+-#   else
++#else
++static char *
+ yystpcpy (yydest, yysrc)
+-     char *yydest;
+-     const char *yysrc;
+-#   endif
++    char *yydest;
++    const char *yysrc;
++#endif
+ {
+-  register char *yyd = yydest;
+-  register const char *yys = yysrc;
++  char *yyd = yydest;
++  const char *yys = yysrc;
+   while ((*yyd++ = *yys++) != '\0')
+     continue;
+@@ -1119,84 +1341,232 @@ yystpcpy (yydest, yysrc)
+ #  endif
+ # endif
+-#endif /* !YYERROR_VERBOSE */
++# ifndef yytnamerr
++/* Copy to YYRES the contents of YYSTR after stripping away unnecessary
++   quotes and backslashes, so that it's suitable for yyerror.  The
++   heuristic is that double-quoting is unnecessary unless the string
++   contains an apostrophe, a comma, or backslash (other than
++   backslash-backslash).  YYSTR is taken from yytname.  If YYRES is
++   null, do not copy; instead, return the length of what the result
++   would have been.  */
++static YYSIZE_T
++yytnamerr (char *yyres, const char *yystr)
++{
++  if (*yystr == '"')
++    {
++      YYSIZE_T yyn = 0;
++      char const *yyp = yystr;
++
++      for (;;)
++      switch (*++yyp)
++        {
++        case '\'':
++        case ',':
++          goto do_not_strip_quotes;
++
++        case '\\':
++          if (*++yyp != '\\')
++            goto do_not_strip_quotes;
++          /* Fall through.  */
++        default:
++          if (yyres)
++            yyres[yyn] = *yyp;
++          yyn++;
++          break;
++
++        case '"':
++          if (yyres)
++            yyres[yyn] = '\0';
++          return yyn;
++        }
++    do_not_strip_quotes: ;
++    }
+-\f
++  if (! yyres)
++    return yystrlen (yystr);
+-#if YYDEBUG
+-/*--------------------------------.
+-| Print this symbol on YYOUTPUT.  |
+-`--------------------------------*/
++  return yystpcpy (yyres, yystr) - yyres;
++}
++# endif
+-#if defined (__STDC__) || defined (__cplusplus)
+-static void
+-yysymprint (FILE *yyoutput, int yytype, YYSTYPE *yyvaluep)
+-#else
+-static void
+-yysymprint (yyoutput, yytype, yyvaluep)
+-    FILE *yyoutput;
+-    int yytype;
+-    YYSTYPE *yyvaluep;
+-#endif
++/* Copy into *YYMSG, which is of size *YYMSG_ALLOC, an error message
++   about the unexpected token YYTOKEN for the state stack whose top is
++   YYSSP.
++
++   Return 0 if *YYMSG was successfully written.  Return 1 if *YYMSG is
++   not large enough to hold the message.  In that case, also set
++   *YYMSG_ALLOC to the required number of bytes.  Return 2 if the
++   required number of bytes is too large to store.  */
++static int
++yysyntax_error (YYSIZE_T *yymsg_alloc, char **yymsg,
++                yytype_int16 *yyssp, int yytoken)
+ {
+-  /* Pacify ``unused variable'' warnings.  */
+-  (void) yyvaluep;
++  YYSIZE_T yysize0 = yytnamerr (0, yytname[yytoken]);
++  YYSIZE_T yysize = yysize0;
++  YYSIZE_T yysize1;
++  enum { YYERROR_VERBOSE_ARGS_MAXIMUM = 5 };
++  /* Internationalized format string. */
++  const char *yyformat = 0;
++  /* Arguments of yyformat. */
++  char const *yyarg[YYERROR_VERBOSE_ARGS_MAXIMUM];
++  /* Number of reported tokens (one for the "unexpected", one per
++     "expected"). */
++  int yycount = 0;
++
++  /* There are many possibilities here to consider:
++     - Assume YYFAIL is not used.  It's too flawed to consider.  See
++       <http://lists.gnu.org/archive/html/bison-patches/2009-12/msg00024.html>
++       for details.  YYERROR is fine as it does not invoke this
++       function.
++     - If this state is a consistent state with a default action, then
++       the only way this function was invoked is if the default action
++       is an error action.  In that case, don't check for expected
++       tokens because there are none.
++     - The only way there can be no lookahead present (in yychar) is if
++       this state is a consistent state with a default action.  Thus,
++       detecting the absence of a lookahead is sufficient to determine
++       that there is no unexpected or expected token to report.  In that
++       case, just report a simple "syntax error".
++     - Don't assume there isn't a lookahead just because this state is a
++       consistent state with a default action.  There might have been a
++       previous inconsistent state, consistent state with a non-default
++       action, or user semantic action that manipulated yychar.
++     - Of course, the expected token list depends on states to have
++       correct lookahead information, and it depends on the parser not
++       to perform extra reductions after fetching a lookahead from the
++       scanner and before detecting a syntax error.  Thus, state merging
++       (from LALR or IELR) and default reductions corrupt the expected
++       token list.  However, the list is correct for canonical LR with
++       one exception: it will still contain any token that will not be
++       accepted due to an error action in a later state.
++  */
++  if (yytoken != YYEMPTY)
++    {
++      int yyn = yypact[*yyssp];
++      yyarg[yycount++] = yytname[yytoken];
++      if (!yypact_value_is_default (yyn))
++        {
++          /* Start YYX at -YYN if negative to avoid negative indexes in
++             YYCHECK.  In other words, skip the first -YYN actions for
++             this state because they are default actions.  */
++          int yyxbegin = yyn < 0 ? -yyn : 0;
++          /* Stay within bounds of both yycheck and yytname.  */
++          int yychecklim = YYLAST - yyn + 1;
++          int yyxend = yychecklim < YYNTOKENS ? yychecklim : YYNTOKENS;
++          int yyx;
++
++          for (yyx = yyxbegin; yyx < yyxend; ++yyx)
++            if (yycheck[yyx + yyn] == yyx && yyx != YYTERROR
++                && !yytable_value_is_error (yytable[yyx + yyn]))
++              {
++                if (yycount == YYERROR_VERBOSE_ARGS_MAXIMUM)
++                  {
++                    yycount = 1;
++                    yysize = yysize0;
++                    break;
++                  }
++                yyarg[yycount++] = yytname[yyx];
++                yysize1 = yysize + yytnamerr (0, yytname[yyx]);
++                if (! (yysize <= yysize1
++                       && yysize1 <= YYSTACK_ALLOC_MAXIMUM))
++                  return 2;
++                yysize = yysize1;
++              }
++        }
++    }
+-  if (yytype < YYNTOKENS)
+-    {
+-      YYFPRINTF (yyoutput, "token %s (", yytname[yytype]);
+-# ifdef YYPRINT
+-      YYPRINT (yyoutput, yytoknum[yytype], *yyvaluep);
+-# endif
++  switch (yycount)
++    {
++# define YYCASE_(N, S)                      \
++      case N:                               \
++        yyformat = S;                       \
++      break
++      YYCASE_(0, YY_("syntax error"));
++      YYCASE_(1, YY_("syntax error, unexpected %s"));
++      YYCASE_(2, YY_("syntax error, unexpected %s, expecting %s"));
++      YYCASE_(3, YY_("syntax error, unexpected %s, expecting %s or %s"));
++      YYCASE_(4, YY_("syntax error, unexpected %s, expecting %s or %s or %s"));
++      YYCASE_(5, YY_("syntax error, unexpected %s, expecting %s or %s or %s or %s"));
++# undef YYCASE_
+     }
+-  else
+-    YYFPRINTF (yyoutput, "nterm %s (", yytname[yytype]);
+-  switch (yytype)
++  yysize1 = yysize + yystrlen (yyformat);
++  if (! (yysize <= yysize1 && yysize1 <= YYSTACK_ALLOC_MAXIMUM))
++    return 2;
++  yysize = yysize1;
++
++  if (*yymsg_alloc < yysize)
+     {
+-      default:
+-        break;
++      *yymsg_alloc = 2 * yysize;
++      if (! (yysize <= *yymsg_alloc
++             && *yymsg_alloc <= YYSTACK_ALLOC_MAXIMUM))
++        *yymsg_alloc = YYSTACK_ALLOC_MAXIMUM;
++      return 1;
+     }
+-  YYFPRINTF (yyoutput, ")");
++
++  /* Avoid sprintf, as that infringes on the user's name space.
++     Don't have undefined behavior even if the translation
++     produced a string with the wrong number of "%s"s.  */
++  {
++    char *yyp = *yymsg;
++    int yyi = 0;
++    while ((*yyp = *yyformat) != '\0')
++      if (*yyp == '%' && yyformat[1] == 's' && yyi < yycount)
++        {
++          yyp += yytnamerr (yyp, yyarg[yyi++]);
++          yyformat += 2;
++        }
++      else
++        {
++          yyp++;
++          yyformat++;
++        }
++  }
++  return 0;
+ }
++#endif /* YYERROR_VERBOSE */
+-#endif /* ! YYDEBUG */
+ /*-----------------------------------------------.
+ | Release the memory associated to this symbol.  |
+ `-----------------------------------------------*/
+-#if defined (__STDC__) || defined (__cplusplus)
++/*ARGSUSED*/
++#if (defined __STDC__ || defined __C99__FUNC__ \
++     || defined __cplusplus || defined _MSC_VER)
+ static void
+-yydestruct (int yytype, YYSTYPE *yyvaluep)
++yydestruct (const char *yymsg, int yytype, YYSTYPE *yyvaluep)
+ #else
+ static void
+-yydestruct (yytype, yyvaluep)
++yydestruct (yymsg, yytype, yyvaluep)
++    const char *yymsg;
+     int yytype;
+     YYSTYPE *yyvaluep;
+ #endif
+ {
+-  /* Pacify ``unused variable'' warnings.  */
+-  (void) yyvaluep;
++  YYUSE (yyvaluep);
++
++  if (!yymsg)
++    yymsg = "Deleting";
++  YY_SYMBOL_PRINT (yymsg, yytype, yyvaluep, yylocationp);
+   switch (yytype)
+     {
+       default:
+-        break;
++      break;
+     }
+ }
+-\f
+-/* Prevent warnings from -Wmissing-prototypes.  */
++/* Prevent warnings from -Wmissing-prototypes.  */
+ #ifdef YYPARSE_PARAM
+-# if defined (__STDC__) || defined (__cplusplus)
++#if defined __STDC__ || defined __cplusplus
+ int yyparse (void *YYPARSE_PARAM);
+-# else
++#else
+ int yyparse ();
+-# endif
++#endif
+ #else /* ! YYPARSE_PARAM */
+-#if defined (__STDC__) || defined (__cplusplus)
++#if defined __STDC__ || defined __cplusplus
+ int yyparse (void);
+ #else
+ int yyparse ();
+@@ -1204,7 +1574,6 @@ int yyparse ();
+ #endif /* ! YYPARSE_PARAM */
+-
+ /* The lookahead symbol.  */
+ int yychar;
+@@ -1215,20 +1584,23 @@ YYSTYPE yylval;
+ int yynerrs;
+-
+ /*----------.
+ | yyparse.  |
+ `----------*/
+ #ifdef YYPARSE_PARAM
+-# if defined (__STDC__) || defined (__cplusplus)
+-int yyparse (void *YYPARSE_PARAM)
+-# else
+-int yyparse (YYPARSE_PARAM)
+-  void *YYPARSE_PARAM;
+-# endif
++#if (defined __STDC__ || defined __C99__FUNC__ \
++     || defined __cplusplus || defined _MSC_VER)
++int
++yyparse (void *YYPARSE_PARAM)
++#else
++int
++yyparse (YYPARSE_PARAM)
++    void *YYPARSE_PARAM;
++#endif
+ #else /* ! YYPARSE_PARAM */
+-#if defined (__STDC__) || defined (__cplusplus)
++#if (defined __STDC__ || defined __C99__FUNC__ \
++     || defined __cplusplus || defined _MSC_VER)
+ int
+ yyparse (void)
+ #else
+@@ -1238,64 +1610,69 @@ yyparse ()
+ #endif
+ #endif
+ {
+-  
+-  register int yystate;
+-  register int yyn;
+-  int yyresult;
+-  /* Number of tokens to shift before error messages enabled.  */
+-  int yyerrstatus;
+-  /* Lookahead token as an internal (translated) token number.  */
+-  int yytoken = 0;
++    int yystate;
++    /* Number of tokens to shift before error messages enabled.  */
++    int yyerrstatus;
+-  /* Three stacks and their tools:
+-     `yyss': related to states,
+-     `yyvs': related to semantic values,
+-     `yyls': related to locations.
++    /* The stacks and their tools:
++       `yyss': related to states.
++       `yyvs': related to semantic values.
+-     Refer to the stacks thru separate pointers, to allow yyoverflow
+-     to reallocate them elsewhere.  */
++       Refer to the stacks thru separate pointers, to allow yyoverflow
++       to reallocate them elsewhere.  */
+-  /* The state stack.  */
+-  short int yyssa[YYINITDEPTH];
+-  short int *yyss = yyssa;
+-  register short int *yyssp;
++    /* The state stack.  */
++    yytype_int16 yyssa[YYINITDEPTH];
++    yytype_int16 *yyss;
++    yytype_int16 *yyssp;
+-  /* The semantic value stack.  */
+-  YYSTYPE yyvsa[YYINITDEPTH];
+-  YYSTYPE *yyvs = yyvsa;
+-  register YYSTYPE *yyvsp;
++    /* The semantic value stack.  */
++    YYSTYPE yyvsa[YYINITDEPTH];
++    YYSTYPE *yyvs;
++    YYSTYPE *yyvsp;
++    YYSIZE_T yystacksize;
+-
+-#define YYPOPSTACK   (yyvsp--, yyssp--)
+-
+-  YYSIZE_T yystacksize = YYINITDEPTH;
+-
++  int yyn;
++  int yyresult;
++  /* Lookahead token as an internal (translated) token number.  */
++  int yytoken;
+   /* The variables used to return semantic value and location from the
+      action routines.  */
+   YYSTYPE yyval;
++#if YYERROR_VERBOSE
++  /* Buffer for error messages, and its allocated size.  */
++  char yymsgbuf[128];
++  char *yymsg = yymsgbuf;
++  YYSIZE_T yymsg_alloc = sizeof yymsgbuf;
++#endif
++
++#define YYPOPSTACK(N)   (yyvsp -= (N), yyssp -= (N))
+-  /* When reducing, the number of symbols on the RHS of the reduced
+-     rule.  */
+-  int yylen;
++  /* The number of symbols on the RHS of the reduced rule.
++     Keep to zero when no symbol should be popped.  */
++  int yylen = 0;
++
++  yytoken = 0;
++  yyss = yyssa;
++  yyvs = yyvsa;
++  yystacksize = YYINITDEPTH;
+   YYDPRINTF ((stderr, "Starting parse\n"));
+   yystate = 0;
+   yyerrstatus = 0;
+   yynerrs = 0;
+-  yychar = YYEMPTY;           /* Cause a token to be read.  */
++  yychar = YYEMPTY; /* Cause a token to be read.  */
+   /* Initialize stack pointers.
+      Waste one element of value and location stack
+      so that they stay on the same level as the state stack.
+      The wasted elements are never initialized.  */
+-
+   yyssp = yyss;
+   yyvsp = yyvs;
+-
+   goto yysetstate;
+ /*------------------------------------------------------------.
+@@ -1303,8 +1680,7 @@ yyparse ()
+ `------------------------------------------------------------*/
+  yynewstate:
+   /* In all cases, when you get here, the value and location stacks
+-     have just been pushed. so pushing a state here evens the stacks.
+-     */
++     have just been pushed.  So pushing a state here evens the stacks.  */
+   yyssp++;
+  yysetstate:
+@@ -1317,21 +1693,19 @@ yyparse ()
+ #ifdef yyoverflow
+       {
+-      /* Give user a chance to reallocate the stack. Use copies of
++      /* Give user a chance to reallocate the stack.  Use copies of
+          these so that the &'s don't force the real ones into
+          memory.  */
+       YYSTYPE *yyvs1 = yyvs;
+-      short int *yyss1 = yyss;
+-
++      yytype_int16 *yyss1 = yyss;
+       /* Each stack pointer address is followed by the size of the
+          data in use in that stack, in bytes.  This used to be a
+          conditional around just the two extra args, but that might
+          be undefined if yyoverflow is a macro.  */
+-      yyoverflow ("parser stack overflow",
++      yyoverflow (YY_("memory exhausted"),
+                   &yyss1, yysize * sizeof (*yyssp),
+                   &yyvs1, yysize * sizeof (*yyvsp),
+-
+                   &yystacksize);
+       yyss = yyss1;
+@@ -1339,24 +1713,23 @@ yyparse ()
+       }
+ #else /* no yyoverflow */
+ # ifndef YYSTACK_RELOCATE
+-      goto yyoverflowlab;
++      goto yyexhaustedlab;
+ # else
+       /* Extend the stack our own way.  */
+       if (YYMAXDEPTH <= yystacksize)
+-      goto yyoverflowlab;
++      goto yyexhaustedlab;
+       yystacksize *= 2;
+       if (YYMAXDEPTH < yystacksize)
+       yystacksize = YYMAXDEPTH;
+       {
+-      short int *yyss1 = yyss;
++      yytype_int16 *yyss1 = yyss;
+       union yyalloc *yyptr =
+         (union yyalloc *) YYSTACK_ALLOC (YYSTACK_BYTES (yystacksize));
+       if (! yyptr)
+-        goto yyoverflowlab;
+-      YYSTACK_RELOCATE (yyss);
+-      YYSTACK_RELOCATE (yyvs);
+-
++        goto yyexhaustedlab;
++      YYSTACK_RELOCATE (yyss_alloc, yyss);
++      YYSTACK_RELOCATE (yyvs_alloc, yyvs);
+ #  undef YYSTACK_RELOCATE
+       if (yyss1 != yyssa)
+         YYSTACK_FREE (yyss1);
+@@ -1367,7 +1740,6 @@ yyparse ()
+       yyssp = yyss + yysize - 1;
+       yyvsp = yyvs + yysize - 1;
+-
+       YYDPRINTF ((stderr, "Stack size increased to %lu\n",
+                 (unsigned long int) yystacksize));
+@@ -1377,6 +1749,9 @@ yyparse ()
+   YYDPRINTF ((stderr, "Entering state %d\n", yystate));
++  if (yystate == YYFINAL)
++    YYACCEPT;
++
+   goto yybackup;
+ /*-----------.
+@@ -1384,14 +1759,12 @@ yyparse ()
+ `-----------*/
+ yybackup:
+-/* Do appropriate processing given the current state.  */
+-/* Read a lookahead token if we need one and don't already have one.  */
+-/* yyresume: */
++  /* Do appropriate processing given the current state.  Read a
++     lookahead token if we need one and don't already have one.  */
+   /* First try to decide what to do without reference to lookahead token.  */
+-
+   yyn = yypact[yystate];
+-  if (yyn == YYPACT_NINF)
++  if (yypact_value_is_default (yyn))
+     goto yydefault;
+   /* Not known => get a lookahead token if don't already have one.  */
+@@ -1411,7 +1784,7 @@ yybackup:
+   else
+     {
+       yytoken = YYTRANSLATE (yychar);
+-      YYDSYMPRINTF ("Next token is", yytoken, &yylval, &yylloc);
++      YY_SYMBOL_PRINT ("Next token is", yytoken, &yylval, &yylloc);
+     }
+   /* If the proper action on seeing token YYTOKEN is to reduce or to
+@@ -1422,31 +1795,26 @@ yybackup:
+   yyn = yytable[yyn];
+   if (yyn <= 0)
+     {
+-      if (yyn == 0 || yyn == YYTABLE_NINF)
+-      goto yyerrlab;
++      if (yytable_value_is_error (yyn))
++        goto yyerrlab;
+       yyn = -yyn;
+       goto yyreduce;
+     }
+-  if (yyn == YYFINAL)
+-    YYACCEPT;
+-
+-  /* Shift the lookahead token.  */
+-  YYDPRINTF ((stderr, "Shifting token %s, ", yytname[yytoken]));
+-
+-  /* Discard the token being shifted unless it is eof.  */
+-  if (yychar != YYEOF)
+-    yychar = YYEMPTY;
+-
+-  *++yyvsp = yylval;
+-
+-
+   /* Count tokens shifted since error; after three, turn off error
+      status.  */
+   if (yyerrstatus)
+     yyerrstatus--;
++  /* Shift the lookahead token.  */
++  YY_SYMBOL_PRINT ("Shifting", yytoken, &yylval, &yylloc);
++
++  /* Discard the shifted token.  */
++  yychar = YYEMPTY;
++
+   yystate = yyn;
++  *++yyvsp = yylval;
++
+   goto yynewstate;
+@@ -1482,58 +1850,72 @@ yyreduce:
+   switch (yyn)
+     {
+         case 2:
++
++/* Line 1806 of yacc.c  */
+ #line 127 "parser.y"
+     {
+ }
+     break;
+   case 5:
++
++/* Line 1806 of yacc.c  */
+ #line 136 "parser.y"
+     {
+       if (abort_asap) {YYABORT;}
+       if( pass1 ) {
+-              yyvsp[-2].sym->type = LABEL;
+-              yyvsp[-2].sym->value = lc;
++              (yyvsp[(1) - (3)]).sym->type = LABEL;
++              (yyvsp[(1) - (3)]).sym->value = lc;
+       }
+-      inclc(yyvsp[0].value);
++      inclc((yyvsp[(3) - (3)]).value);
+       bytecount = 0;
+ }
+     break;
+   case 6:
++
++/* Line 1806 of yacc.c  */
+ #line 145 "parser.y"
+-    { inclc(yyvsp[0].value); bytecount = 0; }
++    { inclc((yyvsp[(1) - (1)]).value); bytecount = 0; }
+     break;
+   case 7:
++
++/* Line 1806 of yacc.c  */
+ #line 148 "parser.y"
+     {
+-                                              yyval.value = yyvsp[-1].value;
++                                              (yyval).value = (yyvsp[(1) - (2)]).value;
+                                               if( dashl && pass2 )
+-                                                      dumplist(yyvsp[0].str,1);
++                                                      dumplist((yyvsp[(2) - (2)]).str,1);
+                                       }
+     break;
+   case 8:
++
++/* Line 1806 of yacc.c  */
+ #line 153 "parser.y"
+     {
+-                                              yyval.value = yyvsp[-1].value;
++                                              (yyval).value = (yyvsp[(1) - (2)]).value;
+                                               if( dashl && pass2 )
+-                                                      dumplist(yyvsp[0].str,1);
++                                                      dumplist((yyvsp[(2) - (2)]).str,1);
+                                       }
+     break;
+   case 9:
++
++/* Line 1806 of yacc.c  */
+ #line 159 "parser.y"
+     {
+-                                              yyval.value = 0;
++                                              (yyval).value = 0;
+                                               if( dashl && pass2 )
+-                                                      dumplist(yyvsp[0].str,0);
++                                                      dumplist((yyvsp[(1) - (1)]).str,0);
+                                       }
+     break;
+   case 10:
++
++/* Line 1806 of yacc.c  */
+ #line 164 "parser.y"
+     {
+                                               seek_eol();
+@@ -1541,987 +1923,1249 @@ yyreduce:
+     break;
+   case 11:
++
++/* Line 1806 of yacc.c  */
+ #line 167 "parser.y"
+     {
+-                                              yyval.value = 0;
++                                              (yyval).value = 0;
+                                               if( dashl && pass2 )
+-                                                      dumplist(yyvsp[-2].str,0);
++                                                      dumplist((yyvsp[(1) - (3)]).str,0);
+                                       }
+     break;
+   case 12:
++
++/* Line 1806 of yacc.c  */
+ #line 184 "parser.y"
+     {
+-      lc = yyvsp[0].val.v;
++      lc = (yyvsp[(3) - (3)]).val.v;
+       if( pass2 ) emitaddr(lc);
+       bytecount = 0;
+-      yyval.value = 0;
++      (yyval).value = 0;
+ }
+     break;
+   case 13:
++
++/* Line 1806 of yacc.c  */
+ #line 190 "parser.y"
+-    { yyval.value = yyvsp[0].value; }
++    { (yyval).value = (yyvsp[(3) - (3)]).value; }
+     break;
+   case 14:
++
++/* Line 1806 of yacc.c  */
+ #line 191 "parser.y"
+-    { yyval.value = yyvsp[0].value; }
++    { (yyval).value = (yyvsp[(3) - (3)]).value; }
+     break;
+   case 15:
++
++/* Line 1806 of yacc.c  */
+ #line 192 "parser.y"
+-    { yyval.value = yyvsp[0].val.v;
++    { (yyval).value = (yyvsp[(3) - (3)]).val.v;
+                                         if( pass2 )
+-                                              emitaddr(lc+yyval.value); }
++                                              emitaddr(lc+(yyval).value); }
+     break;
+   case 16:
++
++/* Line 1806 of yacc.c  */
+ #line 196 "parser.y"
+     {
+-      if( yyvsp[0].val.d == 0 )
++      if( (yyvsp[(5) - (5)]).val.d == 0 )
+               warn("Expression is undefined in pass 1");
+-      yyvsp[-2].sym->type = LABEL;
+-      yyvsp[-2].sym->value = yyvsp[0].val.v;
+-      yyval.value = 0;
++      (yyvsp[(3) - (5)]).sym->type = LABEL;
++      (yyvsp[(3) - (5)]).sym->value = (yyvsp[(5) - (5)]).val.v;
++      (yyval).value = 0;
+ }
+     break;
+   case 17:
++
++/* Line 1806 of yacc.c  */
+ #line 205 "parser.y"
+     {
+-      yyvsp[-2].sym->type = LABEL;
+-      yyvsp[-2].sym->value = yyvsp[0].value;
+-      yyval.value = 0;
++      (yyvsp[(3) - (5)]).sym->type = LABEL;
++      (yyvsp[(3) - (5)]).sym->value = (yyvsp[(5) - (5)]).value;
++      (yyval).value = 0;
+ }
+     break;
+   case 18:
++
++/* Line 1806 of yacc.c  */
+ #line 210 "parser.y"
+-    { yyval.value = 0; }
++    { (yyval).value = 0; }
+     break;
+   case 19:
++
++/* Line 1806 of yacc.c  */
+ #line 214 "parser.y"
+     {
+-              if( yyvsp[0].val.d == 0 )
++              if( (yyvsp[(1) - (1)]).val.d == 0 )
+                       warn("Expression is undefined in pass 1");
+-              if( !(isbit16(yyvsp[0].val.v)) )
++              if( !(isbit16((yyvsp[(1) - (1)]).val.v)) )
+                       warn("Value greater than 16-bits");
+-              yyval.value = yyvsp[0].val.v;
++              (yyval).value = (yyvsp[(1) - (1)]).val.v;
+ }
+     break;
+   case 20:
++
++/* Line 1806 of yacc.c  */
+ #line 224 "parser.y"
+     {
+-      if( !isbit8(yyvsp[-1].value) )
++      if( !isbit8((yyvsp[(1) - (2)]).value) )
+               warn("Bit address exceeds 8-bits");
+-      if( isbmram(yyvsp[-1].value) )
+-              yyval.value = (yyvsp[-1].value-0x20)*8+ yyvsp[0].value;
+-      else if( isbmsfr(yyvsp[-1].value) )
+-              yyval.value = yyvsp[-1].value + yyvsp[0].value;
++      if( isbmram((yyvsp[(1) - (2)]).value) )
++              (yyval).value = ((yyvsp[(1) - (2)]).value-0x20)*8+ (yyvsp[(2) - (2)]).value;
++      else if( isbmsfr((yyvsp[(1) - (2)]).value) )
++              (yyval).value = (yyvsp[(1) - (2)]).value + (yyvsp[(2) - (2)]).value;
+       else
+               warn("Invalid bit addressable RAM location");
+ }
+     break;
+   case 21:
++
++/* Line 1806 of yacc.c  */
+ #line 237 "parser.y"
+     {
+-      if( yyvsp[0].sym->type == UNDEF )
+-              warn("Symbol %s must be defined in pass 1",yyvsp[0].sym->name);
+-      yyval.value = yyvsp[0].sym->value;
++      if( (yyvsp[(1) - (1)]).sym->type == UNDEF )
++              warn("Symbol %s must be defined in pass 1",(yyvsp[(1) - (1)]).sym->name);
++      (yyval).value = (yyvsp[(1) - (1)]).sym->value;
+ }
+     break;
+   case 22:
++
++/* Line 1806 of yacc.c  */
+ #line 242 "parser.y"
+-    { yyval.value = yyvsp[0].value; }
++    { (yyval).value = (yyvsp[(1) - (1)]).value; }
+     break;
+   case 23:
++
++/* Line 1806 of yacc.c  */
+ #line 247 "parser.y"
+     {
+-      if( yyvsp[0].sym->type != UNDEF && pass1)
+-              warn("Attempt to redefine symbol: %s",yyvsp[0].sym->name);
+-      yyval.sym = yyvsp[0].sym;
++      if( (yyvsp[(1) - (1)]).sym->type != UNDEF && pass1)
++              warn("Attempt to redefine symbol: %s",(yyvsp[(1) - (1)]).sym->name);
++      (yyval).sym = (yyvsp[(1) - (1)]).sym;
+ }
+     break;
+   case 24:
++
++/* Line 1806 of yacc.c  */
+ #line 255 "parser.y"
+     {
+-      if( pass2 ) genbyte(yyvsp[0].value);
+-      yyval.value = yyvsp[-2].value + 1;
++      if( pass2 ) genbyte((yyvsp[(3) - (3)]).value);
++      (yyval).value = (yyvsp[(1) - (3)]).value + 1;
+ }
+     break;
+   case 25:
++
++/* Line 1806 of yacc.c  */
+ #line 260 "parser.y"
+     {
+       if( pass1 )
+-              yyval.value = yyvsp[-2].value + yyvsp[0].value;
++              (yyval).value = (yyvsp[(1) - (3)]).value + (yyvsp[(3) - (3)]).value;
+       else {
+-              yyval.value = yyvsp[-2].value + strlen(yyvsp[0].str);
+-              genstr(yyvsp[0].str);
++              (yyval).value = (yyvsp[(1) - (3)]).value + strlen((yyvsp[(3) - (3)]).str);
++              genstr((yyvsp[(3) - (3)]).str);
+               
+-              free(yyvsp[0].str);
++              free((yyvsp[(3) - (3)]).str);
+       }
+ }
+     break;
+   case 26:
++
++/* Line 1806 of yacc.c  */
+ #line 271 "parser.y"
+     {
+-      if( pass2 ) genbyte(yyvsp[0].value);
+-      yyval.value = 1;
++      if( pass2 ) genbyte((yyvsp[(1) - (1)]).value);
++      (yyval).value = 1;
+ }
+     break;
+   case 27:
++
++/* Line 1806 of yacc.c  */
+ #line 276 "parser.y"
+     {
+       if( pass1 )
+-              yyval.value = yyvsp[0].value;
++              (yyval).value = (yyvsp[(1) - (1)]).value;
+       else {
+-              yyval.value = strlen(yyvsp[0].str);
+-              genstr(yyvsp[0].str);
+-              free(yyvsp[0].str);
++              (yyval).value = strlen((yyvsp[(1) - (1)]).str);
++              genstr((yyvsp[(1) - (1)]).str);
++              free((yyvsp[(1) - (1)]).str);
+       }
+ }
+     break;
+   case 28:
++
++/* Line 1806 of yacc.c  */
+ #line 288 "parser.y"
+     {
+-      if( pass2 ) genword(yyvsp[0].value);
+-      yyval.value = yyvsp[-2].value + 2;
++      if( pass2 ) genword((yyvsp[(3) - (3)]).value);
++      (yyval).value = (yyvsp[(1) - (3)]).value + 2;
+ }
+     break;
+   case 29:
++
++/* Line 1806 of yacc.c  */
+ #line 293 "parser.y"
+     {
+-      if( pass2 ) genword(yyvsp[0].value);
+-      yyval.value = 2;
++      if( pass2 ) genword((yyvsp[(1) - (1)]).value);
++      (yyval).value = 2;
+ }
+     break;
+   case 30:
++
++/* Line 1806 of yacc.c  */
+ #line 306 "parser.y"
+-    { yyval.val.v = lc;
+-                                        yyval.val.d = 1; }
++    { (yyval).val.v = lc;
++                                        (yyval).val.d = 1; }
+     break;
+   case 31:
++
++/* Line 1806 of yacc.c  */
+ #line 309 "parser.y"
+-    { yyval.val.v = yyvsp[-1].val.v;
+-                                        yyval.val.d = yyvsp[-1].val.d; }
++    { (yyval).val.v = (yyvsp[(2) - (3)]).val.v;
++                                        (yyval).val.d = (yyvsp[(2) - (3)]).val.d; }
+     break;
+   case 32:
++
++/* Line 1806 of yacc.c  */
+ #line 312 "parser.y"
+-    { yyval.val.v = -yyvsp[0].val.v;
+-                                        yyval.val.d = yyvsp[0].val.d;  }
++    { (yyval).val.v = -(yyvsp[(2) - (2)]).val.v;
++                                        (yyval).val.d = (yyvsp[(2) - (2)]).val.d;  }
+     break;
+   case 33:
++
++/* Line 1806 of yacc.c  */
+ #line 315 "parser.y"
+-    { yyval.val.v = yyvsp[-2].val.v | yyvsp[0].val.v;
+-                                        yyval.val.d = yyvsp[-2].val.d && yyvsp[0].val.d; }
++    { (yyval).val.v = (yyvsp[(1) - (3)]).val.v | (yyvsp[(3) - (3)]).val.v;
++                                        (yyval).val.d = (yyvsp[(1) - (3)]).val.d && (yyvsp[(3) - (3)]).val.d; }
+     break;
+   case 34:
++
++/* Line 1806 of yacc.c  */
+ #line 318 "parser.y"
+-    { yyval.val.v = yyvsp[-2].val.v & yyvsp[0].val.v;
+-                                        yyval.val.d = yyvsp[-2].val.d && yyvsp[0].val.d; }
++    { (yyval).val.v = (yyvsp[(1) - (3)]).val.v & (yyvsp[(3) - (3)]).val.v;
++                                        (yyval).val.d = (yyvsp[(1) - (3)]).val.d && (yyvsp[(3) - (3)]).val.d; }
+     break;
+   case 35:
++
++/* Line 1806 of yacc.c  */
+ #line 321 "parser.y"
+-    { yyval.val.v = yyvsp[-2].val.v * yyvsp[0].val.v;
+-                                        yyval.val.d = yyvsp[-2].val.d && yyvsp[0].val.d; }
++    { (yyval).val.v = (yyvsp[(1) - (3)]).val.v * (yyvsp[(3) - (3)]).val.v;
++                                        (yyval).val.d = (yyvsp[(1) - (3)]).val.d && (yyvsp[(3) - (3)]).val.d; }
+     break;
+   case 36:
++
++/* Line 1806 of yacc.c  */
+ #line 324 "parser.y"
+-    { yyval.val.v = yyvsp[-2].val.v / yyvsp[0].val.v;
+-                                        yyval.val.d = yyvsp[-2].val.d && yyvsp[0].val.d; }
++    { (yyval).val.v = (yyvsp[(1) - (3)]).val.v / (yyvsp[(3) - (3)]).val.v;
++                                        (yyval).val.d = (yyvsp[(1) - (3)]).val.d && (yyvsp[(3) - (3)]).val.d; }
+     break;
+   case 37:
++
++/* Line 1806 of yacc.c  */
+ #line 327 "parser.y"
+-    { yyval.val.v = yyvsp[-2].val.v % yyvsp[0].val.v;
+-                                        yyval.val.d = yyvsp[-2].val.d && yyvsp[0].val.d; }
++    { (yyval).val.v = (yyvsp[(1) - (3)]).val.v % (yyvsp[(3) - (3)]).val.v;
++                                        (yyval).val.d = (yyvsp[(1) - (3)]).val.d && (yyvsp[(3) - (3)]).val.d; }
+     break;
+   case 38:
++
++/* Line 1806 of yacc.c  */
+ #line 330 "parser.y"
+-    { yyval.val.v = yyvsp[-2].val.v - yyvsp[0].val.v;
+-                                        yyval.val.d = yyvsp[-2].val.d && yyvsp[0].val.d; }
++    { (yyval).val.v = (yyvsp[(1) - (3)]).val.v - (yyvsp[(3) - (3)]).val.v;
++                                        (yyval).val.d = (yyvsp[(1) - (3)]).val.d && (yyvsp[(3) - (3)]).val.d; }
+     break;
+   case 39:
++
++/* Line 1806 of yacc.c  */
+ #line 333 "parser.y"
+-    { yyval.val.v = yyvsp[-2].val.v + yyvsp[0].val.v;
+-                                        yyval.val.d = yyvsp[-2].val.d && yyvsp[0].val.d; }
++    { (yyval).val.v = (yyvsp[(1) - (3)]).val.v + (yyvsp[(3) - (3)]).val.v;
++                                        (yyval).val.d = (yyvsp[(1) - (3)]).val.d && (yyvsp[(3) - (3)]).val.d; }
+     break;
+   case 40:
++
++/* Line 1806 of yacc.c  */
+ #line 336 "parser.y"
+-    { yyval.val.v = yyvsp[-3].val.v >> yyvsp[0].val.v;
+-                                        yyval.val.d = yyvsp[-3].val.d && yyvsp[0].val.d; }
++    { (yyval).val.v = (yyvsp[(1) - (4)]).val.v >> (yyvsp[(4) - (4)]).val.v;
++                                        (yyval).val.d = (yyvsp[(1) - (4)]).val.d && (yyvsp[(4) - (4)]).val.d; }
+     break;
+   case 41:
++
++/* Line 1806 of yacc.c  */
+ #line 339 "parser.y"
+-    { yyval.val.v = yyvsp[-3].val.v << yyvsp[0].val.v;
+-                                        yyval.val.d = yyvsp[-3].val.d && yyvsp[0].val.d; }
++    { (yyval).val.v = (yyvsp[(1) - (4)]).val.v << (yyvsp[(4) - (4)]).val.v;
++                                        (yyval).val.d = (yyvsp[(1) - (4)]).val.d && (yyvsp[(4) - (4)]).val.d; }
+     break;
+   case 42:
++
++/* Line 1806 of yacc.c  */
+ #line 342 "parser.y"
+     {
+       if( pass1 ) {
+-              yyval.val.v = yyvsp[0].sym->value;
+-              yyval.val.d = (yyvsp[0].sym->type != UNDEF);
++              (yyval).val.v = (yyvsp[(1) - (1)]).sym->value;
++              (yyval).val.d = ((yyvsp[(1) - (1)]).sym->type != UNDEF);
+       }
+       else {
+-              if( yyvsp[0].sym->type == UNDEF )
+-                      warn("Undefined symbol %s",yyvsp[0].sym->name);
+-              yyval.val.v = yyvsp[0].sym->value;
+-              yyval.val.d = 1;
++              if( (yyvsp[(1) - (1)]).sym->type == UNDEF )
++                      warn("Undefined symbol %s",(yyvsp[(1) - (1)]).sym->name);
++              (yyval).val.v = (yyvsp[(1) - (1)]).sym->value;
++              (yyval).val.d = 1;
+       }
+ }
+     break;
+   case 43:
++
++/* Line 1806 of yacc.c  */
+ #line 354 "parser.y"
+-    { yyval.val.v = yyvsp[0].val.v; yyval.val.d=1; }
++    { (yyval).val.v = (yyvsp[(1) - (1)]).val.v; (yyval).val.d=1; }
+     break;
+   case 44:
++
++/* Line 1806 of yacc.c  */
+ #line 367 "parser.y"
+-    { yyval.value = makeop(yyvsp[0].op,NULL,0); }
++    { (yyval).value = makeop((yyvsp[(1) - (1)]).op,NULL,0); }
+     break;
+   case 45:
++
++/* Line 1806 of yacc.c  */
+ #line 369 "parser.y"
+-    { yyval.value = makeop(yyvsp[-1].op,&yyvsp[0].mode,0); }
++    { (yyval).value = makeop((yyvsp[(1) - (2)]).op,&(yyvsp[(2) - (2)]).mode,0); }
+     break;
+   case 46:
++
++/* Line 1806 of yacc.c  */
+ #line 371 "parser.y"
+-    { yyval.value = makeop(yyvsp[-1].op,&yyvsp[0].mode,0); }
++    { (yyval).value = makeop((yyvsp[(1) - (2)]).op,&(yyvsp[(2) - (2)]).mode,0); }
+     break;
+   case 47:
++
++/* Line 1806 of yacc.c  */
+ #line 373 "parser.y"
+-    { yyval.value = makeop(yyvsp[-1].op,&yyvsp[0].mode,0); }
++    { (yyval).value = makeop((yyvsp[(1) - (2)]).op,&(yyvsp[(2) - (2)]).mode,0); }
+     break;
+   case 48:
++
++/* Line 1806 of yacc.c  */
+ #line 375 "parser.y"
+-    { yyval.value = makeop(yyvsp[-1].op,&yyvsp[0].mode,0); }
++    { (yyval).value = makeop((yyvsp[(1) - (2)]).op,&(yyvsp[(2) - (2)]).mode,0); }
+     break;
+   case 49:
++
++/* Line 1806 of yacc.c  */
+ #line 377 "parser.y"
+-    { yyval.value = makeop(yyvsp[-1].op,&yyvsp[0].mode,0); }
++    { (yyval).value = makeop((yyvsp[(1) - (2)]).op,&(yyvsp[(2) - (2)]).mode,0); }
+     break;
+   case 50:
++
++/* Line 1806 of yacc.c  */
+ #line 379 "parser.y"
+-    { yyval.value = makeop(yyvsp[-1].op,&yyvsp[0].mode,0); }
++    { (yyval).value = makeop((yyvsp[(1) - (2)]).op,&(yyvsp[(2) - (2)]).mode,0); }
+     break;
+   case 51:
++
++/* Line 1806 of yacc.c  */
+ #line 381 "parser.y"
+-    { yyval.value = makeop(yyvsp[-1].op,&yyvsp[0].mode,4); }
++    { (yyval).value = makeop((yyvsp[(1) - (2)]).op,&(yyvsp[(2) - (2)]).mode,4); }
+     break;
+   case 52:
++
++/* Line 1806 of yacc.c  */
+ #line 383 "parser.y"
+-    { yyval.value = makeop(yyvsp[-1].op,&yyvsp[0].mode,0); }
++    { (yyval).value = makeop((yyvsp[(1) - (2)]).op,&(yyvsp[(2) - (2)]).mode,0); }
+     break;
+   case 53:
++
++/* Line 1806 of yacc.c  */
+ #line 385 "parser.y"
+-    { yyval.value = makeop(yyvsp[-1].op,&yyvsp[0].mode,4); }
++    { (yyval).value = makeop((yyvsp[(1) - (2)]).op,&(yyvsp[(2) - (2)]).mode,4); }
+     break;
+   case 54:
++
++/* Line 1806 of yacc.c  */
+ #line 387 "parser.y"
+-    { yyval.value = makeop(yyvsp[-1].op,&yyvsp[0].mode,6); }
++    { (yyval).value = makeop((yyvsp[(1) - (2)]).op,&(yyvsp[(2) - (2)]).mode,6); }
+     break;
+   case 55:
++
++/* Line 1806 of yacc.c  */
+ #line 389 "parser.y"
+-    { yyval.value = makeop(yyvsp[-1].op,&yyvsp[0].mode,0); }
++    { (yyval).value = makeop((yyvsp[(1) - (2)]).op,&(yyvsp[(2) - (2)]).mode,0); }
+     break;
+   case 56:
++
++/* Line 1806 of yacc.c  */
+ #line 391 "parser.y"
+-    { yyval.value = makeop(yyvsp[-1].op,&yyvsp[0].mode,4); }
++    { (yyval).value = makeop((yyvsp[(1) - (2)]).op,&(yyvsp[(2) - (2)]).mode,4); }
+     break;
+   case 57:
++
++/* Line 1806 of yacc.c  */
+ #line 393 "parser.y"
+-    { yyval.value = makeop(yyvsp[-1].op,&yyvsp[0].mode,6); }
++    { (yyval).value = makeop((yyvsp[(1) - (2)]).op,&(yyvsp[(2) - (2)]).mode,6); }
+     break;
+   case 58:
++
++/* Line 1806 of yacc.c  */
+ #line 395 "parser.y"
+-    { if( get_md(yyvsp[0].mode) == 3 )
++    { if( get_md((yyvsp[(2) - (2)]).mode) == 3 )
+                                       warn("Immediate mode is illegal");
+-                                yyval.value = makeop(yyvsp[-1].op,&yyvsp[0].mode,0);
++                                (yyval).value = makeop((yyvsp[(1) - (2)]).op,&(yyvsp[(2) - (2)]).mode,0);
+                               }
+     break;
+   case 59:
++
++/* Line 1806 of yacc.c  */
+ #line 400 "parser.y"
+-    { yyval.value = makeop(yyvsp[-1].op,&yyvsp[0].mode,0); }
++    { (yyval).value = makeop((yyvsp[(1) - (2)]).op,&(yyvsp[(2) - (2)]).mode,0); }
+     break;
+   case 60:
++
++/* Line 1806 of yacc.c  */
+ #line 402 "parser.y"
+-    { yyval.value = makeop(yyvsp[-1].op,NULL,4); }
++    { (yyval).value = makeop((yyvsp[(1) - (2)]).op,NULL,4); }
+     break;
+   case 61:
++
++/* Line 1806 of yacc.c  */
+ #line 404 "parser.y"
+-    { yyval.value = makeop(yyvsp[-1].op,&yyvsp[0].mode,0); }
++    { (yyval).value = makeop((yyvsp[(1) - (2)]).op,&(yyvsp[(2) - (2)]).mode,0); }
+     break;
+   case 62:
++
++/* Line 1806 of yacc.c  */
+ #line 406 "parser.y"
+-    { yyval.value = makeop(yyvsp[-1].op,NULL,0); }
++    { (yyval).value = makeop((yyvsp[(1) - (2)]).op,NULL,0); }
+     break;
+   case 63:
++
++/* Line 1806 of yacc.c  */
+ #line 408 "parser.y"
+-    { yyval.value = makeop(yyvsp[-1].op,NULL,0); }
++    { (yyval).value = makeop((yyvsp[(1) - (2)]).op,NULL,0); }
+     break;
+   case 64:
++
++/* Line 1806 of yacc.c  */
+ #line 410 "parser.y"
+-    { yyval.value = makeop(yyvsp[-4].op,NULL,0); }
++    { (yyval).value = makeop((yyvsp[(1) - (5)]).op,NULL,0); }
+     break;
+   case 65:
++
++/* Line 1806 of yacc.c  */
+ #line 412 "parser.y"
+-    { yyval.value = makeop(yyvsp[-4].op,NULL,0); }
++    { (yyval).value = makeop((yyvsp[(1) - (5)]).op,NULL,0); }
+     break;
+   case 66:
++
++/* Line 1806 of yacc.c  */
+ #line 414 "parser.y"
+-    { yyval.value = makeop(yyvsp[-1].op,NULL,0); }
++    { (yyval).value = makeop((yyvsp[(1) - (2)]).op,NULL,0); }
+     break;
+   case 67:
++
++/* Line 1806 of yacc.c  */
+ #line 416 "parser.y"
+-    { yyval.value = makeop(yyvsp[0].op,NULL,0); }
++    { (yyval).value = makeop((yyvsp[(1) - (1)]).op,NULL,0); }
+     break;
+   case 68:
++
++/* Line 1806 of yacc.c  */
+ #line 418 "parser.y"
+-    { yyval.value = makeop(yyvsp[0].op,NULL,0); }
++    { (yyval).value = makeop((yyvsp[(1) - (1)]).op,NULL,0); }
+     break;
+   case 69:
++
++/* Line 1806 of yacc.c  */
+ #line 420 "parser.y"
+-    { yyval.value = makeop(yyvsp[-1].op,NULL,0); }
++    { (yyval).value = makeop((yyvsp[(1) - (2)]).op,NULL,0); }
+     break;
+   case 70:
++
++/* Line 1806 of yacc.c  */
+ #line 422 "parser.y"
+-    { yyval.value = makeop(yyvsp[-1].op,NULL,0); }
++    { (yyval).value = makeop((yyvsp[(1) - (2)]).op,NULL,0); }
+     break;
+   case 71:
++
++/* Line 1806 of yacc.c  */
+ #line 424 "parser.y"
+-    { yyval.value = makeop(yyvsp[-1].op,NULL,0); }
++    { (yyval).value = makeop((yyvsp[(1) - (2)]).op,NULL,0); }
+     break;
+   case 72:
++
++/* Line 1806 of yacc.c  */
+ #line 426 "parser.y"
+-    { yyval.value = makeop(yyvsp[-1].op,NULL,0); }
++    { (yyval).value = makeop((yyvsp[(1) - (2)]).op,NULL,0); }
+     break;
+   case 73:
++
++/* Line 1806 of yacc.c  */
+ #line 428 "parser.y"
+-    { yyval.value = makeop(yyvsp[-1].op,NULL,0); }
++    { (yyval).value = makeop((yyvsp[(1) - (2)]).op,NULL,0); }
+     break;
+   case 74:
++
++/* Line 1806 of yacc.c  */
+ #line 430 "parser.y"
+-    { if( get_md(yyvsp[0].mode) != 2 )
++    { if( get_md((yyvsp[(2) - (2)]).mode) != 2 )
+                                       warn("Invalid addressing mode");
+-                                yyval.value = makeop(yyvsp[-1].op,&yyvsp[0].mode,-2); }
++                                (yyval).value = makeop((yyvsp[(1) - (2)]).op,&(yyvsp[(2) - (2)]).mode,-2); }
+     break;
+   case 75:
++
++/* Line 1806 of yacc.c  */
+ #line 434 "parser.y"
+-    { yyval.value = makeop(yyvsp[-1].op,&yyvsp[0].mode,0); }
++    { (yyval).value = makeop((yyvsp[(1) - (2)]).op,&(yyvsp[(2) - (2)]).mode,0); }
+     break;
+   case 76:
++
++/* Line 1806 of yacc.c  */
+ #line 436 "parser.y"
+-    { yyval.value = makeop(yyvsp[-1].op,&yyvsp[0].mode,0); }
++    { (yyval).value = makeop((yyvsp[(1) - (2)]).op,&(yyvsp[(2) - (2)]).mode,0); }
+     break;
+   case 77:
++
++/* Line 1806 of yacc.c  */
+ #line 438 "parser.y"
+-    { if( get_md(yyvsp[0].mode) == 0 )
++    { if( get_md((yyvsp[(2) - (2)]).mode) == 0 )
+                                       warn("Invalid addressing mode");
+-                                yyval.value = makeop(yyvsp[-1].op,&yyvsp[0].mode,-1); }
++                                (yyval).value = makeop((yyvsp[(1) - (2)]).op,&(yyvsp[(2) - (2)]).mode,-1); }
+     break;
+   case 78:
++
++/* Line 1806 of yacc.c  */
+ #line 442 "parser.y"
+     {
+                                  struct mode tmp;
+                                       set_md(tmp,0);
+                                       set_ov(tmp,0);
+                                       set_sz(tmp,1);
+-                                      set_b1(tmp,yyvsp[0].value);
+-                                      yyval.value = makeop(yyvsp[-1].op,&tmp,0);
++                                      set_b1(tmp,(yyvsp[(2) - (2)]).value);
++                                      (yyval).value = makeop((yyvsp[(1) - (2)]).op,&tmp,0);
+                               }
+     break;
+   case 79:
++
++/* Line 1806 of yacc.c  */
+ #line 451 "parser.y"
+     {
+                                  struct mode tmp;
+                                       set_md(tmp,0);
+                                       set_ov(tmp,0);
+                                       set_sz(tmp,1);
+-                                      set_b1(tmp,yyvsp[0].value);
+-                                      yyval.value = makeop(yyvsp[-1].op,&tmp,0);
++                                      set_b1(tmp,(yyvsp[(2) - (2)]).value);
++                                      (yyval).value = makeop((yyvsp[(1) - (2)]).op,&tmp,0);
+                               }
+     break;
+   case 80:
++
++/* Line 1806 of yacc.c  */
+ #line 460 "parser.y"
+-    { yyval.value = makeop(yyvsp[-1].op,&yyvsp[0].mode,0); }
++    { (yyval).value = makeop((yyvsp[(1) - (2)]).op,&(yyvsp[(2) - (2)]).mode,0); }
+     break;
+   case 81:
++
++/* Line 1806 of yacc.c  */
+ #line 462 "parser.y"
+-    { yyval.value = makeop(yyvsp[-1].op,&yyvsp[0].mode,0); }
++    { (yyval).value = makeop((yyvsp[(1) - (2)]).op,&(yyvsp[(2) - (2)]).mode,0); }
+     break;
+   case 82:
++
++/* Line 1806 of yacc.c  */
+ #line 464 "parser.y"
+-    { yyval.value = makeop(yyvsp[-1].op,&yyvsp[0].mode,0); }
++    { (yyval).value = makeop((yyvsp[(1) - (2)]).op,&(yyvsp[(2) - (2)]).mode,0); }
+     break;
+   case 83:
++
++/* Line 1806 of yacc.c  */
+ #line 466 "parser.y"
+-    { yyval.value = makeop(yyvsp[-1].op,&yyvsp[0].mode,0); }
++    { (yyval).value = makeop((yyvsp[(1) - (2)]).op,&(yyvsp[(2) - (2)]).mode,0); }
+     break;
+   case 84:
++
++/* Line 1806 of yacc.c  */
+ #line 468 "parser.y"
+-    { yyval.value = makeop(yyvsp[-1].op,&yyvsp[0].mode,0); }
++    { (yyval).value = makeop((yyvsp[(1) - (2)]).op,&(yyvsp[(2) - (2)]).mode,0); }
+     break;
+   case 85:
++
++/* Line 1806 of yacc.c  */
+ #line 470 "parser.y"
+-    { yyval.value = makeop(yyvsp[-1].op,&yyvsp[0].mode,0); }
++    { (yyval).value = makeop((yyvsp[(1) - (2)]).op,&(yyvsp[(2) - (2)]).mode,0); }
+     break;
+   case 86:
++
++/* Line 1806 of yacc.c  */
+ #line 472 "parser.y"
+-    { yyval.value = makeop(yyvsp[-1].op,&yyvsp[0].mode,0); }
++    { (yyval).value = makeop((yyvsp[(1) - (2)]).op,&(yyvsp[(2) - (2)]).mode,0); }
+     break;
+   case 87:
++
++/* Line 1806 of yacc.c  */
+ #line 474 "parser.y"
+-    { yyval.value = makeop(yyvsp[-1].op,&yyvsp[0].mode,0); }
++    { (yyval).value = makeop((yyvsp[(1) - (2)]).op,&(yyvsp[(2) - (2)]).mode,0); }
+     break;
+   case 88:
++
++/* Line 1806 of yacc.c  */
+ #line 476 "parser.y"
+-    { yyval.value = makeop(yyvsp[-1].op,&yyvsp[0].mode,0); }
++    { (yyval).value = makeop((yyvsp[(1) - (2)]).op,&(yyvsp[(2) - (2)]).mode,0); }
+     break;
+   case 89:
++
++/* Line 1806 of yacc.c  */
+ #line 478 "parser.y"
+-    { yyval.value = makeop(yyvsp[-1].op,&yyvsp[0].mode,0); }
++    { (yyval).value = makeop((yyvsp[(1) - (2)]).op,&(yyvsp[(2) - (2)]).mode,0); }
+     break;
+   case 90:
++
++/* Line 1806 of yacc.c  */
+ #line 480 "parser.y"
+-    { yyval.value = makeop(yyvsp[-1].op,&yyvsp[0].mode,0); }
++    { (yyval).value = makeop((yyvsp[(1) - (2)]).op,&(yyvsp[(2) - (2)]).mode,0); }
+     break;
+   case 91:
++
++/* Line 1806 of yacc.c  */
+ #line 482 "parser.y"
+-    { yyval.value = makeop(yyvsp[-1].op,&yyvsp[0].mode,0); }
++    { (yyval).value = makeop((yyvsp[(1) - (2)]).op,&(yyvsp[(2) - (2)]).mode,0); }
+     break;
+   case 92:
++
++/* Line 1806 of yacc.c  */
+ #line 484 "parser.y"
+-    { yyval.value = makeop(yyvsp[-1].op,&yyvsp[0].mode,0); }
++    { (yyval).value = makeop((yyvsp[(1) - (2)]).op,&(yyvsp[(2) - (2)]).mode,0); }
+     break;
+   case 93:
++
++/* Line 1806 of yacc.c  */
+ #line 486 "parser.y"
+-    { yyval.value = makeop(yyvsp[-1].op,&yyvsp[0].mode,4); }
++    { (yyval).value = makeop((yyvsp[(1) - (2)]).op,&(yyvsp[(2) - (2)]).mode,4); }
+     break;
+   case 94:
++
++/* Line 1806 of yacc.c  */
+ #line 488 "parser.y"
+-    { yyval.value = makeop(yyvsp[-1].op,&yyvsp[0].mode,6); }
++    { (yyval).value = makeop((yyvsp[(1) - (2)]).op,&(yyvsp[(2) - (2)]).mode,6); }
+     break;
+   case 95:
++
++/* Line 1806 of yacc.c  */
+ #line 492 "parser.y"
+-    { yyval.value = makeop(yyvsp[-6].op,NULL,0); }
++    { (yyval).value = makeop((yyvsp[(1) - (7)]).op,NULL,0); }
+     break;
+   case 96:
++
++/* Line 1806 of yacc.c  */
+ #line 494 "parser.y"
+-    { yyval.value = makeop(yyvsp[-6].op,NULL,0); }
++    { (yyval).value = makeop((yyvsp[(1) - (7)]).op,NULL,0); }
+     break;
+   case 97:
++
++/* Line 1806 of yacc.c  */
+ #line 496 "parser.y"
+-    { yyval.value = makeop(yyvsp[-6].op,NULL,1); }
++    { (yyval).value = makeop((yyvsp[(1) - (7)]).op,NULL,1); }
+     break;
+   case 98:
++
++/* Line 1806 of yacc.c  */
+ #line 498 "parser.y"
+-    { yyval.value = makeop(yyvsp[-6].op,NULL,1); }
++    { (yyval).value = makeop((yyvsp[(1) - (7)]).op,NULL,1); }
+     break;
+   case 99:
++
++/* Line 1806 of yacc.c  */
+ #line 501 "parser.y"
+-    { yyval.value = makeop(yyvsp[-4].op,NULL,yyvsp[0].value); }
++    { (yyval).value = makeop((yyvsp[(1) - (5)]).op,NULL,(yyvsp[(5) - (5)]).value); }
+     break;
+   case 100:
++
++/* Line 1806 of yacc.c  */
+ #line 503 "parser.y"
+-    { yyval.value = makeop(yyvsp[-4].op,NULL,2); }
++    { (yyval).value = makeop((yyvsp[(1) - (5)]).op,NULL,2); }
+     break;
+   case 101:
++
++/* Line 1806 of yacc.c  */
+ #line 505 "parser.y"
+-    { yyval.value = makeop(yyvsp[-4].op,NULL,yyvsp[-2].value+3); }
++    { (yyval).value = makeop((yyvsp[(1) - (5)]).op,NULL,(yyvsp[(3) - (5)]).value+3); }
+     break;
+   case 102:
++
++/* Line 1806 of yacc.c  */
+ #line 507 "parser.y"
+-    { yyval.value = makeop(yyvsp[-4].op,NULL,5); }
++    { (yyval).value = makeop((yyvsp[(1) - (5)]).op,NULL,5); }
+     break;
+   case 103:
++
++/* Line 1806 of yacc.c  */
+ #line 519 "parser.y"
+     {
+-                                      set_md(yyval.mode,0);
+-                                      set_ov(yyval.mode, yyvsp[0].value);
+-                                      set_sz(yyval.mode, 0);
++                                      set_md((yyval).mode,0);
++                                      set_ov((yyval).mode, (yyvsp[(3) - (3)]).value);
++                                      set_sz((yyval).mode, 0);
+                               }
+     break;
+   case 104:
++
++/* Line 1806 of yacc.c  */
+ #line 525 "parser.y"
+     {
+-                                      set_md(yyval.mode,1);
+-                                      set_ov(yyval.mode,0);
+-                                      set_sz(yyval.mode,1);
+-                                      set_b1(yyval.mode,yyvsp[0].value);
++                                      set_md((yyval).mode,1);
++                                      set_ov((yyval).mode,0);
++                                      set_sz((yyval).mode,1);
++                                      set_b1((yyval).mode,(yyvsp[(3) - (3)]).value);
+                               }
+     break;
+   case 105:
++
++/* Line 1806 of yacc.c  */
+ #line 532 "parser.y"
+     {
+-                                      set_md(yyval.mode,2);
+-                                      set_ov(yyval.mode,yyvsp[0].value);
+-                                      set_sz(yyval.mode,0);
++                                      set_md((yyval).mode,2);
++                                      set_ov((yyval).mode,(yyvsp[(4) - (4)]).value);
++                                      set_sz((yyval).mode,0);
+                               }
+     break;
+   case 106:
++
++/* Line 1806 of yacc.c  */
+ #line 538 "parser.y"
+     {
+-                                      set_md(yyval.mode,3);
+-                                      set_ov(yyval.mode,0);
+-                                      set_sz(yyval.mode,1);
+-                                      set_b1(yyval.mode,yyvsp[0].value);
++                                      set_md((yyval).mode,3);
++                                      set_ov((yyval).mode,0);
++                                      set_sz((yyval).mode,1);
++                                      set_b1((yyval).mode,(yyvsp[(4) - (4)]).value);
+                               }
+     break;
+   case 107:
++
++/* Line 1806 of yacc.c  */
+ #line 547 "parser.y"
+     {
+-                                      set_md(yyval.mode,0);
+-                                      set_ov(yyval.mode,0);
+-                                      set_sz(yyval.mode,1);
+-                                      set_b1(yyval.mode,yyvsp[-2].value);
++                                      set_md((yyval).mode,0);
++                                      set_ov((yyval).mode,0);
++                                      set_sz((yyval).mode,1);
++                                      set_b1((yyval).mode,(yyvsp[(1) - (3)]).value);
+                               }
+     break;
+   case 108:
++
++/* Line 1806 of yacc.c  */
+ #line 554 "parser.y"
+     {
+-                                      set_md(yyval.mode,1);
+-                                      set_ov(yyval.mode,0);
+-                                      set_sz(yyval.mode,2);
+-                                      set_b1(yyval.mode,yyvsp[-3].value);
+-                                      set_b2(yyval.mode,yyvsp[0].value);
++                                      set_md((yyval).mode,1);
++                                      set_ov((yyval).mode,0);
++                                      set_sz((yyval).mode,2);
++                                      set_b1((yyval).mode,(yyvsp[(1) - (4)]).value);
++                                      set_b2((yyval).mode,(yyvsp[(4) - (4)]).value);
+                               }
+     break;
+   case 109:
++
++/* Line 1806 of yacc.c  */
+ #line 564 "parser.y"
+     {
+-                                      set_md(yyval.mode,0);
+-                                      set_ov(yyval.mode,0);
+-                                      set_sz(yyval.mode,1);
+-                                      set_b1(yyval.mode,yyvsp[0].value);
++                                      set_md((yyval).mode,0);
++                                      set_ov((yyval).mode,0);
++                                      set_sz((yyval).mode,1);
++                                      set_b1((yyval).mode,(yyvsp[(3) - (3)]).value);
+                               }
+     break;
+   case 110:
++
++/* Line 1806 of yacc.c  */
+ #line 571 "parser.y"
+     {
+-                                      set_md(yyval.mode,1);
+-                                      set_ov(yyval.mode,0);
+-                                      set_sz(yyval.mode,1);
+-                                      set_b1(yyval.mode,yyvsp[0].value);
++                                      set_md((yyval).mode,1);
++                                      set_ov((yyval).mode,0);
++                                      set_sz((yyval).mode,1);
++                                      set_b1((yyval).mode,(yyvsp[(4) - (4)]).value);
+                               }
+     break;
+   case 111:
++
++/* Line 1806 of yacc.c  */
+ #line 578 "parser.y"
+     {
+-                                      set_md(yyval.mode,1);
+-                                      set_ov(yyval.mode,0);
+-                                      set_sz(yyval.mode,1);
+-                                      set_b1(yyval.mode,yyvsp[0].value);
++                                      set_md((yyval).mode,1);
++                                      set_ov((yyval).mode,0);
++                                      set_sz((yyval).mode,1);
++                                      set_b1((yyval).mode,(yyvsp[(4) - (4)]).value);
+                               }
+     break;
+   case 112:
++
++/* Line 1806 of yacc.c  */
+ #line 587 "parser.y"
+     {
+-                                      set_md(yyval.mode,0);
+-                                      set_ov(yyval.mode,0);
+-                                      set_sz(yyval.mode,2);
+-                                      set_b1(yyval.mode,yyvsp[-2].value);
+-                                      set_b2(yyval.mode,yyvsp[0].value);
++                                      set_md((yyval).mode,0);
++                                      set_ov((yyval).mode,0);
++                                      set_sz((yyval).mode,2);
++                                      set_b1((yyval).mode,(yyvsp[(1) - (3)]).value);
++                                      set_b2((yyval).mode,(yyvsp[(3) - (3)]).value);
+                               }
+     break;
+   case 113:
++
++/* Line 1806 of yacc.c  */
+ #line 597 "parser.y"
+     {
+-                                      set_md(yyval.mode,0);
+-                                      set_ov(yyval.mode,yyvsp[-2].value);
+-                                      set_sz(yyval.mode,1);
+-                                      set_b1(yyval.mode,yyvsp[0].value);
++                                      set_md((yyval).mode,0);
++                                      set_ov((yyval).mode,(yyvsp[(1) - (3)]).value);
++                                      set_sz((yyval).mode,1);
++                                      set_b1((yyval).mode,(yyvsp[(3) - (3)]).value);
+                               }
+     break;
+   case 114:
++
++/* Line 1806 of yacc.c  */
+ #line 604 "parser.y"
+     {
+-                                      set_md(yyval.mode,1);
+-                                      set_ov(yyval.mode,0);
+-                                      set_sz(yyval.mode,2);
+-                                      set_b1(yyval.mode,yyvsp[-2].value);
+-                                      set_b2(yyval.mode,yyvsp[0].value);
++                                      set_md((yyval).mode,1);
++                                      set_ov((yyval).mode,0);
++                                      set_sz((yyval).mode,2);
++                                      set_b1((yyval).mode,(yyvsp[(1) - (3)]).value);
++                                      set_b2((yyval).mode,(yyvsp[(3) - (3)]).value);
+                               }
+     break;
+   case 115:
++
++/* Line 1806 of yacc.c  */
+ #line 614 "parser.y"
+     {
+-                                      set_md(yyval.mode,0);
+-                                      set_ov(yyval.mode,yyvsp[-2].value);
+-                                      set_sz(yyval.mode,0);
++                                      set_md((yyval).mode,0);
++                                      set_ov((yyval).mode,(yyvsp[(1) - (3)]).value);
++                                      set_sz((yyval).mode,0);
+                               }
+     break;
+   case 116:
++
++/* Line 1806 of yacc.c  */
+ #line 620 "parser.y"
+     {
+-                                      set_md(yyval.mode,1);
+-                                      set_ov(yyval.mode,yyvsp[-2].value);
+-                                      set_sz(yyval.mode,1);
+-                                      set_b1(yyval.mode,yyvsp[0].value);
++                                      set_md((yyval).mode,1);
++                                      set_ov((yyval).mode,(yyvsp[(1) - (3)]).value);
++                                      set_sz((yyval).mode,1);
++                                      set_b1((yyval).mode,(yyvsp[(3) - (3)]).value);
+                               }
+     break;
+   case 117:
++
++/* Line 1806 of yacc.c  */
+ #line 627 "parser.y"
+     {
+-                                      set_md(yyval.mode,2);
+-                                      set_ov(yyval.mode,yyvsp[-3].value);
+-                                      set_sz(yyval.mode,1);
+-                                      set_b1(yyval.mode,yyvsp[0].value);
++                                      set_md((yyval).mode,2);
++                                      set_ov((yyval).mode,(yyvsp[(1) - (4)]).value);
++                                      set_sz((yyval).mode,1);
++                                      set_b1((yyval).mode,(yyvsp[(4) - (4)]).value);
+                               }
+     break;
+   case 118:
++
++/* Line 1806 of yacc.c  */
+ #line 634 "parser.y"
+     {
+-                                      set_md(yyval.mode,3);
+-                                      set_ov(yyval.mode,yyvsp[0].value);
+-                                      set_sz(yyval.mode,1);
+-                                      set_b1(yyval.mode,yyvsp[-2].value);
++                                      set_md((yyval).mode,3);
++                                      set_ov((yyval).mode,(yyvsp[(3) - (3)]).value);
++                                      set_sz((yyval).mode,1);
++                                      set_b1((yyval).mode,(yyvsp[(1) - (3)]).value);
+                               }
+     break;
+   case 119:
++
++/* Line 1806 of yacc.c  */
+ #line 641 "parser.y"
+     {
+-                                      set_md(yyval.mode,4);
+-                                      set_ov(yyval.mode,0);
+-                                      set_sz(yyval.mode,2);
+-                                      set_b1(yyval.mode,yyvsp[0].value);
+-                                      set_b2(yyval.mode,yyvsp[-2].value);
++                                      set_md((yyval).mode,4);
++                                      set_ov((yyval).mode,0);
++                                      set_sz((yyval).mode,2);
++                                      set_b1((yyval).mode,(yyvsp[(3) - (3)]).value);
++                                      set_b2((yyval).mode,(yyvsp[(1) - (3)]).value);
+                               }
+     break;
+   case 120:
++
++/* Line 1806 of yacc.c  */
+ #line 649 "parser.y"
+     {
+-                                      set_md(yyval.mode,5);
+-                                      set_ov(yyval.mode,yyvsp[0].value);
+-                                      set_sz(yyval.mode,1);
+-                                      set_b1(yyval.mode,yyvsp[-3].value);
++                                      set_md((yyval).mode,5);
++                                      set_ov((yyval).mode,(yyvsp[(4) - (4)]).value);
++                                      set_sz((yyval).mode,1);
++                                      set_b1((yyval).mode,(yyvsp[(1) - (4)]).value);
+                               }
+     break;
+   case 121:
++
++/* Line 1806 of yacc.c  */
+ #line 656 "parser.y"
+     {
+-                                      set_md(yyval.mode,6);
+-                                      set_ov(yyval.mode,yyvsp[-2].value);
+-                                      set_sz(yyval.mode,0);
++                                      set_md((yyval).mode,6);
++                                      set_ov((yyval).mode,(yyvsp[(2) - (4)]).value);
++                                      set_sz((yyval).mode,0);
+                               }
+     break;
+   case 122:
++
++/* Line 1806 of yacc.c  */
+ #line 662 "parser.y"
+     {
+-                                      set_md(yyval.mode,7);
+-                                      set_ov(yyval.mode,yyvsp[-2].value);
+-                                      set_sz(yyval.mode,1);
+-                                      set_b1(yyval.mode,yyvsp[0].value);
++                                      set_md((yyval).mode,7);
++                                      set_ov((yyval).mode,(yyvsp[(2) - (4)]).value);
++                                      set_sz((yyval).mode,1);
++                                      set_b1((yyval).mode,(yyvsp[(4) - (4)]).value);
+                               }
+     break;
+   case 123:
++
++/* Line 1806 of yacc.c  */
+ #line 669 "parser.y"
+     {
+-                                      set_md(yyval.mode,8);
+-                                      set_ov(yyval.mode,yyvsp[-3].value);
+-                                      set_sz(yyval.mode,1);
+-                                      set_b1(yyval.mode,yyvsp[0].value);
++                                      set_md((yyval).mode,8);
++                                      set_ov((yyval).mode,(yyvsp[(2) - (5)]).value);
++                                      set_sz((yyval).mode,1);
++                                      set_b1((yyval).mode,(yyvsp[(5) - (5)]).value);
+                               }
+     break;
+   case 124:
++
++/* Line 1806 of yacc.c  */
+ #line 676 "parser.y"
+     {
+-                              set_md(yyval.mode,9);
+-                              set_ov(yyval.mode,0);
+-                              set_sz(yyval.mode,2);
+-                              set_b1(yyval.mode, (yyvsp[0].value & 0xff00) >> 8 );
+-                              set_b2(yyval.mode, (yyvsp[0].value & 0x00ff) );
++                              set_md((yyval).mode,9);
++                              set_ov((yyval).mode,0);
++                              set_sz((yyval).mode,2);
++                              set_b1((yyval).mode, ((yyvsp[(4) - (4)]).value & 0xff00) >> 8 );
++                              set_b2((yyval).mode, ((yyvsp[(4) - (4)]).value & 0x00ff) );
+                       }
+     break;
+   case 125:
++
++/* Line 1806 of yacc.c  */
+ #line 684 "parser.y"
+     {
+-                                      set_md(yyval.mode,10);
+-                                      set_ov(yyval.mode,0);
+-                                      set_sz(yyval.mode,1);
+-                                      set_b1(yyval.mode,yyvsp[0].value);
++                                      set_md((yyval).mode,10);
++                                      set_ov((yyval).mode,0);
++                                      set_sz((yyval).mode,1);
++                                      set_b1((yyval).mode,(yyvsp[(3) - (3)]).value);
+                               }
+     break;
+   case 126:
++
++/* Line 1806 of yacc.c  */
+ #line 700 "parser.y"
+     {
+-                                      set_md(yyval.mode,11);
+-                                      set_ov(yyval.mode,0);
+-                                      set_sz(yyval.mode,1);
+-                                      set_b1(yyval.mode,yyvsp[-2].value);
++                                      set_md((yyval).mode,11);
++                                      set_ov((yyval).mode,0);
++                                      set_sz((yyval).mode,1);
++                                      set_b1((yyval).mode,(yyvsp[(1) - (3)]).value);
+                               }
+     break;
+   case 127:
++
++/* Line 1806 of yacc.c  */
+ #line 707 "parser.y"
+     {
+       if( pass2 ) {
+-              if( !isbit8(yyvsp[-3].value) )
++              if( !isbit8((yyvsp[(1) - (4)]).value) )
+                       warn("Bit address exceeds 8-bits");
+-              if( isbmram(yyvsp[-3].value) )
+-                      set_b1(yyval.mode, (yyvsp[-3].value-0x20)*8+ yyvsp[-2].value );
+-              else if( isbmsfr(yyvsp[-3].value) )
+-                      set_b1(yyval.mode, yyvsp[-3].value + yyvsp[-2].value );
++              if( isbmram((yyvsp[(1) - (4)]).value) )
++                      set_b1((yyval).mode, ((yyvsp[(1) - (4)]).value-0x20)*8+ (yyvsp[(2) - (4)]).value );
++              else if( isbmsfr((yyvsp[(1) - (4)]).value) )
++                      set_b1((yyval).mode, (yyvsp[(1) - (4)]).value + (yyvsp[(2) - (4)]).value );
+               else
+                       warn("Invalid bit addressable RAM location");
+       }
+-      set_md(yyval.mode,11);
+-      set_ov(yyval.mode,0);
+-      set_sz(yyval.mode,1);
++      set_md((yyval).mode,11);
++      set_ov((yyval).mode,0);
++      set_sz((yyval).mode,1);
+ }
+     break;
+   case 128:
++
++/* Line 1806 of yacc.c  */
+ #line 726 "parser.y"
+     {
+-                                      set_md(yyval.mode,0);
+-                                      set_ov(yyval.mode,0);
+-                                      set_sz(yyval.mode,0);
++                                      set_md((yyval).mode,0);
++                                      set_ov((yyval).mode,0);
++                                      set_sz((yyval).mode,0);
+                               }
+     break;
+   case 129:
++
++/* Line 1806 of yacc.c  */
+ #line 733 "parser.y"
+     {
+-                                      set_md(yyval.mode,1);
+-                                      set_ov(yyval.mode,yyvsp[0].value);
+-                                      set_sz(yyval.mode,0);
++                                      set_md((yyval).mode,1);
++                                      set_ov((yyval).mode,(yyvsp[(1) - (1)]).value);
++                                      set_sz((yyval).mode,0);
+                               }
+     break;
+   case 130:
++
++/* Line 1806 of yacc.c  */
+ #line 739 "parser.y"
+     {
+-                                      set_md(yyval.mode,2);
+-                                      set_ov(yyval.mode,0);
+-                                      set_sz(yyval.mode,1);
+-                                      set_b1(yyval.mode,yyvsp[0].value);
++                                      set_md((yyval).mode,2);
++                                      set_ov((yyval).mode,0);
++                                      set_sz((yyval).mode,1);
++                                      set_b1((yyval).mode,(yyvsp[(1) - (1)]).value);
+                               }
+     break;
+   case 131:
++
++/* Line 1806 of yacc.c  */
+ #line 746 "parser.y"
+     {
+-                                      set_md(yyval.mode,3);
+-                                      set_ov(yyval.mode,yyvsp[0].value);
+-                                      set_sz(yyval.mode,0);
++                                      set_md((yyval).mode,3);
++                                      set_ov((yyval).mode,(yyvsp[(2) - (2)]).value);
++                                      set_sz((yyval).mode,0);
+                               }
+     break;
+   case 132:
++
++/* Line 1806 of yacc.c  */
+ #line 754 "parser.y"
+     {
+-                                      set_md(yyval.mode,0);
+-                                      set_ov(yyval.mode,0);
+-                                      set_sz(yyval.mode,0);
++                                      set_md((yyval).mode,0);
++                                      set_ov((yyval).mode,0);
++                                      set_sz((yyval).mode,0);
+                               }
+     break;
+   case 133:
++
++/* Line 1806 of yacc.c  */
+ #line 760 "parser.y"
+     {
+-                                      set_md(yyval.mode,1);
+-                                      set_ov(yyval.mode,0);
+-                                      set_sz(yyval.mode,0);
++                                      set_md((yyval).mode,1);
++                                      set_ov((yyval).mode,0);
++                                      set_sz((yyval).mode,0);
+                               }
+     break;
+   case 134:
++
++/* Line 1806 of yacc.c  */
+ #line 766 "parser.y"
+     {
+-                                      set_md(yyval.mode,2);
+-                                      set_ov(yyval.mode,0);
+-                                      set_sz(yyval.mode,1);
+-                                      set_b1(yyval.mode,yyvsp[0].value);
++                                      set_md((yyval).mode,2);
++                                      set_ov((yyval).mode,0);
++                                      set_sz((yyval).mode,1);
++                                      set_b1((yyval).mode,(yyvsp[(1) - (1)]).value);
+                               }
+     break;
+   case 135:
++
++/* Line 1806 of yacc.c  */
+ #line 775 "parser.y"
+     {
+-                                      set_md(yyval.mode,0);
+-                                      set_ov(yyval.mode,0);
+-                                      set_sz(yyval.mode,2);
+-                                      set_b1(yyval.mode,yyvsp[-2].value);
+-                                      set_b2(yyval.mode,yyvsp[0].value);
++                                      set_md((yyval).mode,0);
++                                      set_ov((yyval).mode,0);
++                                      set_sz((yyval).mode,2);
++                                      set_b1((yyval).mode,(yyvsp[(3) - (5)]).value);
++                                      set_b2((yyval).mode,(yyvsp[(5) - (5)]).value);
+                               }
+     break;
+   case 136:
++
++/* Line 1806 of yacc.c  */
+ #line 783 "parser.y"
+     {
+-                                      set_md(yyval.mode,1);
+-                                      set_ov(yyval.mode,0);
+-                                      set_sz(yyval.mode,2);
+-                                      set_b1(yyval.mode,yyvsp[-2].value);
+-                                      set_b2(yyval.mode,yyvsp[0].value);
++                                      set_md((yyval).mode,1);
++                                      set_ov((yyval).mode,0);
++                                      set_sz((yyval).mode,2);
++                                      set_b1((yyval).mode,(yyvsp[(4) - (6)]).value);
++                                      set_b2((yyval).mode,(yyvsp[(6) - (6)]).value);
+                               }
+     break;
+   case 137:
++
++/* Line 1806 of yacc.c  */
+ #line 791 "parser.y"
+     {
+-                                      set_md(yyval.mode,2);
+-                                      set_ov(yyval.mode,yyvsp[-5].value);
+-                                      set_sz(yyval.mode,2);
+-                                      set_b1(yyval.mode,yyvsp[-2].value);
+-                                      set_b2(yyval.mode,yyvsp[0].value);
++                                      set_md((yyval).mode,2);
++                                      set_ov((yyval).mode,(yyvsp[(1) - (6)]).value);
++                                      set_sz((yyval).mode,2);
++                                      set_b1((yyval).mode,(yyvsp[(4) - (6)]).value);
++                                      set_b2((yyval).mode,(yyvsp[(6) - (6)]).value);
+                               }
+     break;
+   case 138:
++
++/* Line 1806 of yacc.c  */
+ #line 799 "parser.y"
+     {
+-                                      set_md(yyval.mode,3);
+-                                      set_ov(yyval.mode,yyvsp[-5].value);
+-                                      set_sz(yyval.mode,2);
+-                                      set_b1(yyval.mode,yyvsp[-2].value);
+-                                      set_b2(yyval.mode,yyvsp[0].value);
++                                      set_md((yyval).mode,3);
++                                      set_ov((yyval).mode,(yyvsp[(2) - (7)]).value);
++                                      set_sz((yyval).mode,2);
++                                      set_b1((yyval).mode,(yyvsp[(5) - (7)]).value);
++                                      set_b2((yyval).mode,(yyvsp[(7) - (7)]).value);
+                               }
+     break;
+   case 139:
++
++/* Line 1806 of yacc.c  */
+ #line 809 "parser.y"
+     {
+               long offset;
+               if( pass2 ) {
+-                      offset = yyvsp[0].val.v - (lc+3);
++                      offset = (yyvsp[(1) - (1)]).val.v - (lc+3);
+                       if( offset > 127 || offset < -128 )
+                          warn("Relative offset exceeds -128 / +127");
+-                      yyval.value = offset;
++                      (yyval).value = offset;
+               }
+ }
+     break;
+   case 140:
++
++/* Line 1806 of yacc.c  */
+ #line 826 "parser.y"
+     {
+               long offset;
+               if( pass2 ) {
+-                      offset = yyvsp[0].val.v - (lc+2); /* different! */
++                      offset = (yyvsp[(1) - (1)]).val.v - (lc+2); /* different! */
+                       if( offset > 127 || offset < -128 )
+                          warn("Relative offset exceeds -128 / +127");
+-                      yyval.value = offset;
++                      (yyval).value = offset;
+               }
+ }
+     break;
+   case 141:
++
++/* Line 1806 of yacc.c  */
+ #line 839 "parser.y"
+     {
+       if( pass2 ) {
+-              if( !isbit8(yyvsp[-1].value) )
++              if( !isbit8((yyvsp[(1) - (2)]).value) )
+                       warn("Bit address exceeds 8-bits");
+-              if( isbmram(yyvsp[-1].value) )
+-                      yyval.value = (yyvsp[-1].value-0x20)*8+yyvsp[0].value;
+-              else if( isbmsfr(yyvsp[-1].value) )
+-                      yyval.value = yyvsp[-1].value + yyvsp[0].value;
++              if( isbmram((yyvsp[(1) - (2)]).value) )
++                      (yyval).value = ((yyvsp[(1) - (2)]).value-0x20)*8+(yyvsp[(2) - (2)]).value;
++              else if( isbmsfr((yyvsp[(1) - (2)]).value) )
++                      (yyval).value = (yyvsp[(1) - (2)]).value + (yyvsp[(2) - (2)]).value;
+               else
+                       warn("Invalid bit addressable RAM location");
+       }
+@@ -2529,201 +3173,259 @@ yyreduce:
+     break;
+   case 142:
++
++/* Line 1806 of yacc.c  */
+ #line 852 "parser.y"
+     {
+       if( pass2 ) {
+-              if( !isbit8(yyvsp[0].value) )
++              if( !isbit8((yyvsp[(1) - (1)]).value) )
+                       warn("Bit address exceeds 8-bits");
+-              yyval.value = yyvsp[0].value;
++              (yyval).value = (yyvsp[(1) - (1)]).value;
+       }
+ }
+     break;
+   case 143:
++
++/* Line 1806 of yacc.c  */
+ #line 862 "parser.y"
+     {
+-      if( yyvsp[0].sym->type == UNDEF && pass2 )
+-              warn("Symbol %s undefined",yyvsp[0].sym->name);
+-      yyval.value = yyvsp[0].sym->value;
++      if( (yyvsp[(1) - (1)]).sym->type == UNDEF && pass2 )
++              warn("Symbol %s undefined",(yyvsp[(1) - (1)]).sym->name);
++      (yyval).value = (yyvsp[(1) - (1)]).sym->value;
+ }
+     break;
+   case 144:
++
++/* Line 1806 of yacc.c  */
+ #line 867 "parser.y"
+-    { yyval.value = yyvsp[0].value; }
++    { (yyval).value = (yyvsp[(1) - (1)]).value; }
+     break;
+   case 145:
++
++/* Line 1806 of yacc.c  */
+ #line 870 "parser.y"
+-    { yyval.value = 0; }
++    { (yyval).value = 0; }
+     break;
+   case 146:
++
++/* Line 1806 of yacc.c  */
+ #line 871 "parser.y"
+-    { yyval.value = 1; }
++    { (yyval).value = 1; }
+     break;
+   case 147:
++
++/* Line 1806 of yacc.c  */
+ #line 872 "parser.y"
+-    { yyval.value = 2; }
++    { (yyval).value = 2; }
+     break;
+   case 148:
++
++/* Line 1806 of yacc.c  */
+ #line 873 "parser.y"
+-    { yyval.value = 3; }
++    { (yyval).value = 3; }
+     break;
+   case 149:
++
++/* Line 1806 of yacc.c  */
+ #line 874 "parser.y"
+-    { yyval.value = 4; }
++    { (yyval).value = 4; }
+     break;
+   case 150:
++
++/* Line 1806 of yacc.c  */
+ #line 875 "parser.y"
+-    { yyval.value = 5; }
++    { (yyval).value = 5; }
+     break;
+   case 151:
++
++/* Line 1806 of yacc.c  */
+ #line 876 "parser.y"
+-    { yyval.value = 6; }
++    { (yyval).value = 6; }
+     break;
+   case 152:
++
++/* Line 1806 of yacc.c  */
+ #line 877 "parser.y"
+-    { yyval.value = 7; }
++    { (yyval).value = 7; }
+     break;
+   case 153:
++
++/* Line 1806 of yacc.c  */
+ #line 880 "parser.y"
+-    { yyval.value = 0; }
++    { (yyval).value = 0; }
+     break;
+   case 154:
++
++/* Line 1806 of yacc.c  */
+ #line 881 "parser.y"
+-    { yyval.value = 1; }
++    { (yyval).value = 1; }
+     break;
+   case 155:
++
++/* Line 1806 of yacc.c  */
+ #line 883 "parser.y"
+-    { yyval.value = 0;
++    { (yyval).value = 0;
+                                 warn("Illegal indirect register: @r2"); }
+     break;
+   case 156:
++
++/* Line 1806 of yacc.c  */
+ #line 886 "parser.y"
+-    { yyval.value = 0;
++    { (yyval).value = 0;
+                                 warn("Illegal indirect register: @r3"); }
+     break;
+   case 157:
++
++/* Line 1806 of yacc.c  */
+ #line 889 "parser.y"
+-    { yyval.value = 0;
++    { (yyval).value = 0;
+                                 warn("Illegal indirect register: @r4"); }
+     break;
+   case 158:
++
++/* Line 1806 of yacc.c  */
+ #line 892 "parser.y"
+-    { yyval.value = 0;
++    { (yyval).value = 0;
+                                 warn("Illegal indirect register: @r5"); }
+     break;
+   case 159:
++
++/* Line 1806 of yacc.c  */
+ #line 895 "parser.y"
+-    { yyval.value = 0;
++    { (yyval).value = 0;
+                                 warn("Illegal indirect register: @r6"); }
+     break;
+   case 160:
++
++/* Line 1806 of yacc.c  */
+ #line 898 "parser.y"
+-    { yyval.value = 0;
++    { (yyval).value = 0;
+                                 warn("Illegal indirect register: @r7"); }
+     break;
+   case 161:
++
++/* Line 1806 of yacc.c  */
+ #line 903 "parser.y"
+     {
+       if( pass2 ) {
+-              if( !isbit8(yyvsp[0].val.v) )
++              if( !isbit8((yyvsp[(1) - (1)]).val.v) )
+                       warn("Expression greater than 8-bits");
+       }
+-      yyval.value = yyvsp[0].val.v;
++      (yyval).value = (yyvsp[(1) - (1)]).val.v;
+ }
+     break;
+   case 162:
++
++/* Line 1806 of yacc.c  */
+ #line 913 "parser.y"
+     {
+       if( pass2 ) {
+-              if( !isbit16(yyvsp[0].val.v) )
++              if( !isbit16((yyvsp[(1) - (1)]).val.v) )
+                       warn("Expression greater than 16-bits");
+       }
+-      yyval.value = yyvsp[0].val.v;
++      (yyval).value = (yyvsp[(1) - (1)]).val.v;
+ }
+     break;
+   case 163:
++
++/* Line 1806 of yacc.c  */
+ #line 923 "parser.y"
+     {
+               if( pass2 ) {
+-                      if( !isbit16(yyvsp[0].val.v)  )
++                      if( !isbit16((yyvsp[(1) - (1)]).val.v)  )
+                               warn("Address greater than 16-bits");
+-                      if( (yyvsp[0].val.v & size11) != ((lc+2) & size11) )
++                      if( ((yyvsp[(1) - (1)]).val.v & size11) != ((lc+2) & size11) )
+                               warn("Address outside current 2K page");
+               }
+-              set_md(yyval.mode,0);
+-              set_ov(yyval.mode, (yyvsp[0].val.v&0x0700)>>3 );
+-              set_sz(yyval.mode,1);
+-              set_b1(yyval.mode,yyvsp[0].val.v&0x00ff);
++              set_md((yyval).mode,0);
++              set_ov((yyval).mode, ((yyvsp[(1) - (1)]).val.v&0x0700)>>3 );
++              set_sz((yyval).mode,1);
++              set_b1((yyval).mode,(yyvsp[(1) - (1)]).val.v&0x00ff);
+ }
+     break;
+   case 164:
++
++/* Line 1806 of yacc.c  */
+ #line 938 "parser.y"
+     {
+               if( pass2 ) {
+-                      if( !isbit16(yyvsp[0].val.v)  )
++                      if( !isbit16((yyvsp[(1) - (1)]).val.v)  )
+                               warn("Address greater than 16-bits");
+               }
+-              set_md(yyval.mode,0);
+-              set_ov(yyval.mode, 0 );
+-              set_sz(yyval.mode,2);
+-              set_b1(yyval.mode, (yyvsp[0].val.v & 0xff00 ) >> 8 );
+-              set_b2(yyval.mode, (yyvsp[0].val.v & 0x00ff ) );
++              set_md((yyval).mode,0);
++              set_ov((yyval).mode, 0 );
++              set_sz((yyval).mode,2);
++              set_b1((yyval).mode, ((yyvsp[(1) - (1)]).val.v & 0xff00 ) >> 8 );
++              set_b2((yyval).mode, ((yyvsp[(1) - (1)]).val.v & 0x00ff ) );
+ }
+     break;
+   case 165:
++
++/* Line 1806 of yacc.c  */
+ #line 952 "parser.y"
+     {
+               long offset=0;
+               if( pass2 ) {
+-                      offset = yyvsp[0].val.v - (lc+2);
++                      offset = (yyvsp[(1) - (1)]).val.v - (lc+2);
+                       if( offset>127 || offset<-128 )
+                          warn("Relative offset exceeds -128 / +127");
+               }
+-              set_md(yyval.mode,0);
+-              set_ov(yyval.mode,0);
+-              set_sz(yyval.mode,1);
+-              set_b1(yyval.mode,offset);
++              set_md((yyval).mode,0);
++              set_ov((yyval).mode,0);
++              set_sz((yyval).mode,1);
++              set_b1((yyval).mode,offset);
+ }
+     break;
+-    }
+-
+-/* Line 1010 of yacc.c.  */
+-#line 2717 "y.tab.c"
+-\f
+-  yyvsp -= yylen;
+-  yyssp -= yylen;
+-
++/* Line 1806 of yacc.c  */
++#line 3408 "y.tab.c"
++      default: break;
++    }
++  /* User semantic actions sometimes alter yychar, and that requires
++     that yytoken be updated with the new translation.  We take the
++     approach of translating immediately before every use of yytoken.
++     One alternative is translating here after every semantic action,
++     but that translation would be missed if the semantic action invokes
++     YYABORT, YYACCEPT, or YYERROR immediately after altering yychar or
++     if it invokes YYBACKUP.  In the case of YYABORT or YYACCEPT, an
++     incorrect destructor might then be invoked immediately.  In the
++     case of YYERROR or YYBACKUP, subsequent parser actions might lead
++     to an incorrect destructor call or verbose syntax error message
++     before the lookahead is translated.  */
++  YY_SYMBOL_PRINT ("-> $$ =", yyr1[yyn], &yyval, &yyloc);
++
++  YYPOPSTACK (yylen);
++  yylen = 0;
+   YY_STACK_PRINT (yyss, yyssp);
+   *++yyvsp = yyval;
+-
+   /* Now `shift' the result of the reduction.  Determine what state
+      that goes to, based on the state we popped back to and the rule
+      number reduced by.  */
+@@ -2743,70 +3445,48 @@ yyreduce:
+ | yyerrlab -- here on detecting error |
+ `------------------------------------*/
+ yyerrlab:
++  /* Make sure we have latest lookahead translation.  See comments at
++     user semantic actions for why this is necessary.  */
++  yytoken = yychar == YYEMPTY ? YYEMPTY : YYTRANSLATE (yychar);
++
+   /* If not already recovering from an error, report this error.  */
+   if (!yyerrstatus)
+     {
+       ++yynerrs;
+-#if YYERROR_VERBOSE
+-      yyn = yypact[yystate];
+-
+-      if (YYPACT_NINF < yyn && yyn < YYLAST)
+-      {
+-        YYSIZE_T yysize = 0;
+-        int yytype = YYTRANSLATE (yychar);
+-        const char* yyprefix;
+-        char *yymsg;
+-        int yyx;
+-
+-        /* Start YYX at -YYN if negative to avoid negative indexes in
+-           YYCHECK.  */
+-        int yyxbegin = yyn < 0 ? -yyn : 0;
+-
+-        /* Stay within bounds of both yycheck and yytname.  */
+-        int yychecklim = YYLAST - yyn;
+-        int yyxend = yychecklim < YYNTOKENS ? yychecklim : YYNTOKENS;
+-        int yycount = 0;
+-
+-        yyprefix = ", expecting ";
+-        for (yyx = yyxbegin; yyx < yyxend; ++yyx)
+-          if (yycheck[yyx + yyn] == yyx && yyx != YYTERROR)
+-            {
+-              yysize += yystrlen (yyprefix) + yystrlen (yytname [yyx]);
+-              yycount += 1;
+-              if (yycount == 5)
+-                {
+-                  yysize = 0;
+-                  break;
+-                }
+-            }
+-        yysize += (sizeof ("syntax error, unexpected ")
+-                   + yystrlen (yytname[yytype]));
+-        yymsg = (char *) YYSTACK_ALLOC (yysize);
+-        if (yymsg != 0)
+-          {
+-            char *yyp = yystpcpy (yymsg, "syntax error, unexpected ");
+-            yyp = yystpcpy (yyp, yytname[yytype]);
+-
+-            if (yycount < 5)
+-              {
+-                yyprefix = ", expecting ";
+-                for (yyx = yyxbegin; yyx < yyxend; ++yyx)
+-                  if (yycheck[yyx + yyn] == yyx && yyx != YYTERROR)
+-                    {
+-                      yyp = yystpcpy (yyp, yyprefix);
+-                      yyp = yystpcpy (yyp, yytname[yyx]);
+-                      yyprefix = " or ";
+-                    }
+-              }
+-            yyerror (yymsg);
+-            YYSTACK_FREE (yymsg);
+-          }
+-        else
+-          yyerror ("syntax error; also virtual memory exhausted");
+-      }
+-      else
+-#endif /* YYERROR_VERBOSE */
+-      yyerror ("syntax error");
++#if ! YYERROR_VERBOSE
++      yyerror (YY_("syntax error"));
++#else
++# define YYSYNTAX_ERROR yysyntax_error (&yymsg_alloc, &yymsg, \
++                                        yyssp, yytoken)
++      {
++        char const *yymsgp = YY_("syntax error");
++        int yysyntax_error_status;
++        yysyntax_error_status = YYSYNTAX_ERROR;
++        if (yysyntax_error_status == 0)
++          yymsgp = yymsg;
++        else if (yysyntax_error_status == 1)
++          {
++            if (yymsg != yymsgbuf)
++              YYSTACK_FREE (yymsg);
++            yymsg = (char *) YYSTACK_ALLOC (yymsg_alloc);
++            if (!yymsg)
++              {
++                yymsg = yymsgbuf;
++                yymsg_alloc = sizeof yymsgbuf;
++                yysyntax_error_status = 2;
++              }
++            else
++              {
++                yysyntax_error_status = YYSYNTAX_ERROR;
++                yymsgp = yymsg;
++              }
++          }
++        yyerror (yymsgp);
++        if (yysyntax_error_status == 2)
++          goto yyexhaustedlab;
++      }
++# undef YYSYNTAX_ERROR
++#endif
+     }
+@@ -2817,25 +3497,16 @@ yyerrlab:
+        error, discard it.  */
+       if (yychar <= YYEOF)
+-        {
+-          /* If at end of input, pop the error token,
+-           then the rest of the stack, then return failure.  */
++      {
++        /* Return failure if at end of input.  */
+         if (yychar == YYEOF)
+-           for (;;)
+-             {
+-               YYPOPSTACK;
+-               if (yyssp == yyss)
+-                 YYABORT;
+-               YYDSYMPRINTF ("Error: popping", yystos[*yyssp], yyvsp, yylsp);
+-               yydestruct (yystos[*yyssp], yyvsp);
+-             }
+-        }
++          YYABORT;
++      }
+       else
+       {
+-        YYDSYMPRINTF ("Error: discarding", yytoken, &yylval, &yylloc);
+-        yydestruct (yytoken, &yylval);
++        yydestruct ("Error: discarding",
++                    yytoken, &yylval);
+         yychar = YYEMPTY;
+-
+       }
+     }
+@@ -2849,15 +3520,17 @@ yyerrlab:
+ `---------------------------------------------------*/
+ yyerrorlab:
+-#ifdef __GNUC__
+-  /* Pacify GCC when the user code never invokes YYERROR and the label
+-     yyerrorlab therefore never appears in user code.  */
+-  if (0)
++  /* Pacify compilers like GCC when the user code never invokes
++     YYERROR and the label yyerrorlab therefore never appears in user
++     code.  */
++  if (/*CONSTCOND*/ 0)
+      goto yyerrorlab;
+-#endif
+-  yyvsp -= yylen;
+-  yyssp -= yylen;
++  /* Do not reclaim the symbols of the rule which action triggered
++     this YYERROR.  */
++  YYPOPSTACK (yylen);
++  yylen = 0;
++  YY_STACK_PRINT (yyss, yyssp);
+   yystate = *yyssp;
+   goto yyerrlab1;
+@@ -2871,7 +3544,7 @@ yyerrlab1:
+   for (;;)
+     {
+       yyn = yypact[yystate];
+-      if (yyn != YYPACT_NINF)
++      if (!yypact_value_is_default (yyn))
+       {
+         yyn += YYTERROR;
+         if (0 <= yyn && yyn <= YYLAST && yycheck[yyn] == YYTERROR)
+@@ -2886,21 +3559,20 @@ yyerrlab1:
+       if (yyssp == yyss)
+       YYABORT;
+-      YYDSYMPRINTF ("Error: popping", yystos[*yyssp], yyvsp, yylsp);
+-      yydestruct (yystos[yystate], yyvsp);
+-      YYPOPSTACK;
++
++      yydestruct ("Error: popping",
++                yystos[yystate], yyvsp);
++      YYPOPSTACK (1);
+       yystate = *yyssp;
+       YY_STACK_PRINT (yyss, yyssp);
+     }
+-  if (yyn == YYFINAL)
+-    YYACCEPT;
+-
+-  YYDPRINTF ((stderr, "Shifting error token, "));
+-
+   *++yyvsp = yylval;
++  /* Shift the error token.  */
++  YY_SYMBOL_PRINT ("Shifting", yystos[yyn], yyvsp, yylsp);
++
+   yystate = yyn;
+   goto yynewstate;
+@@ -2919,25 +3591,50 @@ yyabortlab:
+   yyresult = 1;
+   goto yyreturn;
+-#ifndef yyoverflow
+-/*----------------------------------------------.
+-| yyoverflowlab -- parser overflow comes here.  |
+-`----------------------------------------------*/
+-yyoverflowlab:
+-  yyerror ("parser stack overflow");
++#if !defined(yyoverflow) || YYERROR_VERBOSE
++/*-------------------------------------------------.
++| yyexhaustedlab -- memory exhaustion comes here.  |
++`-------------------------------------------------*/
++yyexhaustedlab:
++  yyerror (YY_("memory exhausted"));
+   yyresult = 2;
+   /* Fall through.  */
+ #endif
+ yyreturn:
++  if (yychar != YYEMPTY)
++    {
++      /* Make sure we have latest lookahead translation.  See comments at
++         user semantic actions for why this is necessary.  */
++      yytoken = YYTRANSLATE (yychar);
++      yydestruct ("Cleanup: discarding lookahead",
++                  yytoken, &yylval);
++    }
++  /* Do not reclaim the symbols of the rule which action triggered
++     this YYABORT or YYACCEPT.  */
++  YYPOPSTACK (yylen);
++  YY_STACK_PRINT (yyss, yyssp);
++  while (yyssp != yyss)
++    {
++      yydestruct ("Cleanup: popping",
++                yystos[*yyssp], yyvsp);
++      YYPOPSTACK (1);
++    }
+ #ifndef yyoverflow
+   if (yyss != yyssa)
+     YYSTACK_FREE (yyss);
+ #endif
+-  return yyresult;
++#if YYERROR_VERBOSE
++  if (yymsg != yymsgbuf)
++    YYSTACK_FREE (yymsg);
++#endif
++  /* Make sure YYID is used.  */
++  return YYID (yyresult);
+ }
++
++/* Line 2067 of yacc.c  */
+ #line 967 "parser.y"
+@@ -2991,13 +3688,13 @@ int makeop(struct opcode * op, struct mode *m, int add)
+  *
+  */
+-#define indx(a) ( (a)/(sizeof(long)*8) )
+-#define bit(a)        ( 1 << ((a)%(sizeof(long)*8)) )
++#define indx(a) ( (a)/(32) )
++#define bit(a)        ( 1 << ((a)%(32)) )
+ #define getloc(a) (regions[indx(a)] & bit(a))
+ #define setloc(a) (regions[indx(a)] |= bit(a))
+-static unsigned long regions[ 0x10000/(sizeof(long)*8) ];
++static unsigned long regions[ 0x10000/(32) ];
+ void inclc(int i)
+ {
+@@ -3101,4 +3798,3 @@ void genword(unsigned long w)
+ }
+-