Keep lists of values so they can be examined.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@32120 91177308-0d34-0410-b5e6-96231b3b80d8
diff --git a/tools/llvm-upgrade/UpgradeParser.y.cvs b/tools/llvm-upgrade/UpgradeParser.y.cvs
index c9c98ce..f8f9bd3 100644
--- a/tools/llvm-upgrade/UpgradeParser.y.cvs
+++ b/tools/llvm-upgrade/UpgradeParser.y.cvs
@@ -15,7 +15,6 @@
#include "ParserInternals.h"
#include <llvm/ADT/StringExtras.h>
#include <algorithm>
-#include <vector>
#include <map>
#include <utility>
#include <iostream>
@@ -38,6 +37,15 @@
typedef std::map<std::string,TypeInfo> TypeMap;
static TypeMap NamedTypes;
+void destroy(ValueList* VL) {
+ while (!VL->empty()) {
+ ValueInfo& VI = VL->back();
+ VI.destroy();
+ VL->pop_back();
+ }
+ delete VL;
+}
+
void UpgradeAssembly(const std::string &infile, std::istream& in,
std::ostream &out, bool debug)
{
@@ -203,6 +211,7 @@
TypeInfo Type;
ValueInfo Value;
ConstInfo Const;
+ ValueList* ValList;
}
%token <Type> VOID BOOL SBYTE UBYTE SHORT USHORT INT UINT LONG ULONG
@@ -236,13 +245,13 @@
%type <String> ArgVal ArgListH ArgList FunctionHeaderH BEGIN FunctionHeader END
%type <String> Function FunctionProto BasicBlock TypeListI
%type <String> InstructionList BBTerminatorInst JumpTable Inst PHIList
-%type <String> ValueRefList OptTailCall InstVal IndexList OptVolatile
+%type <String> OptTailCall InstVal OptVolatile
%type <String> MemoryInst SymbolicValueRef OptSideEffect GlobalType
%type <String> FnDeclareLinkage BasicBlockList BigOrLittle AsmBlock
-%type <String> Name ValueRef ValueRefListE ConstValueRef
+%type <String> Name ValueRef ConstValueRef ConstVector
%type <String> ShiftOps SetCondOps LogicalOps ArithmeticOps CastOps
-%type <String> ConstVector
+%type <ValList> ValueRefList ValueRefListE IndexList
%type <Type> IntType SIntType UIntType FPType TypesV Types
%type <Type> PrimType UpRTypesV UpRTypes
@@ -558,7 +567,13 @@
delete $1; $3.destroy(); delete $4; $5.destroy();
}
| GETELEMENTPTR '(' ConstVal IndexList ')' {
- *$1 += "(" + *$3.cnst + " " + *$4 + ")";
+ *$1 += "(" + *$3.cnst;
+ for (unsigned i = 0; i < $4->size(); ++i) {
+ ValueInfo& VI = (*$4)[i];
+ *$1 += ", " + *VI.val;
+ VI.destroy();
+ }
+ *$1 += ")";
$$ = $1;
$3.destroy();
delete $4;
@@ -971,8 +986,15 @@
*O << " ";
if (!$1->empty())
*O << *$1 << " = ";
- *O << *$2 << " " << *$3 << " " << *$4.newTy << " " << *$5 << " ("
- << *$7 << ") " << *$9 << " " << *$10.newTy << " " << *$11 << " "
+ *O << *$2 << " " << *$3 << " " << *$4.newTy << " " << *$5 << " (";
+ for (unsigned i = 0; i < $7->size(); ++i) {
+ ValueInfo& VI = (*$7)[i];
+ *O << *VI.val;
+ if (i+1 < $7->size())
+ *O << ", ";
+ VI.destroy();
+ }
+ *O << ") " << *$9 << " " << *$10.newTy << " " << *$11 << " "
<< *$12 << " " << *$13.newTy << " " << *$14 << "\n";
delete $1; delete $2; delete $3; $4.destroy(); delete $5; delete $7;
delete $9; $10.destroy(); delete $11; delete $12; $13.destroy();
@@ -1026,17 +1048,19 @@
ValueRefList
- : ResolvedVal { $$ = new std::string(*$1.val); $1.destroy(); }
+ : ResolvedVal {
+ $$ = new ValueList();
+ $$->push_back($1);
+ }
| ValueRefList ',' ResolvedVal {
- *$1 += ", " + *$3.val;
- $3.destroy();
+ $1->push_back($3);
$$ = $1;
};
// ValueRefListE - Just like ValueRefList, except that it may also be empty!
ValueRefListE
- : ValueRefList
- | /*empty*/ { $$ = new std::string(); }
+ : ValueRefList { $$ = $1; }
+ | /*empty*/ { $$ = new ValueList(); }
;
OptTailCall
@@ -1125,7 +1149,15 @@
*$1 += " " + *$2;
if (!$1->empty())
*$1 += " ";
- *$1 += *$3.newTy + " " + *$4 + "(" + *$6 + ")";
+ *$1 += *$3.newTy + " " + *$4 + "(";
+ for (unsigned i = 0; i < $6->size(); ++i) {
+ ValueInfo& VI = (*$6)[i];
+ *$1 += *VI.val;
+ if (i+1 < $6->size())
+ *$1 += ", ";
+ VI.destroy();
+ }
+ *$1 += ")";
delete $2; $3.destroy(); delete $4; delete $6;
$$ = $1;
}
@@ -1134,11 +1166,8 @@
// IndexList - List of indices for GEP based instructions...
IndexList
- : ',' ValueRefList {
- $2->insert(0, ", ");
- $$ = $2;
- }
- | /* empty */ { $$ = new std::string(); }
+ : ',' ValueRefList { $$ = $2; }
+ | /* empty */ { $$ = new ValueList(); }
;
OptVolatile
@@ -1194,7 +1223,12 @@
$$ = $1;
}
| GETELEMENTPTR Types ValueRef IndexList {
- *$1 += " " + *$2.newTy + " " + *$3 + " " + *$4;
+ *$1 += " " + *$2.newTy + " " + *$3;
+ for (unsigned i = 0; i < $4->size(); ++i) {
+ ValueInfo& VI = (*$4)[i];
+ *$1 += ", " + *VI.val;
+ VI.destroy();
+ }
$2.destroy(); delete $3; delete $4;
$$ = $1;
};