add an assertion
[oota-llvm.git] / include / llvm / User.h
index eab7a96e46b7b7eefbec2395b49679628b741f53..47f300cd534aafe9888cc43ff8feec4903f5a8f7 100644 (file)
@@ -1,4 +1,11 @@
 //===-- llvm/User.h - User class definition ---------------------*- C++ -*-===//
+// 
+//                     The LLVM Compiler Infrastructure
+//
+// This file was developed by the LLVM research group and is distributed under
+// the University of Illinois Open Source License. See LICENSE.TXT for details.
+// 
+//===----------------------------------------------------------------------===//
 //
 // This class defines the interface that one who 'use's a Value must implement.
 // Each instance of the Value class keeps track of what User's have handles
 #include "llvm/Value.h"
 #include <vector>
 
+namespace llvm {
+
 class User : public Value {
   User(const User &);             // Do not implement
 protected:
   std::vector<Use> Operands;
 public:
-  User(const Type *Ty, ValueTy vty, const std::string &name = "");
+  User(const Type *Ty, unsigned vty, const std::string &name = "")
+    : Value(Ty, vty, name) {}
 
   inline Value *getOperand(unsigned i) { 
     assert(i < Operands.size() && "getOperand() out of range!");
@@ -34,7 +44,7 @@ public:
     assert(i < Operands.size() && "setOperand() out of range!");
     Operands[i] = Val;
   }
-  inline unsigned getNumOperands() const { return Operands.size(); }
+  inline unsigned getNumOperands() const { return (unsigned)Operands.size(); }
 
   // ---------------------------------------------------------------------------
   // Operand Iterator interface...
@@ -77,9 +87,7 @@ public:
   // Methods for support type inquiry through isa, cast, and dyn_cast:
   static inline bool classof(const User *) { return true; }
   static inline bool classof(const Value *V) {
-    return V->getValueType() == Value::GlobalVariableVal ||
-           V->getValueType() == Value::ConstantVal ||
-           V->getValueType() == Value::InstructionVal;
+    return isa<Instruction>(V) || isa<Constant>(V);
   }
 };
 
@@ -87,7 +95,7 @@ template<> struct simplify_type<User::op_iterator> {
   typedef Value* SimpleType;
   
   static SimpleType getSimplifiedValue(const User::op_iterator &Val) {
-    return (SimpleType)Val->get();
+    return static_cast<SimpleType>(Val->get());
   }
 };
 template<> struct simplify_type<const User::op_iterator>
@@ -97,10 +105,12 @@ template<> struct simplify_type<User::const_op_iterator> {
   typedef Value* SimpleType;
   
   static SimpleType getSimplifiedValue(const User::const_op_iterator &Val) {
-    return (SimpleType)Val->get();
+    return static_cast<SimpleType>(Val->get());
   }
 };
 template<> struct simplify_type<const User::const_op_iterator>
   : public simplify_type<User::const_op_iterator> {};
 
+} // End llvm namespace
+
 #endif