aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorDuncan Sands <baldrick@free.fr>2007-11-27 13:23:08 +0000
committerDuncan Sands <baldrick@free.fr>2007-11-27 13:23:08 +0000
commitdc024674ff96820d6020757b48d47f46d4c07db2 (patch)
tree843dfcaeb8f6c99de930a32020148b563005c2fd
parentf19341dec7361451f100a882a023b14583454d7e (diff)
Fix PR1146: parameter attributes are longer part of
the function type, instead they belong to functions and function calls. This is an updated and slightly corrected version of Reid Spencer's original patch. The only known problem is that auto-upgrading of bitcode files doesn't seem to work properly (see test/Bitcode/AutoUpgradeIntrinsics.ll). Hopefully a bitcode guru (who might that be? :) ) will fix it. git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@44359 91177308-0d34-0410-b5e6-96231b3b80d8
-rw-r--r--docs/LangRef.html16
-rw-r--r--include/llvm/DerivedTypes.h19
-rw-r--r--include/llvm/Function.h7
-rw-r--r--include/llvm/Instructions.h18
-rw-r--r--include/llvm/ParameterAttributes.h9
-rw-r--r--include/llvm/Support/CallSite.h6
-rw-r--r--lib/Analysis/BasicAliasAnalysis.cpp4
-rw-r--r--lib/AsmParser/llvmAsmParser.cpp.cvs1780
-rw-r--r--lib/AsmParser/llvmAsmParser.h.cvs12
-rw-r--r--lib/AsmParser/llvmAsmParser.y174
-rw-r--r--lib/AsmParser/llvmAsmParser.y.cvs237
-rw-r--r--lib/Bitcode/Reader/BitcodeReader.cpp31
-rw-r--r--lib/Bitcode/Writer/BitcodeWriter.cpp37
-rw-r--r--lib/Bitcode/Writer/ValueEnumerator.cpp17
-rw-r--r--lib/CodeGen/SelectionDAG/SelectionDAGISel.cpp22
-rw-r--r--lib/Linker/LinkModules.cpp1
-rw-r--r--lib/Target/CBackend/CBackend.cpp42
-rw-r--r--lib/Target/MSIL/MSILWriter.cpp3
-rw-r--r--lib/Target/X86/X86AsmPrinter.cpp4
-rw-r--r--lib/Target/X86/X86ISelLowering.cpp2
-rw-r--r--lib/Transforms/IPO/ArgumentPromotion.cpp35
-rw-r--r--lib/Transforms/IPO/DeadArgumentElimination.cpp38
-rw-r--r--lib/Transforms/IPO/ExtractFunction.cpp1
-rw-r--r--lib/Transforms/IPO/LowerSetJmp.cpp2
-rw-r--r--lib/Transforms/IPO/PruneEH.cpp1
-rw-r--r--lib/Transforms/Scalar/InstructionCombining.cpp29
-rw-r--r--lib/Transforms/Scalar/LowerGC.cpp2
-rw-r--r--lib/Transforms/Scalar/SimplifyCFG.cpp18
-rw-r--r--lib/Transforms/Utils/CloneFunction.cpp5
-rw-r--r--lib/Transforms/Utils/CloneModule.cpp3
-rw-r--r--lib/Transforms/Utils/InlineFunction.cpp1
-rw-r--r--lib/Transforms/Utils/LowerInvoke.cpp4
-rw-r--r--lib/Transforms/Utils/SimplifyCFG.cpp2
-rw-r--r--lib/VMCore/AsmWriter.cpp51
-rw-r--r--lib/VMCore/AutoUpgrade.cpp11
-rw-r--r--lib/VMCore/Function.cpp34
-rw-r--r--lib/VMCore/Instructions.cpp44
-rw-r--r--lib/VMCore/Type.cpp56
-rw-r--r--lib/VMCore/Verifier.cpp6
-rw-r--r--test/Assembler/2006-05-26-VarargsCallEncode.ll2
-rw-r--r--test/Assembler/2007-02-07-UpgradeCSRETCC.ll4
-rw-r--r--test/Assembler/2007-11-26-AttributeOverload.ll4
-rw-r--r--test/Assembler/2007-11-27-AutoUpgradeAttributes.ll3
-rw-r--r--test/Feature/paramattrs.ll2
-rw-r--r--test/Integer/paramattrs_bt.ll2
-rw-r--r--test/Transforms/SimplifyCFG/2006-10-29-InvokeCrash.ll2
-rw-r--r--tools/llvm-upgrade/UpgradeParser.cpp.cvs7676
-rw-r--r--tools/llvm-upgrade/UpgradeParser.h.cvs511
-rw-r--r--tools/llvm-upgrade/UpgradeParser.y158
-rw-r--r--tools/llvm-upgrade/UpgradeParser.y.cvs158
-rw-r--r--tools/llvm2cpp/CppWriter.cpp116
51 files changed, 6278 insertions, 5144 deletions
diff --git a/docs/LangRef.html b/docs/LangRef.html
index 0c2f8ca8c1..f85a441e53 100644
--- a/docs/LangRef.html
+++ b/docs/LangRef.html
@@ -764,9 +764,9 @@ a power of 2.</p>
<p>The return type and each parameter of a function type may have a set of
<i>parameter attributes</i> associated with them. Parameter attributes are
used to communicate additional information about the result or parameters of
- a function. Parameter attributes are considered to be part of the function
- type so two functions types that differ only by the parameter attributes
- are different function types.</p>
+ a function. Parameter attributes are considered to be part of the function,
+ not of the function type, so functions with different parameter attributes
+ can have the same function type.</p>
<p>Parameter attributes are simple keywords that follow the type specified. If
multiple parameter attributes are needed, they are space separated. For
@@ -774,15 +774,13 @@ a power of 2.</p>
<div class="doc_code">
<pre>
-%someFunc = i16 (i8 signext %someParam) zeroext
-%someFunc = i16 (i8 zeroext %someParam) zeroext
+declare i32 @printf(i8* noalias , ...) nounwind
+declare i32 @atoi(i8*) nounwind readonly
</pre>
</div>
- <p>Note that the two function types above are unique because the parameter has
- a different attribute (<tt>signext</tt> in the first one, <tt>zeroext</tt> in
- the second). Also note that the attribute for the function result
- (<tt>zeroext</tt>) comes immediately after the argument list.</p>
+ <p>Note that any attributes for the function result (<tt>nounwind</tt>,
+ <tt>readonly</tt>) come immediately after the argument list.</p>
<p>Currently, only the following parameter attributes are defined:</p>
<dl>
diff --git a/include/llvm/DerivedTypes.h b/include/llvm/DerivedTypes.h
index 1ae8cbd45b..12219c5354 100644
--- a/include/llvm/DerivedTypes.h
+++ b/include/llvm/DerivedTypes.h
@@ -31,7 +31,6 @@ class PointerValType;
class VectorValType;
class IntegerValType;
class APInt;
-class ParamAttrsList;
class DerivedType : public Type {
friend class Type;
@@ -140,12 +139,11 @@ public:
class FunctionType : public DerivedType {
friend class TypeMap<FunctionValType, FunctionType>;
bool isVarArgs;
- const ParamAttrsList *ParamAttrs;
FunctionType(const FunctionType &); // Do not implement
const FunctionType &operator=(const FunctionType &); // Do not implement
FunctionType(const Type *Result, const std::vector<const Type*> &Params,
- bool IsVarArgs, const ParamAttrsList *Attrs = 0);
+ bool IsVarArgs);
public:
/// FunctionType::get - This static method is the primary way of constructing
@@ -154,12 +152,7 @@ public:
static FunctionType *get(
const Type *Result, ///< The result type
const std::vector<const Type*> &Params, ///< The types of the parameters
- bool isVarArg, ///< Whether this is a variable argument length function
- const ParamAttrsList *Attrs = 0
- ///< Indicates the parameter attributes to use, if any. The 0th entry
- ///< in the list refers to the return type. Parameters are numbered
- ///< starting at 1. This argument must be on the heap and FunctionType
- ///< owns it after its passed here.
+ bool isVarArg ///< Whether this is a variable argument length function
);
inline bool isVarArg() const { return isVarArgs; }
@@ -177,14 +170,6 @@ public:
///
unsigned getNumParams() const { return NumContainedTys - 1; }
- bool isStructReturn() const;
-
- /// The parameter attributes for the \p ith parameter are returned. The 0th
- /// parameter refers to the return type of the function.
- /// @returns The ParameterAttributes for the \p ith parameter.
- /// @brief Get the attributes for a parameter
- const ParamAttrsList *getParamAttrs() const { return ParamAttrs; }
-
// Implement the AbstractTypeUser interface.
virtual void refineAbstractType(const DerivedType *OldTy, const Type *NewTy);
virtual void typeBecameConcrete(const DerivedType *AbsTy);
diff --git a/include/llvm/Function.h b/include/llvm/Function.h
index 56ed5c26f0..897e53b0a2 100644
--- a/include/llvm/Function.h
+++ b/include/llvm/Function.h
@@ -68,7 +68,7 @@ private:
BasicBlockListType BasicBlocks; ///< The basic blocks
mutable ArgumentListType ArgumentList; ///< The formal arguments
ValueSymbolTable *SymTab; ///< Symbol table of args/instructions
- ParamAttrsList *ParamAttrs; ///< Parameter attributes
+ const ParamAttrsList *ParamAttrs; ///< Parameter attributes
// The Calling Convention is stored in Value::SubclassData.
/*unsigned CallingConvention;*/
@@ -150,7 +150,10 @@ public:
/// Sets the parameter attributes for this Function. To construct a
/// ParamAttrsList, see ParameterAttributes.h
/// @brief Set the parameter attributes.
- void setParamAttrs(ParamAttrsList *attrs);
+ void setParamAttrs(const ParamAttrsList *attrs);
+
+ /// @brief Determine if the function returns a structure.
+ bool isStructReturn() const;
/// deleteBody - This method deletes the body of the function, and converts
/// the linkage to external.
diff --git a/include/llvm/Instructions.h b/include/llvm/Instructions.h
index ba132cfd58..96ca43d6ca 100644
--- a/include/llvm/Instructions.h
+++ b/include/llvm/Instructions.h
@@ -836,7 +836,7 @@ public:
///
class CallInst : public Instruction {
- ParamAttrsList *ParamAttrs; ///< parameter attributes for call
+ const ParamAttrsList *ParamAttrs; ///< parameter attributes for call
CallInst(const CallInst &CI);
void init(Value *Func, Value* const *Params, unsigned NumParams);
void init(Value *Func, Value *Actual1, Value *Actual2);
@@ -916,12 +916,15 @@ public:
/// parameter attributes information, if any.
/// @returns 0 if no attributes have been set.
/// @brief Get the parameter attributes.
- ParamAttrsList *getParamAttrs() const { return ParamAttrs; }
+ const ParamAttrsList *getParamAttrs() const { return ParamAttrs; }
/// Sets the parameter attributes for this CallInst. To construct a
/// ParamAttrsList, see ParameterAttributes.h
/// @brief Set the parameter attributes.
- void setParamAttrs(ParamAttrsList *attrs);
+ void setParamAttrs(const ParamAttrsList *attrs);
+
+ /// @brief Determine if the call returns a structure.
+ bool isStructReturn() const;
/// getCalledFunction - Return the function being called by this instruction
/// if it is a direct call. If it is a call through a function pointer,
@@ -1620,7 +1623,7 @@ private:
/// calling convention of the call.
///
class InvokeInst : public TerminatorInst {
- ParamAttrsList *ParamAttrs;
+ const ParamAttrsList *ParamAttrs;
InvokeInst(const InvokeInst &BI);
void init(Value *Fn, BasicBlock *IfNormal, BasicBlock *IfException,
Value* const *Args, unsigned NumArgs);
@@ -1691,12 +1694,15 @@ public:
/// parameter attributes information, if any.
/// @returns 0 if no attributes have been set.
/// @brief Get the parameter attributes.
- ParamAttrsList *getParamAttrs() const { return ParamAttrs; }
+ const ParamAttrsList *getParamAttrs() const { return ParamAttrs; }
/// Sets the parameter attributes for this InvokeInst. To construct a
/// ParamAttrsList, see ParameterAttributes.h
/// @brief Set the parameter attributes.
- void setParamAttrs(ParamAttrsList *attrs);
+ void setParamAttrs(const ParamAttrsList *attrs);
+
+ /// @brief Determine if the call returns a structure.
+ bool isStructReturn() const;
/// getCalledFunction - Return the function called, or null if this is an
/// indirect function invocation.
diff --git a/include/llvm/ParameterAttributes.h b/include/llvm/ParameterAttributes.h
index 1dd98eaa90..79b5d0c2a6 100644
--- a/include/llvm/ParameterAttributes.h
+++ b/include/llvm/ParameterAttributes.h
@@ -77,7 +77,7 @@ const uint16_t MutuallyIncompatible[3] = {
/// with a parameter index.
/// @brief ParameterAttributes with a parameter index.
struct ParamAttrsWithIndex {
- uint16_t attrs; ///< The attributes that are set, |'d together
+ uint16_t attrs; ///< The attributes that are set, or'd together
uint16_t index; ///< Index of the parameter for which the attributes apply
static ParamAttrsWithIndex get(uint16_t idx, uint16_t attrs) {
@@ -219,6 +219,13 @@ class ParamAttrsList : public FoldingSetNode {
/// @brief Return the number of parameter attributes this type has.
unsigned size() const { return attrs.size(); }
+ /// @brief Return the number of references to this ParamAttrsList.
+ unsigned numRefs() const { return refCount; }
+
+ /// @}
+ /// @name Mutators
+ /// @{
+ public:
/// Classes retaining references to ParamAttrsList objects should call this
/// method to increment the reference count. This ensures that the
/// ParamAttrsList object will not disappear until the class drops it.
diff --git a/include/llvm/Support/CallSite.h b/include/llvm/Support/CallSite.h
index fec7efc4cb..d03d209d5f 100644
--- a/include/llvm/Support/CallSite.h
+++ b/include/llvm/Support/CallSite.h
@@ -27,6 +27,7 @@ namespace llvm {
class CallInst;
class InvokeInst;
+class ParamAttrsList;
class CallSite {
Instruction *I;
@@ -57,6 +58,11 @@ public:
unsigned getCallingConv() const;
void setCallingConv(unsigned CC);
+ /// getParamAttrs/setParamAttrs - get or set the parameter attributes of
+ /// the call.
+ const ParamAttrsList *getParamAttrs() const;
+ void setParamAttrs(const ParamAttrsList *PAL);
+
/// getType - Return the type of the instruction that generated this call site
///
const Type *getType() const { return I->getType(); }
diff --git a/lib/Analysis/BasicAliasAnalysis.cpp b/lib/Analysis/BasicAliasAnalysis.cpp
index 2291852c86..82dee547a9 100644
--- a/lib/Analysis/BasicAliasAnalysis.cpp
+++ b/lib/Analysis/BasicAliasAnalysis.cpp
@@ -268,7 +268,7 @@ BasicAliasAnalysis::getModRefInfo(CallSite CS, Value *P, unsigned Size) {
static bool isNoAliasArgument(const Argument *Arg) {
const Function *Func = Arg->getParent();
- const ParamAttrsList *Attr = Func->getFunctionType()->getParamAttrs();
+ const ParamAttrsList *Attr = Func->getParamAttrs();
if (Attr) {
unsigned Idx = 1;
for (Function::const_arg_iterator I = Func->arg_begin(),
@@ -839,7 +839,7 @@ BasicAliasAnalysis::getModRefBehavior(Function *F, CallSite CS,
return UnknownModRefBehavior;
}
- const ParamAttrsList *Attrs = F->getFunctionType()->getParamAttrs();
+ const ParamAttrsList *Attrs = F->getParamAttrs();
if (Attrs && Attrs->paramHasAttr(0, ParamAttr::ReadNone))
return DoesNotAccessMemory;
if (Attrs && Attrs->paramHasAttr(0, ParamAttr::ReadOnly))
diff --git a/lib/AsmParser/llvmAsmParser.cpp.cvs b/lib/AsmParser/llvmAsmParser.cpp.cvs
index 4a1534881f..5907eec578 100644
--- a/lib/AsmParser/llvmAsmParser.cpp.cvs
+++ b/lib/AsmParser/llvmAsmParser.cpp.cvs
@@ -214,8 +214,8 @@
NOALIAS = 395,
BYVAL = 396,
NEST = 397,
- CONST = 398,
- PURE = 399,
+ READNONE = 398,
+ READONLY = 399,
DEFAULT = 400,
HIDDEN = 401,
PROTECTED = 402
@@ -362,8 +362,8 @@
#define NOALIAS 395
#define BYVAL 396
#define NEST 397
-#define CONST 398
-#define PURE 399
+#define READNONE 398
+#define READONLY 399
#define DEFAULT 400
#define HIDDEN 401
#define PROTECTED 402
@@ -372,7 +372,7 @@
/* Copy the first part of user declarations. */
-#line 14 "/llvm/lib/AsmParser/llvmAsmParser.y"
+#line 14 "/home/duncan/LLVM/llvm.top/llvm/lib/AsmParser/llvmAsmParser.y"
#include "ParserInternals.h"
#include "llvm/CallingConv.h"
@@ -391,9 +391,6 @@
#include <list>
#include <map>
#include <utility>
-#ifndef NDEBUG
-#define YYDEBUG 1
-#endif
// The following is a gross hack. In order to rid the libAsmParser library of
// exceptions, we have to have a way of getting the yyparse function to go into
@@ -413,15 +410,6 @@ static bool TriggerError = false;
int yyerror(const char *ErrorMsg); // Forward declarations to prevent "implicit
int yylex(); // declaration" of xxx warnings.
int yyparse();
-
-namespace llvm {
- std::string CurFilename;
-#if YYDEBUG
-static cl::opt<bool>
-Debug("debug-yacc", cl::desc("Print yacc debug state changes"),
- cl::Hidden, cl::init(false));
-#endif
-}
using namespace llvm;
static Module *ParserResult;
@@ -875,7 +863,7 @@ static Value *getVal(const Type *Ty, const ValID &ID) {
// Remember where this forward reference came from. FIXME, shouldn't we try
// to recycle these things??
CurModule.PlaceHolderInfo.insert(std::make_pair(V, std::make_pair(ID,
- llvmAsmlineno)));
+ LLLgetLineNo())));
if (inFunctionScope())
InsertValue(V, CurFun.LateResolveValues);
@@ -1307,22 +1295,11 @@ static PATypeHolder HandleUpRefs(const Type *ty) {
//
static Module* RunParser(Module * M);
-Module *llvm::RunVMAsmParser(const std::string &Filename, FILE *F) {
- set_scan_file(F);
-
- CurFilename = Filename;
- return RunParser(new Module(CurFilename));
-}
-
-Module *llvm::RunVMAsmParser(const char * AsmString, Module * M) {
- set_scan_string(AsmString);
-
- CurFilename = "from_memory";
- if (M == NULL) {
- return RunParser(new Module (CurFilename));
- } else {
- return RunParser(M);
- }
+Module *llvm::RunVMAsmParser(llvm::MemoryBuffer *MB) {
+ InitLLLexer(MB);
+ Module *M = RunParser(new Module(LLLgetFilename()));
+ FreeLexer();
+ return M;
}
@@ -1347,7 +1324,7 @@ Module *llvm::RunVMAsmParser(const char * AsmString, Module * M) {
#if ! defined YYSTYPE && ! defined YYSTYPE_IS_DECLARED
typedef union YYSTYPE
-#line 968 "/llvm/lib/AsmParser/llvmAsmParser.y"
+#line 945 "/home/duncan/LLVM/llvm.top/llvm/lib/AsmParser/llvmAsmParser.y"
{
llvm::Module *ModuleVal;
llvm::Function *FunctionVal;
@@ -1394,8 +1371,8 @@ typedef union YYSTYPE
llvm::ICmpInst::Predicate IPredicate;
llvm::FCmpInst::Predicate FPredicate;
}
-/* Line 193 of yacc.c. */
-#line 1399 "llvmAsmParser.tab.c"
+/* Line 187 of yacc.c. */
+#line 1376 "llvmAsmParser.tab.c"
YYSTYPE;
# define yystype YYSTYPE /* obsolescent; will be withdrawn */
# define YYSTYPE_IS_DECLARED 1
@@ -1408,7 +1385,7 @@ typedef union YYSTYPE
/* Line 216 of yacc.c. */
-#line 1412 "llvmAsmParser.tab.c"
+#line 1389 "llvmAsmParser.tab.c"
#ifdef short
# undef short
@@ -1458,7 +1435,7 @@ typedef short int yytype_int16;
#define YYSIZE_MAXIMUM ((YYSIZE_T) -1)
#ifndef YY_
-# if defined YYENABLE_NLS && YYENABLE_NLS
+# if YYENABLE_NLS
# if ENABLE_NLS
# include <libintl.h> /* INFRINGES ON USER NAME SPACE */
# define YY_(msgid) dgettext ("bison-runtime", msgid)
@@ -1623,7 +1600,7 @@ union yyalloc
/* YYFINAL -- State number of the termination state. */
#define YYFINAL 43
/* YYLAST -- Last index in YYTABLE. */
-#define YYLAST 1754
+#define YYLAST 1816
/* YYNTOKENS -- Number of terminals. */
#define YYNTOKENS 162
@@ -1632,7 +1609,7 @@ union yyalloc
/* YYNRULES -- Number of rules. */
#define YYNRULES 314
/* YYNRULES -- Number of states. */
-#define YYNSTATES 602
+#define YYNSTATES 608
/* YYTRANSLATE(YYLEX) -- Bison symbol number corresponding to YYLEX. */
#define YYUNDEFTOK 2
@@ -1720,10 +1697,10 @@ static const yytype_uint16 yyprhs[] =
690, 692, 694, 696, 700, 702, 708, 710, 712, 714,
716, 718, 720, 723, 726, 729, 733, 736, 737, 739,
742, 745, 749, 759, 769, 778, 793, 795, 797, 804,
- 810, 813, 820, 828, 832, 836, 842, 848, 849, 850,
- 854, 857, 859, 865, 871, 878, 885, 890, 897, 902,
- 907, 914, 921, 924, 933, 935, 937, 938, 942, 949,
- 953, 960, 963, 969, 977
+ 810, 813, 820, 828, 833, 838, 845, 852, 853, 854,
+ 858, 861, 863, 869, 875, 882, 889, 894, 901, 906,
+ 911, 918, 925, 928, 937, 939, 941, 942, 946, 953,
+ 957, 964, 967, 973, 981
};
/* YYRHS -- A `-1'-separated list of the rules' RHS. */
@@ -1752,7 +1729,7 @@ static const yytype_int16 yyrhs[] =
135, -1, 117, -1, 134, -1, 118, -1, 137, -1,
138, -1, 140, -1, 141, -1, 142, -1, -1, 184,
183, -1, 136, -1, 139, -1, 135, -1, 134, -1,
- 144, -1, 143, -1, -1, 186, 185, -1, -1, 53,
+ 143, -1, 144, -1, -1, 186, 185, -1, -1, 53,
4, -1, -1, 149, 53, 4, -1, 34, 22, -1,
-1, 189, -1, -1, 149, 192, 191, -1, 189, -1,
53, 4, -1, 11, -1, 12, -1, 13, -1, 16,
@@ -1811,60 +1788,60 @@ static const yytype_int16 yyrhs[] =
17, 229, -1, 71, -1, 72, -1, 235, 168, 227,
149, 17, 229, -1, 168, 227, 149, 17, 229, -1,
172, 241, -1, 194, 154, 229, 149, 229, 156, -1,
- 237, 149, 154, 229, 149, 229, 156, -1, 194, 229,
- 184, -1, 17, 229, 184, -1, 238, 149, 194, 229,
- 184, -1, 238, 149, 17, 229, 184, -1, -1, -1,
- 239, 149, 230, -1, 56, 55, -1, 55, -1, 163,
- 194, 229, 149, 229, -1, 164, 194, 229, 149, 229,
- -1, 88, 166, 194, 229, 149, 229, -1, 89, 167,
- 194, 229, 149, 229, -1, 165, 230, 38, 194, -1,
- 129, 230, 149, 230, 149, 230, -1, 130, 230, 149,
- 194, -1, 131, 230, 149, 230, -1, 132, 230, 149,
- 230, 149, 230, -1, 133, 230, 149, 230, 149, 230,
- -1, 128, 237, -1, 240, 182, 196, 229, 152, 238,
- 153, 186, -1, 243, -1, 36, -1, -1, 110, 194,
- 188, -1, 110, 194, 149, 11, 229, 188, -1, 111,
- 194, 188, -1, 111, 194, 149, 11, 229, 188, -1,
- 112, 230, -1, 242, 113, 194, 229, 188, -1, 242,
- 114, 230, 149, 194, 229, 188, -1, 115, 194, 229,
- 239, -1
+ 237, 149, 154, 229, 149, 229, 156, -1, 194, 184,
+ 229, 184, -1, 17, 184, 229, 184, -1, 238, 149,
+ 194, 184, 229, 184, -1, 238, 149, 17, 184, 229,
+ 184, -1, -1, -1, 239, 149, 230, -1, 56, 55,
+ -1, 55, -1, 163, 194, 229, 149, 229, -1, 164,
+ 194, 229, 149, 229, -1, 88, 166, 194, 229, 149,
+ 229, -1, 89, 167, 194, 229, 149, 229, -1, 165,
+ 230, 38, 194, -1, 129, 230, 149, 230, 149, 230,
+ -1, 130, 230, 149, 194, -1, 131, 230, 149, 230,
+ -1, 132, 230, 149, 230, 149, 230, -1, 133, 230,
+ 149, 230, 149, 230, -1, 128, 237, -1, 240, 182,
+ 196, 229, 152, 238, 153, 186, -1, 243, -1, 36,
+ -1, -1, 110, 194, 188, -1, 110, 194, 149, 11,
+ 229, 188, -1, 111, 194, 188, -1, 111, 194, 149,
+ 11, 229, 188, -1, 112, 230, -1, 242, 113, 194,
+ 229, 188, -1, 242, 114, 230, 149, 194, 229, 188,
+ -1, 115, 194, 229, 239, -1
};
/* YYRLINE[YYN] -- source line where rule number YYN was defined. */
static const yytype_uint16 yyrline[] =
{
- 0, 1128, 1128, 1128, 1128, 1128, 1128, 1128, 1128, 1128,
- 1128, 1129, 1129, 1129, 1129, 1129, 1129, 1130, 1130, 1130,
- 1130, 1130, 1130, 1131, 1131, 1131, 1131, 1131, 1131, 1134,
- 1134, 1135, 1135, 1136, 1136, 1137, 1137, 1138, 1138, 1142,
- 1142, 1143, 1143, 1144, 1144, 1145, 1145, 1146, 1146, 1147,
- 1147, 1148, 1148, 1149, 1150, 1155, 1156, 1156, 1156, 1156,
- 1156, 1158, 1158, 1158, 1159, 1159, 1163, 1167, 1172, 1172,
- 1174, 1175, 1180, 1186, 1187, 1188, 1189, 1190, 1194, 1195,
- 1196, 1200, 1201, 1202, 1203, 1207, 1208, 1209, 1213, 1214,
- 1215, 1216, 1217, 1221, 1222, 1223, 1226, 1227, 1228, 1229,
- 1230, 1231, 1232, 1239, 1240, 1241, 1242, 1243, 1244, 1245,
- 1246, 1247, 1250, 1251, 1256, 1257, 1258, 1259, 1260, 1261,
- 1264, 1265, 1272, 1273, 1279, 1280, 1288, 1296, 1297, 1302,
- 1303, 1304, 1309, 1322, 1322, 1322, 1322, 1322, 1322, 1322,
- 1325, 1329, 1333, 1340, 1345, 1353, 1383, 1414, 1419, 1429,
- 1439, 1443, 1453, 1460, 1467, 1474, 1479, 1484, 1491, 1492,
- 1499, 1506, 1514, 1520, 1532, 1560, 1576, 1603, 1631, 1657,
- 1677, 1703, 1723, 1735, 1742, 1808, 1818, 1828, 1834, 1844,
- 1850, 1860, 1865, 1870, 1883, 1895, 1917, 1925, 1931, 1942,
- 1947, 1952, 1958, 1964, 1973, 1977, 1985, 1985, 1988, 1988,
- 1991, 2003, 2024, 2029, 2037, 2038, 2042, 2042, 2046, 2046,
- 2049, 2052, 2076, 2087, 2087, 2098, 2097, 2107, 2106, 2117,
- 2157, 2160, 2166, 2176, 2180, 2185, 2187, 2192, 2197, 2206,
- 2216, 2227, 2231, 2240, 2249, 2254, 2375, 2375, 2377, 2386,
- 2386, 2388, 2393, 2405, 2409, 2414, 2418, 2422, 2426, 2430,
- 2434, 2438, 2442, 2446, 2471, 2475, 2485, 2489, 2493, 2498,
- 2505, 2505, 2511, 2520, 2524, 2533, 2542, 2551, 2555, 2562,
- 2566, 2570, 2575, 2585, 2604, 2613, 2693, 2697, 2704, 2715,
- 2728, 2738, 2749, 2759, 2768, 2774, 2783, 2789, 2792, 2793,
- 2800, 2804, 2809, 2825, 2842, 2856, 2870, 2882, 2890, 2897,
- 2903, 2909, 2915, 2930, 3015, 3020, 3024, 3031, 3038, 3046,
- 3053, 3061, 3069, 3083, 3100
+ 0, 1105, 1105, 1105, 1105, 1105, 1105, 1105, 1105, 1105,
+ 1105, 1106, 1106, 1106, 1106, 1106, 1106, 1107, 1107, 1107,
+ 1107, 1107, 1107, 1108, 1108, 1108, 1108, 1108, 1108, 1111,
+ 1111, 1112, 1112, 1113, 1113, 1114, 1114, 1115, 1115, 1119,
+ 1119, 1120, 1120, 1121, 1121, 1122, 1122, 1123, 1123, 1124,
+ 11