diff options
author | Reid Spencer <rspencer@reidspencer.com> | 2007-01-12 07:05:14 +0000 |
---|---|---|
committer | Reid Spencer <rspencer@reidspencer.com> | 2007-01-12 07:05:14 +0000 |
commit | a54b7cbd452b3adb2f51346140d996b29c2cdb30 (patch) | |
tree | 00514e24a3fab3804f1a99557ebd343382d0dc27 | |
parent | ed3098989580ecaee7fc89de548afb4c811bea31 (diff) |
For PR1064:
Implement the arbitrary bit-width integer feature. The feature allows
integers of any bitwidth (up to 64) to be defined instead of just 1, 8,
16, 32, and 64 bit integers.
This change does several things:
1. Introduces a new Derived Type, IntegerType, to represent the number of
bits in an integer. The Type classes SubclassData field is used to
store the number of bits. This allows 2^23 bits in an integer type.
2. Removes the five integer Type::TypeID values for the 1, 8, 16, 32 and
64-bit integers. These are replaced with just IntegerType which is not
a primitive any more.
3. Adjust the rest of LLVM to account for this change.
Note that while this incremental change lays the foundation for arbitrary
bit-width integers, LLVM has not yet been converted to actually deal with
them in any significant way. Most optimization passes, for example, will
still only deal with the byte-width integer types. Future increments
will rectify this situation.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@33113 91177308-0d34-0410-b5e6-96231b3b80d8
41 files changed, 4029 insertions, 3388 deletions
diff --git a/include/llvm/DerivedTypes.h b/include/llvm/DerivedTypes.h index f8d9a1bf94..78759f1dea 100644 --- a/include/llvm/DerivedTypes.h +++ b/include/llvm/DerivedTypes.h @@ -29,6 +29,7 @@ class ArrayValType; class StructValType; class PointerValType; class PackedValType; +class IntegerValType; class DerivedType : public Type { friend class Type; @@ -71,6 +72,40 @@ public: } }; +/// Class to represent integer types. Note that this class is also used to +/// represent the built-in integer types: Int1Ty, Int8Ty, Int16Ty, Int32Ty and +/// Int64Ty. +/// @brief Integer representation type +class IntegerType : public DerivedType { +protected: + IntegerType(unsigned NumBits) : DerivedType(IntegerTyID) { + setSubclassData(NumBits); + } + friend class TypeMap<IntegerValType, IntegerType>; +public: + /// This enum is just used to hold constants we need for IntegerType. + enum { + MIN_INT_BITS = 1, ///< Minimum number of bits that can be specified + MAX_INT_BITS = (1<<23)-1 ///< Maximum number of bits that can be specified + ///< Note that bit width is stored in the Type classes SubclassData field + ///< which has 23 bits. This yields a maximum bit width of 8,388,607 bits. + }; + + /// This static method is the primary way of constructing an IntegerType. + /// If an IntegerType with the same NumBits value was previously instantiated, + /// that instance will be returned. Otherwise a new one will be created. Only + /// one instance with a given NumBits value is ever created. + /// @brief Get or create an IntegerType instance. + static const IntegerType* get(unsigned NumBits); + + /// @brief Get the number of bits in this IntegerType + unsigned getBitWidth() const { return getSubclassData(); } + + // Methods for support type inquiry through isa, cast, and dyn_cast: + static inline bool classof(const IntegerType *T) { return true; } + static inline bool classof(const Type *T) { return T->isIntegral(); } +}; + /// FunctionType - Class to represent function types /// diff --git a/include/llvm/Intrinsics.td b/include/llvm/Intrinsics.td index ca6725b648..6bcbd6895f 100644 --- a/include/llvm/Intrinsics.td +++ b/include/llvm/Intrinsics.td @@ -57,6 +57,11 @@ class LLVMType<ValueType vt, string typeval> { string TypeVal = typeval; } +class LLVMIntegerType<ValueType VT, int width> + : LLVMType<VT, "Type::IntegerTyID"> { + int Width = width; +} + class LLVMPackedType<ValueType VT, int numelts, LLVMType elty> : LLVMType<VT, "Type::PackedTyID">{ int NumElts = numelts; @@ -64,25 +69,24 @@ class LLVMPackedType<ValueType VT, int numelts, LLVMType elty> } def llvm_void_ty : LLVMType<isVoid, "Type::VoidTyID">; -def llvm_i1_ty : LLVMType<i1 , "Type::Int1TyID">; -def llvm_i8_ty : LLVMType<i8 , "Type::Int8TyID">; -def llvm_i16_ty : LLVMType<i16, "Type::Int16TyID">; -def llvm_i32_ty : LLVMType<i32, "Type::Int32TyID">; -def llvm_i64_ty : LLVMType<i64, "Type::Int64TyID">; +def llvm_bool_ty : LLVMIntegerType<i1, 1>; +def llvm_i8_ty : LLVMIntegerType<i8 , 8>; +def llvm_i16_ty : LLVMIntegerType<i16, 16>; +def llvm_i32_ty : LLVMIntegerType<i32, 32>; +def llvm_i64_ty : LLVMIntegerType<i64, 64>; def llvm_float_ty : LLVMType<f32, "Type::FloatTyID">; def llvm_double_ty : LLVMType<f64, "Type::DoubleTyID">; -def llvm_ptr_ty : LLVMType<iPTR, "Type::PointerTyID">; // sbyte* -def llvm_ptrptr_ty : LLVMType<iPTR, "Type::PointerTyID">; // sbyte** +def llvm_ptr_ty : LLVMType<iPTR, "Type::PointerTyID">; // i8* +def llvm_ptrptr_ty : LLVMType<iPTR, "Type::PointerTyID">; // i8** def llvm_descriptor_ty : LLVMType<iPTR, "Type::PointerTyID">; // global* -def llvm_v16i8_ty : LLVMPackedType<v16i8,16, llvm_i8_ty>; // 16 x sbyte -def llvm_v8i16_ty : LLVMPackedType<v8i16, 8, llvm_i16_ty>; // 8 x short - -def llvm_v2i64_ty : LLVMPackedType<v2i64, 2, llvm_i64_ty>; // 2 x long -def llvm_v2i32_ty : LLVMPackedType<v2i32, 2, llvm_i32_ty>; // 2 x int -def llvm_v4i32_ty : LLVMPackedType<v4i32, 4, llvm_i32_ty>; // 4 x int -def llvm_v4f32_ty : LLVMPackedType<v4f32, 4, llvm_float_ty>; // 4 x float -def llvm_v2f64_ty : LLVMPackedType<v2f64, 2, llvm_double_ty>; // 2 x double +def llvm_v16i8_ty : LLVMPackedType<v16i8,16, llvm_i8_ty>; // 16 x i8 +def llvm_v8i16_ty : LLVMPackedType<v8i16, 8, llvm_i16_ty>; // 8 x i16 +def llvm_v2i64_ty : LLVMPackedType<v2i64, 2, llvm_i64_ty>; // 2 x i64 +def llvm_v2i32_ty : LLVMPackedType<v2i32, 2, llvm_i32_ty>; // 2 x i32 +def llvm_v4i32_ty : LLVMPackedType<v4i32, 4, llvm_i32_ty>; // 4 x i32 +def llvm_v4f32_ty : LLVMPackedType<v4f32, 4, llvm_float_ty>; // 4 x float +def llvm_v2f64_ty : LLVMPackedType<v2f64, 2, llvm_double_ty>;// 2 x double //===----------------------------------------------------------------------===// // Intrinsic Definitions. diff --git a/include/llvm/Target/TargetLowering.h b/include/llvm/Target/TargetLowering.h index 5749d520d8..fd2caf8bf8 100644 --- a/include/llvm/Target/TargetLowering.h +++ b/include/llvm/Target/TargetLowering.h @@ -22,7 +22,7 @@ #ifndef LLVM_TARGET_TARGETLOWERING_H #define LLVM_TARGET_TARGETLOWERING_H -#include "llvm/Type.h" +#include "llvm/DerivedTypes.h" #include "llvm/CodeGen/SelectionDAGNodes.h" #include <map> @@ -429,11 +429,16 @@ public: switch (Ty->getTypeID()) { default: assert(0 && "Unknown type!"); case Type::VoidTyID: return MVT::isVoid; - case Type::Int1TyID: return MVT::i1; - case Type::Int8TyID: return MVT::i8; - case Type::Int16TyID: return MVT::i16; - case Type::Int32TyID: return MVT::i32; - case Type::Int64TyID: return MVT::i64; + case Type::IntegerTyID: + switch (cast<IntegerType>(Ty)->getBitWidth()) { + default: assert(0 && "Invalid width for value type"); + case 1: return MVT::i1; + case 8: return MVT::i8; + case 16: return MVT::i16; + case 32: return MVT::i32; + case 64: return MVT::i64; + } + break; case Type::FloatTyID: return MVT::f32; case Type::DoubleTyID: return MVT::f64; case Type::PointerTyID: return PointerTy; diff --git a/include/llvm/Type.h b/include/llvm/Type.h index 29180a00e5..b95f146deb 100644 --- a/include/llvm/Type.h +++ b/include/llvm/Type.h @@ -71,32 +71,31 @@ public: /// enum TypeID { // PrimitiveTypes .. make sure LastPrimitiveTyID stays up to date - VoidTyID = 0 , Int1TyID, // 0, 1: Basics... - Int8TyID, // 2 : 8 bit type... - Int16TyID, // 3 : 16 bit type... - Int32TyID, // 4 : 32 bit type... - Int64TyID, // 5 : 64 bit type... - FloatTyID, DoubleTyID, // 6, 7: Floating point types... - LabelTyID, // 8 : Labels... + VoidTyID = 0, ///< 0: type with no size + FloatTyID, ///< 1: 32 bit floating point type + DoubleTyID, ///< 2: 64 bit floating point type + LabelTyID, ///< 3: Labels // Derived types... see DerivedTypes.h file... // Make sure FirstDerivedTyID stays up to date!!! - FunctionTyID , StructTyID, // Functions... Structs... - ArrayTyID , PointerTyID, // Array... pointer... - OpaqueTyID, // Opaque type instances... - PackedTyID, // SIMD 'packed' format... - BC_ONLY_PackedStructTyID, // packed struct, for BC rep only - //... + IntegerTyID, ///< 4: Arbitrary bit width integers + FunctionTyID, ///< 5: Functions + StructTyID, ///< 6: Structures + PackedStructTyID,///< 7: Packed Structure. This is for bytecode only + ArrayTyID, ///< 8: Arrays + PointerTyID, ///< 9: Pointers + OpaqueTyID, ///< 10: Opaque: type with unknown structure + PackedTyID, ///< 11: SIMD 'packed' format, or other vector type NumTypeIDs, // Must remain as last defined ID LastPrimitiveTyID = LabelTyID, - FirstDerivedTyID = FunctionTyID + FirstDerivedTyID = IntegerTyID }; private: TypeID ID : 8; // The current base type of this type. bool Abstract : 1; // True if type contains an OpaqueType - bool SubclassData : 1; //Space for subclasses to store a flag + unsigned SubclassData : 23; //Space for subclasses to store data /// RefCount - This counts the number of PATypeHolders that are pointing to /// this type. When this number falls to zero, if the type is abstract and @@ -108,7 +107,8 @@ private: const Type *getForwardedTypeInternal() const; protected: Type(const char *Name, TypeID id); - Type(TypeID id) : ID(id), Abstract(false), RefCount(0), ForwardType(0) {} + Type(TypeID id) : ID(id), Abstract(false), SubclassData(0), RefCount(0), + ForwardType(0) {} virtual ~Type() { assert(AbstractTypeUsers.empty()); } @@ -119,8 +119,8 @@ protected: unsigned getRefCount() const { return RefCount; } - bool getSubclassData() const { return SubclassData; } - void setSubclassData(bool b) { SubclassData = b; } + unsigned getSubclassData() const { return SubclassData; } + void setSubclassData(unsigned val) { SubclassData = val; } /// ForwardType - This field is used to implement the union find scheme for /// abstract types. When types are refined to other types, this field is set @@ -162,12 +162,12 @@ public: /// isInteger - Equivalent to isSigned() || isUnsigned() /// - bool isInteger() const { return ID >= Int8TyID && ID <= Int64TyID; } + bool isInteger() const { return ID == IntegerTyID && this != Int1Ty; } /// isIntegral - Returns true if this is an integral type, which is either /// Int1Ty or one of the Integer types. /// - bool isIntegral() const { return isInteger() || this == Int1Ty; } + bool isIntegral() const { return ID == IntegerTyID; } /// isFloatingPoint - Return true if this is one of the two floating point /// types @@ -200,7 +200,7 @@ public: /// inline bool isFirstClassType() const { return (ID != VoidTyID && ID <= LastPrimitiveTyID) || - ID == PointerTyID || ID == PackedTyID; + ID == IntegerTyID || ID == PointerTyID || ID == PackedTyID; } /// isSized - Return true if it makes sense to take the size of this type. To @@ -209,11 +209,13 @@ public: /// bool isSized() const { // If it's a primitive, it is always sized. - if (ID >= Int1TyID && ID <= DoubleTyID || ID == PointerTyID) + if (ID == IntegerTyID || (ID >= FloatTyID && ID <= DoubleTyID) || + ID == PointerTyID) return true; // If it is not something that can have a size (e.g. a function or label), // it doesn't have a size. - if (ID != StructTyID && ID != ArrayTyID && ID != PackedTyID) + if (ID != StructTyID && ID != ArrayTyID && ID != PackedTyID && + ID != PackedStructTyID) return false; // If it is something that can have a size and it's concrete, it definitely // has a size, otherwise we have to try harder to decide. @@ -224,7 +226,6 @@ public: /// type. These are fixed by LLVM and are not target dependent. This will /// return zero if the type does not have a size or is not a primitive type. /// - unsigned getPrimitiveSize() const; unsigned getPrimitiveSizeInBits() const; /// getIntegralTypeMask - Return a bitmask with ones set for all of the bits @@ -248,7 +249,7 @@ public: /// will be promoted to if passed through a variable argument /// function. const Type *getVAArgsPromotedType() const { - if (ID == Int1TyID || ID == Int8TyID || ID == Int16TyID) + if (ID == IntegerTyID && getSubclassData() < 32) return Type::Int32Ty; else if (ID == FloatTyID) return Type::DoubleTy; @@ -288,12 +289,8 @@ public: //===--------------------------------------------------------------------===// // These are the builtin types that are always available... // - static Type *VoidTy , *Int1Ty; - static Type *Int8Ty , *Int16Ty, - *Int32Ty, *Int64Ty; - static Type *FloatTy, *DoubleTy; - - static Type* LabelTy; + static const Type *VoidTy, *LabelTy, *FloatTy, *DoubleTy; + static const Type *Int1Ty, *Int8Ty, *Int16Ty, *Int32Ty, *Int64Ty; /// Methods for support type inquiry through isa, cast, and dyn_cast: static inline bool classof(const Type *T) { return true; } diff --git a/lib/AsmParser/Lexer.cpp.cvs b/lib/AsmParser/Lexer.cpp.cvs index 55d32cdc22..b849caedbc 100644 --- a/lib/AsmParser/Lexer.cpp.cvs +++ b/lib/AsmParser/Lexer.cpp.cvs @@ -317,99 +317,99 @@ static void yy_fatal_error YY_PROTO(( yyconst char msg[] )); *yy_cp = '\0'; \ yy_c_buf_p = yy_cp; -#define YY_NUM_RULES 138 -#define YY_END_OF_BUFFER 139 -static yyconst short int yy_acclist[216] = +#define YY_NUM_RULES 135 +#define YY_END_OF_BUFFER 136 +static yyconst short int yy_acclist[214] = { 0, - 139, 137, 138, 136, 137, 138, 136, 138, 137, 138, - 137, 138, 137, 138, 137, 138, 137, 138, 137, 138, - 129, 137, 138, 129, 137, 138, 1, 137, 138, 137, - 138, 137, 138, 137, 138, 137, 138, 137, 138, 137, - 138, 137, 138, 137, 138, 137, 138, 137, 138, 137, - 138, 137, 138, 137, 138, 137, 138, 137, 138, 137, - 138, 137, 138, 137, 138, 137, 138, 137, 138, 137, - 138, 128, 126, 125, 125, 132, 130, 134, 129, 1, - 111, 39, 71, 48, 72, 67, 23, 128, 125, 125, - 133, 134, 20, 134, 135, 57, 66, 37, 32, 40, - - 3, 49, 50, 51, 59, 81, 86, 84, 85, 83, - 82, 87, 91, 110, 76, 74, 106, 75, 73, 58, - 89, 80, 78, 79, 77, 90, 88, 68, 127, 134, - 134, 108, 47, 92, 70, 62, 118, 65, 69, 119, - 107, 22, 131, 61, 95, 64, 24, 4, 55, 60, - 63, 46, 12, 94, 134, 34, 2, 5, 52, 97, - 54, 120, 93, 21, 117, 43, 7, 53, 28, 42, - 101, 100, 8, 113, 31, 116, 36, 56, 105, 99, - 112, 25, 26, 98, 114, 109, 104, 41, 6, 27, - 96, 35, 9, 17, 10, 102, 11, 103, 33, 13, - - 15, 14, 30, 38, 16, 29, 115, 121, 123, 124, - 44, 122, 18, 45, 19 + 136, 134, 135, 133, 134, 135, 133, 135, 134, 135, + 134, 135, 134, 135, 134, 135, 134, 135, 134, 135, + 126, 134, 135, 126, 134, 135, 1, 134, 135, 134, + 135, 134, 135, 134, 135, 134, 135, 134, 135, 134, + 135, 134, 135, 53, 134, 135, 134, 135, 134, 135, + 134, 135, 134, 135, 134, 135, 134, 135, 134, 135, + 134, 135, 134, 135, 134, 135, 134, 135, 134, 135, + 134, 135, 125, 123, 122, 122, 129, 127, 131, 126, + 1, 108, 39, 68, 53, 69, 64, 23, 125, 122, + 122, 130, 131, 20, 131, 132, 54, 63, 37, 32, + + 40, 3, 56, 78, 83, 81, 82, 80, 79, 84, + 88, 107, 73, 71, 103, 72, 70, 55, 86, 77, + 75, 76, 74, 87, 85, 65, 124, 131, 131, 105, + 47, 89, 67, 59, 115, 62, 66, 116, 104, 22, + 128, 58, 92, 61, 24, 4, 51, 57, 60, 46, + 12, 91, 131, 34, 2, 5, 48, 94, 50, 117, + 90, 21, 114, 43, 7, 49, 28, 42, 98, 97, + 8, 110, 31, 113, 36, 52, 102, 96, 109, 25, + 26, 95, 111, 106, 101, 41, 6, 27, 93, 35, + 9, 17, 10, 99, 11, 100, 33, 13, 15, 14, + + 30, 38, 16, 29, 112, 118, 120, 121, 44, 119, + 18, 45, 19 } ; -static yyconst short int yy_accept[558] = +static yyconst short int yy_accept[552] = { 0, 1, 1, 1, 2, 4, 7, 9, 11, 13, 15, 17, 19, 21, 24, 27, 30, 32, 34, 36, 38, - 40, 42, 44, 46, 48, 50, 52, 54, 56, 58, - 60, 62, 64, 66, 68, 70, 72, 72, 73, 73, - 74, 75, 76, 77, 77, 78, 78, 79, 80, 80, - 81, 81, 81, 81, 81, 81, 81, 81, 81, 82, - 82, 83, 83, 83, 83, 83, 83, 83, 83, 84, - 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, - 84, 84, 85, 85, 85, 85, 85, 85, 85, 85, - 85, 85, 85, 86, 86, 86, 86, 86, 86, 86, - - 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, + 40, 42, 44, 47, 49, 51, 53, 55, 57, 59, + 61, 63, 65, 67, 69, 71, 73, 73, 74, 74, + 75, 76, 77, 78, 78, 79, 79, 80, 81, 81, + 82, 82, 82, 82, 82, 82, 82, 82, 82, 83, + 83, 84, 84, 84, 84, 84, 84, 84, 84, 85, + 85, 85, 85, 85, 85, 85, 85, 85, 85, 86, + 86, 86, 86, 86, 86, 86, 86, 86, 86, 86, 87, 87, 87, 87, 87, 87, 87, 88, 88, 88, + 88, 88, 88, 88, 88, 88, 88, 88, 88, 88, - 88, 88, 88, 89, 90, 92, 93, 94, 95, 95, - 96, 97, 97, 97, 98, 98, 98, 99, 99, 100, - 100, 100, 100, 101, 101, 101, 101, 101, 101, 101, - 101, 101, 101, 102, 102, 102, 102, 102, 102, 102, - 102, 102, 102, 102, 102, 103, 104, 105, 105, 105, - 105, 105, 105, 105, 105, 105, 105, 105, 105, 105, - 106, 106, 107, 108, 109, 110, 111, 112, 112, 113, - - 114, 114, 114, 115, 115, 115, 115, 115, 115, 116, - 117, 118, 118, 118, 118, 119, 120, 120, 120, 121, - 121, 121, 121, 121, 121, 121, 121, 122, 123, 124, - 124, 125, 126, 126, 127, 128, 128, 128, 128, 128, - 128, 128, 128, 128, 129, 129, 129, 130, 131, 131, - 131, 131, 132, 132, 132, 132, 133, 133, 133, 134, - 135, 135, 135, 135, 135, 135, 135, 135, 135, 135, - 135, 135, 135, 135, 135, 135, 136, 137, 137, 137, - 137, 137, 138, 139, 139, 139, 140, 140, 140, 140, - 140, 140, 140, 140, 140, 141, 142, 142, 142, 143, - - 143, 143, 143, 144, 145, 145, 145, 146, 146, 146, - 146, 147, 147, 147, 148, 148, 148, 149, 149, 150, - 151, 151, 151, 151, 151, 152, 152, 153, 153, 154, - 154, 154, 155, 156, 157, 157, 157, 158, 158, 158, - 158, 158, 158, 158, 158, 158, 158, 158, 158, 158, - 158, 158, 159, 159, 160, 161, 161, 161, 161, 161, - 161, 161, 161, 161, 161, 161, 162, 162, 162, 162, - 162, 162, 162, 162, 162, 162, 162, 162, 162, 163, - 163, 163, 163, 164, 164, 165, 165, 165, 165, 165, - 165, 165, 165, 166, 166, 166, 167, 167, 167, 167, - - 167, 168, 168, 168, 168, 169, 170, 170, 170, 171, - 172, 173, 173, 173, 174, 174, 174, 174, 174, 175, - 175, 176, 177, 178, 179, 179, 179, 179, 180, 180, - 180, 181, 182, 183, 184, 185, 185, 186, 187, 187, - 187, 187, 187, 187, 188, 188, 189, 189, 190, 191, - 191, 191, 191, 191, 191, 192, 192, 192, 192, 192, - 192, 192, 192, 192, 193, 193, 193, 193, 193, 193, - 193, 193, 193, 194, 194, 194, 194, 194, 195, 195, - 195, 195, 195, 196, 197, 198, 198, 199, 199, 199, - 199, 200, 200, 200, 200, 201, 201, 202, 203, 203, - - 203, 203, 203, 203, 203, 203, 203, 203, 203, 203, - 203, 204, 204, 204, 204, 204, 204, 204, 204, 205, - 205, 205, 205, 205, 206, 206, 206, 206, 206, 207, - 207, 208, 208, 208, 208, 208, 208, 208, 208, 208, - 208, 208, 208, 208, 209, 209, 210, 211, 211, 212, - 212, 213, 214, 215, 215, 216, 216 + 88, 88, 88, 88, 89, 89, 89, 89, 89, 89, + 89, 89, 89, 89, 89, 89, 89, 89, 89, 89, + 90, 91, 93, 94, 95, 96, 96, 97, 98, 98, + 98, 99, 99, 99, 100, 100, 101, 101, 101, 101, + 102, 102, 102, 102, 102, 102, 102, 102, 102, 102, + 103, 103, 103, 103, 103, 103, 103, 103, 103, 103, + 103, 103, 103, 103, 103, 103, 103, 103, 103, 103, + 103, 103, 103, 103, 104, 104, 105, 106, 107, 108, + 109, 110, 110, 111, 112, 112, 112, 113, 113, 113, + + 113, 113, 113, 114, 115, 116, 116, 116, 116, 117, + 118, 118, 118, 119, 119, 119, 119, 119, 119, 119, + 119, 120, 121, 122, 122, 123, 124, 124, 125, 126, + 126, 126, 126, 126, 126, 126, 126, 126, 127, 127, + 127, 128, 129, 129, 129, 129, 130, 130, 130, 130, + 131, 131, 131, 132, 133, 133, 133, 133, 133, 133, + 133, 133, 133, 133, 133, 133, 133, 133, 133, 133, + 134, 135, 135, 135, 135, 135, 136, 137, 137, 137, + 138, 138, 138, 138, 138, 138, 138, 138, 138, 139, + 140, 140, 140, 141, 141, 141, 141, 142, 143, 143, + + 143, 144, 144, 144, 144, 145, 145, 145, 146, 146, + 146, 147, 147, 148, 149, 149, 149, 149, 149, 150, + 150, 151, 151, 152, 152, 152, 153, 154, 155, 155, + 155, 156, 156, 156, 156, 156, 156, 156, 156, 156, + 156, 156, 156, 156, 156, 156, 157, 157, 158, 159, + 159, 159, 159, 159, 159, 159, 159, 159, 159, 159, + 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, + 160, 160, 160, 161, 161, 161, 161, 162, 162, 163, + 163, 163, 163, 163, 163, 163, 163, 164, 164, 164, + 165, 165, 165, 165, 165, 166, 166, 166, 166, 167, + + 168, 168, 168, 169, 170, 171, 171, 171, 172, 172, + 172, 172, 172, 173, 173, 174, 175, 176, 177, 177, + 177, 177, 178, 178, 178, 179, 180, 181, 182, 183, + 183, 184, 185, 185, 185, 185, 185, 185, 186, 186, + 187, 187, 188, 189, 189, 189, 189, 189, 189, 190, + 190, 190, 190, 190, 190, 190, 190, 190, 191, 191, + 191, 191, 191, 191, 191, 191, 191, 192, 192, 192, + 192, 192, 193, 193, 193, 193, 193, 194, 195, 196, + 196, 197, 197, 197, 197, 198, 198, 198, 198, 199, + 199, 200, 201, 201, 201, 201, 201, 201, 201, 201, + + 201, 201, 201, 201, 201, 202, 202, 202, 202, 202, + 202, 202, 202, 203, 203, 203, 203, 203, 204, 204, + 204, 204, 204, 205, 205, 206, 206, 206, 206, 206, + 206, 206, 206, 206, 206, 206, 206, 206, 207, 207, + 208, 209, 209, 210, 210, 211, 212, 213, 213, 214, + 214 } ; static yyconst int yy_ec[256] = @@ -418,16 +418,16 @@ static yyconst int yy_ec[256] = 1, 1, 2, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 2, 1, 4, 1, 5, 6, 1, 1, 1, - 1, 1, 7, 1, 8, 9, 1, 10, 11, 12, - 13, 14, 15, 16, 15, 17, 15, 18, 19, 1, - 1, 1, 1, 1, 20, 20, 20, 20, 21, 20, + 1, 1, 7, 1, 8, 9, 1, 10, 11, 11, + 11, 11, 11, 12, 11, 13, 11, 14, 15, 1, + 1, 1, 1, 1, 16, 16, 16, 16, 17, 16, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, - 1, 1, 1, 1, 22, 1, 23, 24, 25, 26, + 1, 1, 1, 1, 18, 1, 19, 20, 21, 22, - 27, 28, 29, 30, 31, 5, 32, 33, 34, 35, - 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, - 46, 47, 1, 1, 1, 1, 1, 1, 1, 1, + 23, 24, 25, 26, 27, 5, 28, 29, 30, 31, + 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, + 42, 43, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, @@ -444,269 +444,267 @@ static yyconst int yy_ec[256] = 1, 1, 1, 1, 1 } ; -static yyconst int yy_meta[48] = +static yyconst int yy_meta[44] = { 0, - 1, 1, 2, 1, 3, 1, 4, 5, 3, 6, - 6, 6, 6, 6, 6, 6, 6, 7, 1, 3, - 8, 3, 3, 3, 3, 3, 8, 3, 3, 3, + 1, 1, 2, 1, 3, 1, 1, 3, 3, 3, + 3, 3, 3, 4, 1, 3, 3, 3, 3, 3, + 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, - 3, 3, 3, 3, 3, 3, 3 + 3, 3, 3 } ; -static yyconst short int yy_base[566] = +static yyconst short int yy_base[556] = { 0, - 0, 0, 1196, 1197, 1197, 1197, 1191, 1176, 40, 0, - 48, 58, 68, 1148, 0, 68, 71, 81, 91, 52, - 97, 98, 126, 110, 117, 120, 136, 138, 73, 170, - 159, 205, 134, 131, 56, 137, 1188, 1197, 1173, 1197, - 0, 235, 0, 1181, 1180, 158, 243, 1143, 261, 0, - 70, 154, 93, 31, 160, 163, 175, 57, 1169, 173, - 192, 189, 127, 54, 200, 202, 166, 195, 1168, 201, - 250, 114, 171, 225, 273, 212, 251, 244, 53, 215, - 249, 1167, 261, 275, 276, 278, 280, 281, 211, 285, - 279, 289, 1166, 290, 288, 283, 293, 309, 307, 311, - - 310, 313, 314, 315, 295, 317, 321, 320, 325, 324, - 333, 337, 327, 344, 339, 341, 1165, 351, 334, 355, - 357, 358, 359, 360, 370, 363, 361, 371, 380, 376, - 366, 373, 1164, 0, 0, 386, 1163, 0, 412, 0, - 1162, 392, 397, 1161, 390, 393, 1160, 412, 1159, 413, |