aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorReid Spencer <rspencer@reidspencer.com>2007-01-03 23:45:17 +0000
committerReid Spencer <rspencer@reidspencer.com>2007-01-03 23:45:17 +0000
commit7596fd077491e4c3f558798ee5f0f1fcd35fb14b (patch)
treea2b99511eee503ee5816760a062247aa46345f80
parente8fc2f97ccb7606822503e6d551e39b1529c8cdf (diff)
Implement many new type features including upreferences, proper retention
of structure contents, counts of packed and array types, etc. git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@32847 91177308-0d34-0410-b5e6-96231b3b80d8
-rw-r--r--tools/llvm-upgrade/ParserInternals.h19
1 files changed, 15 insertions, 4 deletions
diff --git a/tools/llvm-upgrade/ParserInternals.h b/tools/llvm-upgrade/ParserInternals.h
index 9de3588f8c..4add8fb447 100644
--- a/tools/llvm-upgrade/ParserInternals.h
+++ b/tools/llvm-upgrade/ParserInternals.h
@@ -50,7 +50,7 @@ int yyerror(const char *ErrorMsg) ;
enum Types {
BoolTy, SByteTy, UByteTy, ShortTy, UShortTy, IntTy, UIntTy, LongTy, ULongTy,
FloatTy, DoubleTy, PointerTy, PackedTy, ArrayTy, StructTy, PackedStructTy,
- OpaqueTy, VoidTy, LabelTy, FunctionTy, UnresolvedTy, NumericTy
+ OpaqueTy, VoidTy, LabelTy, FunctionTy, UnresolvedTy, UpRefTy
};
/// This type is used to keep track of the signedness of values. Instead
@@ -152,7 +152,7 @@ struct TypeInfo {
}
bool isUnresolved() const { return oldTy == UnresolvedTy; }
- bool isNumeric() const { return oldTy == NumericTy; }
+ bool isUpReference() const { return oldTy == UpRefTy; }
bool isVoid() const { return oldTy == VoidTy; }
bool isBool() const { return oldTy == BoolTy; }
bool isSigned() const {
@@ -233,6 +233,17 @@ struct TypeInfo {
return 0;
}
+ unsigned getNumStructElements() const {
+ return (elements ? elements->size() : 0);
+ }
+
+ TypeInfo* getElement(unsigned idx) {
+ if (elements)
+ if (idx < elements->size())
+ return (*elements)[idx];
+ return 0;
+ }
+
private:
std::string* newTy;
Types oldTy;
@@ -246,11 +257,11 @@ private:
struct ConstInfo {
std::string *cnst;
TypeInfo *type;
- void destroy() { delete cnst; delete type; }
+ void destroy() { delete cnst; }
};
typedef std::vector<ValueInfo> ValueList;
-inline void ValueInfo::destroy() { delete val; delete type; }
+inline void ValueInfo::destroy() { delete val; }
#endif