Author: spyffe Date: Tue Sep 8 17:23:39 2015 New Revision: 247085 URL: http://llvm.org/viewvc/llvm-project?rev=247085&view=rev Log: ExpressionVariable now uses llvm::cast() instead of As...() for RTTI. As part of our overall switch from hand-rolling RTTI to using LLVM-compatible methods, I've done the same for ExpressionVariable. The main documentation for how to do this is in TypeSystem.h, so I've simply referred to that.
Modified: lldb/trunk/include/lldb/Expression/ExpressionVariable.h lldb/trunk/source/Expression/ClangExpressionDeclMap.cpp lldb/trunk/source/Expression/Materializer.cpp lldb/trunk/source/Plugins/ExpressionParser/Clang/ClangExpressionVariable.cpp lldb/trunk/source/Plugins/ExpressionParser/Clang/ClangExpressionVariable.h Modified: lldb/trunk/include/lldb/Expression/ExpressionVariable.h URL: http://llvm.org/viewvc/llvm-project/lldb/trunk/include/lldb/Expression/ExpressionVariable.h?rev=247085&r1=247084&r2=247085&view=diff ============================================================================== --- lldb/trunk/include/lldb/Expression/ExpressionVariable.h (original) +++ lldb/trunk/include/lldb/Expression/ExpressionVariable.h Tue Sep 8 17:23:39 2015 @@ -33,6 +33,23 @@ class ExpressionVariable : public std::enable_shared_from_this<ExpressionVariable> { public: + //---------------------------------------------------------------------- + // See TypeSystem.h for how to add subclasses to this. + //---------------------------------------------------------------------- + enum LLVMCastKind { + eKindClang, + eKindSwift, + eKindGo, + kNumKinds + }; + + LLVMCastKind getKind() const { return m_kind; } + + ExpressionVariable(LLVMCastKind kind) : + m_kind(kind) + { + } + size_t GetByteSize () { @@ -51,10 +68,6 @@ public: return m_frozen_sp; } - virtual ClangExpressionVariable *AsClangExpressionVariable() { - return nullptr; - } - uint8_t *GetValueBytes(); void @@ -135,6 +148,7 @@ public: // these should be private lldb::ValueObjectSP m_frozen_sp; lldb::ValueObjectSP m_live_sp; + LLVMCastKind m_kind; }; //---------------------------------------------------------------------- Modified: lldb/trunk/source/Expression/ClangExpressionDeclMap.cpp URL: http://llvm.org/viewvc/llvm-project/lldb/trunk/source/Expression/ClangExpressionDeclMap.cpp?rev=247085&r1=247084&r2=247085&view=diff ============================================================================== --- lldb/trunk/source/Expression/ClangExpressionDeclMap.cpp (original) +++ lldb/trunk/source/Expression/ClangExpressionDeclMap.cpp Tue Sep 8 17:23:39 2015 @@ -136,7 +136,7 @@ ClangExpressionDeclMap::DidParse() { ExpressionVariableSP var_sp(m_found_entities.GetVariableAtIndex(entity_index)); if (var_sp) - var_sp->AsClangExpressionVariable()->DisableParserVars(GetParserID()); + llvm::cast<ClangExpressionVariable>(var_sp.get())->DisableParserVars(GetParserID()); } for (size_t pvar_index = 0, num_pvars = m_parser_vars->m_persistent_vars->GetSize(); @@ -145,7 +145,7 @@ ClangExpressionDeclMap::DidParse() { ExpressionVariableSP pvar_sp(m_parser_vars->m_persistent_vars->GetVariableAtIndex(pvar_index)); if (pvar_sp) - pvar_sp->AsClangExpressionVariable()->DisableParserVars(GetParserID()); + llvm::cast<ClangExpressionVariable>(pvar_sp.get())->DisableParserVars(GetParserID()); } DisableParserVars(); @@ -350,11 +350,11 @@ ClangExpressionDeclMap::AddValueToStruct // We know entity->m_parser_vars is valid because we used a parser variable // to find it - ClangExpressionVariable::ParserVars *parser_vars = var->AsClangExpressionVariable()->GetParserVars(GetParserID()); + ClangExpressionVariable::ParserVars *parser_vars = llvm::cast<ClangExpressionVariable>(var)->GetParserVars(GetParserID()); parser_vars->m_llvm_value = value; - if (ClangExpressionVariable::JITVars *jit_vars = var->AsClangExpressionVariable()->GetJITVars(GetParserID())) + if (ClangExpressionVariable::JITVars *jit_vars = llvm::cast<ClangExpressionVariable>(var)->GetJITVars(GetParserID())) { // We already laid this out; do not touch @@ -362,9 +362,9 @@ ClangExpressionDeclMap::AddValueToStruct log->Printf("Already placed at 0x%llx", (unsigned long long)jit_vars->m_offset); } - var->AsClangExpressionVariable()->EnableJITVars(GetParserID()); + llvm::cast<ClangExpressionVariable>(var)->EnableJITVars(GetParserID()); - ClangExpressionVariable::JITVars *jit_vars = var->AsClangExpressionVariable()->GetJITVars(GetParserID()); + ClangExpressionVariable::JITVars *jit_vars = llvm::cast<ClangExpressionVariable>(var)->GetJITVars(GetParserID()); jit_vars->m_alignment = alignment; jit_vars->m_size = size; @@ -463,8 +463,8 @@ ClangExpressionDeclMap::GetStructElement if (!member_sp) return false; - ClangExpressionVariable::ParserVars *parser_vars = member_sp->AsClangExpressionVariable()->GetParserVars(GetParserID()); - ClangExpressionVariable::JITVars *jit_vars = member_sp->AsClangExpressionVariable()->GetJITVars(GetParserID()); + ClangExpressionVariable::ParserVars *parser_vars = llvm::cast<ClangExpressionVariable>(member_sp.get())->GetParserVars(GetParserID()); + ClangExpressionVariable::JITVars *jit_vars = llvm::cast<ClangExpressionVariable>(member_sp.get())->GetJITVars(GetParserID()); if (!parser_vars || !jit_vars || @@ -1806,7 +1806,7 @@ ClangExpressionDeclMap::AddOneVariable(N { Log *log(lldb_private::GetLogIfAllCategoriesSet (LIBLLDB_LOG_EXPRESSIONS)); - TypeFromUser user_type (pvar_sp->AsClangExpressionVariable()->GetTypeFromUser()); + TypeFromUser user_type (llvm::cast<ClangExpressionVariable>(pvar_sp.get())->GetTypeFromUser()); TypeFromParser parser_type (GuardedCopyType(user_type)); @@ -1819,8 +1819,8 @@ ClangExpressionDeclMap::AddOneVariable(N NamedDecl *var_decl = context.AddVarDecl(ClangASTContext::GetLValueReferenceType(parser_type)); - pvar_sp->AsClangExpressionVariable()->EnableParserVars(GetParserID()); - ClangExpressionVariable::ParserVars *parser_vars = pvar_sp->AsClangExpressionVariable()->GetParserVars(GetParserID()); + llvm::cast<ClangExpressionVariable>(pvar_sp.get())->EnableParserVars(GetParserID()); + ClangExpressionVariable::ParserVars *parser_vars = llvm::cast<ClangExpressionVariable>(pvar_sp.get())->GetParserVars(GetParserID()); parser_vars->m_parser_type = parser_type; parser_vars->m_named_decl = var_decl; parser_vars->m_llvm_value = NULL; @@ -1901,7 +1901,7 @@ ClangExpressionDeclMap::ResolveUnknownTy { ExpressionVariableSP entity = m_found_entities.GetVariableAtIndex(index); - ClangExpressionVariable::ParserVars *parser_vars = entity->AsClangExpressionVariable()->GetParserVars(GetParserID()); + ClangExpressionVariable::ParserVars *parser_vars = llvm::cast<ClangExpressionVariable>(entity.get())->GetParserVars(GetParserID()); if (entity->m_flags & ClangExpressionVariable::EVUnknownType) { Modified: lldb/trunk/source/Expression/Materializer.cpp URL: http://llvm.org/viewvc/llvm-project/lldb/trunk/source/Expression/Materializer.cpp?rev=247085&r1=247084&r2=247085&view=diff ============================================================================== --- lldb/trunk/source/Expression/Materializer.cpp (original) +++ lldb/trunk/source/Expression/Materializer.cpp Tue Sep 8 17:23:39 2015 @@ -101,7 +101,7 @@ public: // Put the location of the spare memory into the live data of the ValueObject. m_persistent_variable_sp->m_live_sp = ValueObjectConstResult::Create (map.GetBestExecutionContextScope(), - m_persistent_variable_sp->AsClangExpressionVariable()->GetTypeFromUser(), + llvm::cast<ClangExpressionVariable>(m_persistent_variable_sp.get())->GetTypeFromUser(), m_persistent_variable_sp->GetName(), mem, eAddressTypeLoad, @@ -232,7 +232,7 @@ public: } m_persistent_variable_sp->m_live_sp = ValueObjectConstResult::Create (map.GetBestExecutionContextScope (), - m_persistent_variable_sp->AsClangExpressionVariable()->GetTypeFromUser(), + llvm::cast<ClangExpressionVariable>(m_persistent_variable_sp.get())->GetTypeFromUser(), m_persistent_variable_sp->GetName(), location, eAddressTypeLoad, Modified: lldb/trunk/source/Plugins/ExpressionParser/Clang/ClangExpressionVariable.cpp URL: http://llvm.org/viewvc/llvm-project/lldb/trunk/source/Plugins/ExpressionParser/Clang/ClangExpressionVariable.cpp?rev=247085&r1=247084&r2=247085&view=diff ============================================================================== --- lldb/trunk/source/Plugins/ExpressionParser/Clang/ClangExpressionVariable.cpp (original) +++ lldb/trunk/source/Plugins/ExpressionParser/Clang/ClangExpressionVariable.cpp Tue Sep 8 17:23:39 2015 @@ -24,7 +24,7 @@ using namespace clang; const char *g_clang_expression_variable_kind_name = "ClangExpressionVariable"; ClangExpressionVariable::ClangExpressionVariable(ExecutionContextScope *exe_scope, lldb::ByteOrder byte_order, uint32_t addr_byte_size) : - ExpressionVariable(), + ExpressionVariable(LLVMCastKind::eKindClang), m_parser_vars(), m_jit_vars () { @@ -36,7 +36,7 @@ ClangExpressionVariable::ClangExpression Value &value, const ConstString &name, uint16_t flags) : - ExpressionVariable(), + ExpressionVariable(LLVMCastKind::eKindClang), m_parser_vars(), m_jit_vars () { @@ -45,7 +45,7 @@ ClangExpressionVariable::ClangExpression } ClangExpressionVariable::ClangExpressionVariable (const lldb::ValueObjectSP &valobj_sp) : - ExpressionVariable(), + ExpressionVariable(LLVMCastKind::eKindClang), m_parser_vars(), m_jit_vars () { Modified: lldb/trunk/source/Plugins/ExpressionParser/Clang/ClangExpressionVariable.h URL: http://llvm.org/viewvc/llvm-project/lldb/trunk/source/Plugins/ExpressionParser/Clang/ClangExpressionVariable.h?rev=247085&r1=247084&r2=247085&view=diff ============================================================================== --- lldb/trunk/source/Plugins/ExpressionParser/Clang/ClangExpressionVariable.h (original) +++ lldb/trunk/source/Plugins/ExpressionParser/Clang/ClangExpressionVariable.h Tue Sep 8 17:23:39 2015 @@ -21,6 +21,8 @@ #include <vector> // Other libraries and framework includes +#include "llvm/Support/Casting.h" + // Project includes #include "lldb/lldb-public.h" #include "lldb/Core/ClangForward.h" @@ -71,12 +73,7 @@ public: uint16_t flags = EVNone); ClangExpressionVariable(const lldb::ValueObjectSP &valobj_sp); - - ClangExpressionVariable *AsClangExpressionVariable() override - { - return this; - } - + //---------------------------------------------------------------------- /// Utility functions for dealing with ExpressionVariableLists in Clang-specific ways //---------------------------------------------------------------------- @@ -98,7 +95,7 @@ public: { var_sp = list.GetVariableAtIndex(index); - if (ClangExpressionVariable *clang_var = var_sp->AsClangExpressionVariable()) + if (ClangExpressionVariable *clang_var = llvm::dyn_cast<ClangExpressionVariable>(var_sp.get())) { ClangExpressionVariable::ParserVars *parser_vars = clang_var->GetParserVars(parser_id); @@ -277,6 +274,14 @@ public: TypeFromUser GetTypeFromUser (); + //------------------------------------------------------------------ + // llvm casting support + //------------------------------------------------------------------ + static bool classof(const ExpressionVariable *ev) + { + return ev->getKind() == ExpressionVariable::eKindClang; + } + //---------------------------------------------------------------------- /// Members //---------------------------------------------------------------------- _______________________________________________ lldb-commits mailing list lldb-commits@lists.llvm.org http://lists.llvm.org/cgi-bin/mailman/listinfo/lldb-commits