[Lldb-commits] [lldb] r141839 - in /lldb/trunk: include/lldb/Expression/ClangExpressionDeclMap.h source/Expression/ClangExpressionDeclMap.cpp

Sean Callanan scallanan at apple.com
Wed Oct 12 17:09:20 PDT 2011


Author: spyffe
Date: Wed Oct 12 19:09:20 2011
New Revision: 141839

URL: http://llvm.org/viewvc/llvm-project?rev=141839&view=rev
Log:
Now that we know the values are going to stick around,
we don't need to look them up again when materializing.

Switched over the materialization mechanism (for JIT
expressions) and the lookup mechanism (for interpreted
expressions) to use the VariableSP/Symbol that were
found during parsing.

Modified:
    lldb/trunk/include/lldb/Expression/ClangExpressionDeclMap.h
    lldb/trunk/source/Expression/ClangExpressionDeclMap.cpp

Modified: lldb/trunk/include/lldb/Expression/ClangExpressionDeclMap.h
URL: http://llvm.org/viewvc/llvm-project/lldb/trunk/include/lldb/Expression/ClangExpressionDeclMap.h?rev=141839&r1=141838&r2=141839&view=diff
==============================================================================
--- lldb/trunk/include/lldb/Expression/ClangExpressionDeclMap.h (original)
+++ lldb/trunk/include/lldb/Expression/ClangExpressionDeclMap.h Wed Oct 12 19:09:20 2011
@@ -969,7 +969,7 @@
     //------------------------------------------------------------------
     Value *
     GetVariableValue (ExecutionContext &exe_ctx,
-                      lldb::VariableSP var,
+                      lldb::VariableSP &var,
                       clang::ASTContext *parser_ast_context,
                       TypeFromUser *found_type = NULL,
                       TypeFromParser *parser_type = NULL);

Modified: lldb/trunk/source/Expression/ClangExpressionDeclMap.cpp
URL: http://llvm.org/viewvc/llvm-project/lldb/trunk/source/Expression/ClangExpressionDeclMap.cpp?rev=141839&r1=141838&r2=141839&view=diff
==============================================================================
--- lldb/trunk/source/Expression/ClangExpressionDeclMap.cpp (original)
+++ lldb/trunk/source/Expression/ClangExpressionDeclMap.cpp Wed Oct 12 19:09:20 2011
@@ -938,45 +938,10 @@
 
     if (expr_var_sp)
     {
-        if (!expr_var_sp->m_parser_vars.get())
+        if (!expr_var_sp->m_parser_vars.get() || !expr_var_sp->m_parser_vars->m_lldb_var)
             return Value();
         
-        const ConstString &name(expr_var_sp->GetName());
-        TypeFromUser type(expr_var_sp->GetTypeFromUser());
-        
-        StackFrame *frame = m_parser_vars->m_exe_ctx->GetFramePtr();
-        if (frame)
-        {
-            VariableSP var(FindVariableInScope (*frame, name, &type));
-            
-            if (var)
-                return *GetVariableValue(exe_ctx, var, NULL);
-        }
-
-        Target *target = m_parser_vars->m_exe_ctx->GetTargetPtr();
-
-        if (target)
-        {
-            lldb::ModuleSP module;
-            
-            VariableSP global(FindGlobalVariable (*target, module, name, NULL, &type));
-            
-            if (global)
-                return *GetVariableValue(exe_ctx, global, NULL);
-            
-            lldb::addr_t location_load_addr = GetSymbolAddress(*target, name);
-            
-            if (location_load_addr != LLDB_INVALID_ADDRESS)
-            {
-                lldb_private::Value ret;
-                ret.SetValueType(Value::eValueTypeLoadAddress);
-                ret.SetContext(Value::eContextTypeInvalid, NULL);
-                ret.GetScalar() = location_load_addr;
-                return ret;
-            }
-        }
-        
-        return Value();
+        return *GetVariableValue(exe_ctx, expr_var_sp->m_parser_vars->m_lldb_var, NULL);
     }
     else if (persistent_var_sp)
     {
@@ -1637,14 +1602,11 @@
     const ConstString &name(expr_var->GetName());
     TypeFromUser type(expr_var->GetTypeFromUser());
     
-    VariableSP var = FindVariableInScope (*frame, name, &type);
-    
-    ModuleSP module;
-    
-    Symbol *sym = FindGlobalDataSymbol(*target, module, name, NULL);
+    VariableSP &var(expr_var->m_parser_vars->m_lldb_var);
+    lldb_private::Symbol *sym(expr_var->m_parser_vars->m_lldb_sym);
     
     std::auto_ptr<lldb_private::Value> location_value;
-    
+
     if (var)
     {
         location_value.reset(GetVariableValue(exe_ctx,
@@ -1652,9 +1614,7 @@
                                               NULL));
     }
     else if (sym)
-    {        
-        location_value.reset(new Value);
-        
+    {
         addr_t location_load_addr = GetSymbolAddress(*target, name);
         
         if (location_load_addr == LLDB_INVALID_ADDRESS)
@@ -1664,6 +1624,8 @@
                                               name.GetCString());
         }
         
+        location_value.reset(new Value);
+        
         location_value->SetValueType(Value::eValueTypeLoadAddress);
         location_value->GetScalar() = location_load_addr;
     }
@@ -2044,7 +2006,6 @@
 )
 {
     VariableList vars;
-    ValueObjectList valobjs;
     
     if (module && namespace_decl)
         module->FindGlobalVariables (name, namespace_decl, true, -1, vars);
@@ -2644,7 +2605,7 @@
 ClangExpressionDeclMap::GetVariableValue
 (
     ExecutionContext &exe_ctx,
-    VariableSP var,
+    VariableSP &var,
     ASTContext *parser_ast_context,
     TypeFromUser *user_type,
     TypeFromParser *parser_type





More information about the lldb-commits mailing list