X-Git-Url: http://demsky.eecs.uci.edu/git/?a=blobdiff_plain;f=include%2Fllvm%2FSupport%2FCasting.h;h=48988f8a6bb8354c71326e634364acbb2895b4b2;hb=6d53f55291c8541a508a8c26d847b942196f6f1c;hp=d18975486571a00313d0bb6e7c295cc10126260c;hpb=551ccae044b0ff658fe629dd67edd5ffe75d10e8;p=oota-llvm.git diff --git a/include/llvm/Support/Casting.h b/include/llvm/Support/Casting.h index d1897548657..48988f8a6bb 100644 --- a/include/llvm/Support/Casting.h +++ b/include/llvm/Support/Casting.h @@ -1,10 +1,10 @@ //===-- llvm/Support/Casting.h - Allow flexible, checked, casts -*- 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 file is distributed under the University of Illinois Open Source +// License. See LICENSE.TXT for details. +// //===----------------------------------------------------------------------===// // // This file defines the isa(), cast(), dyn_cast(), cast_or_null(), @@ -15,6 +15,8 @@ #ifndef LLVM_SUPPORT_CASTING_H #define LLVM_SUPPORT_CASTING_H +#include + namespace llvm { //===----------------------------------------------------------------------===// @@ -48,7 +50,7 @@ template struct simplify_type { // if (isa(myVal)) { ... } // template -inline bool isa_impl(const From &Val) { +inline bool isa_impl(const From &Val) { return To::classof(&Val); } @@ -57,7 +59,7 @@ struct isa_impl_wrap { // When From != SimplifiedType, we can simplify the type some more by using // the simplify_type template. static bool doit(const From &Val) { - return isa_impl_cl::template + return isa_impl_cl::template isa(simplify_type::getSimplifiedValue(Val)); } }; @@ -159,7 +161,7 @@ struct cast_retty_wrap { template struct cast_retty { - typedef typename cast_retty_wrap::SimpleType>::ret_type ret_type; }; @@ -219,7 +221,7 @@ inline typename cast_retty::ret_type cast_or_null(Y *Val) { // template -inline typename cast_retty::ret_type dyn_cast(Y Val) { +inline typename cast_retty::ret_type dyn_cast(const Y &Val) { return isa(Val) ? cast(Val) : 0; } @@ -227,13 +229,13 @@ inline typename cast_retty::ret_type dyn_cast(Y Val) { // value is accepted. // template -inline typename cast_retty::ret_type dyn_cast_or_null(Y Val) { +inline typename cast_retty::ret_type dyn_cast_or_null(const Y &Val) { return (Val && isa(Val)) ? cast(Val) : 0; } #ifdef DEBUG_CAST_OPERATORS -#include +#include "llvm/Support/Streams.h" struct bar { bar() {} @@ -248,7 +250,7 @@ struct foo { }*/ }; -template <> inline bool isa_impl(const bar &Val) { +template <> inline bool isa_impl(const bar &Val) { cerr << "Classof: " << &Val << "\n"; return true; } @@ -279,7 +281,7 @@ void test(bar &B1, const bar *B2) { const foo *F12 = cast_or_null(B2); const foo *F13 = cast_or_null(B4); const foo *F14 = cast_or_null(fub()); // Shouldn't print. - + // These lines are errors... //foo *F20 = cast(B2); // Yields const foo* //foo &F21 = cast(B3); // Yields const foo&