chaoren created this revision.
chaoren added a reviewer: clayborg.
chaoren added a subscriber: lldb-commits.

http://reviews.llvm.org/D11533

Files:
  include/lldb/API/SBValue.h
  include/lldb/Core/ValueObject.h
  scripts/interface/SBValue.i
  source/API/SBValue.cpp
  source/Core/ValueObject.cpp
  test/python_api/value/Makefile
  test/python_api/value/TestValueAPI.py
  test/python_api/value/main.c
  test/python_api/value/main.cpp

Index: test/python_api/value/main.cpp
===================================================================
--- test/python_api/value/main.cpp
+++ test/python_api/value/main.cpp
@@ -43,10 +43,12 @@
     struct MyStruct s = { 11, 22 };
     int *my_int_ptr = &g_my_int;
     printf("my_int_ptr points to location %p\n", my_int_ptr);
+    int &my_int_ref = g_my_int;
+    printf("my_int_ref refers to location %p\n", &my_int_ref);
     const char **str_ptr = days_of_week;
     for (i = 0; i < 7; ++i)
         printf("%s\n", str_ptr[i]); // Break at this line
                                     // and do str_ptr_val.GetChildAtIndex(5, lldb.eNoDynamicValues, True).
-    
+
     return 0;
 }
Index: test/python_api/value/TestValueAPI.py
===================================================================
--- test/python_api/value/TestValueAPI.py
+++ test/python_api/value/TestValueAPI.py
@@ -36,8 +36,7 @@
         TestBase.setUp(self)
         # We'll use the test method name as the exe_name.
         self.exe_name = self.testMethodName
-        # Find the line number to of function 'c'.
-        self.line = line_number('main.c', '// Break at this line')
+        self.line = line_number('main.cpp', '// Break at this line')
 
     def value_api(self, exe_name):
         """Exercise some SBValue APIs."""
@@ -48,7 +47,7 @@
         self.assertTrue(target, VALID_TARGET)
 
         # Create the breakpoint inside function 'main'.
-        breakpoint = target.BreakpointCreateByLocation('main.c', self.line)
+        breakpoint = target.BreakpointCreateByLocation('main.cpp', self.line)
         self.assertTrue(breakpoint, VALID_BREAKPOINT)
 
         # Now launch the process, and do not stop at entry point.
@@ -107,6 +106,17 @@
         self.expect(symbol.GetName(), exe=False,
             startstr = 'g_my_int')
 
+        # Get variable 'my_int_ref'.
+        value = frame0.FindVariable('my_int_ref')
+        self.assertTrue(value, VALID_VARIABLE)
+        self.DebugSBValue(value)
+
+        # SBValue::TypeIsPointerType() should return false.
+        self.assertFalse(value.TypeIsPointerType())
+
+        # SBValue::TypeIsReferenceType() should return true.
+        self.assertTrue(value.TypeIsReferenceType())
+
         # Get variable 'str_ptr'.
         value = frame0.FindVariable('str_ptr')
         self.assertTrue(value, VALID_VARIABLE)
Index: test/python_api/value/Makefile
===================================================================
--- test/python_api/value/Makefile
+++ test/python_api/value/Makefile
@@ -1,5 +1,5 @@
 LEVEL = ../../make
 
-C_SOURCES := main.c
+CXX_SOURCES := main.cpp
 
 include $(LEVEL)/Makefile.rules
Index: source/Core/ValueObject.cpp
===================================================================
--- source/Core/ValueObject.cpp
+++ source/Core/ValueObject.cpp
@@ -2035,6 +2035,12 @@
 }
 
 bool
+ValueObject::IsReferenceType()
+{
+    return GetClangType().IsReferenceType();
+}
+
+bool
 ValueObject::IsArrayType ()
 {
     return GetClangType().IsArrayType (NULL, NULL, NULL);
Index: source/API/SBValue.cpp
===================================================================
--- source/API/SBValue.cpp
+++ source/API/SBValue.cpp
@@ -1324,6 +1324,24 @@
     return is_ptr_type;
 }
 
+bool
+SBValue::TypeIsReferenceType()
+{
+    bool is_ref_type = false;
+
+    ValueLocker locker;
+    lldb::ValueObjectSP value_sp(GetSP(locker));
+    if (value_sp)
+        is_ref_type = value_sp->IsReferenceType();
+
+    Log *log(lldb_private::GetLogIfAllCategoriesSet(LIBLLDB_LOG_API));
+    if (log)
+        log->Printf("SBValue(%p)::TypeIsReferenceType() => %i",
+                    static_cast<void*>(value_sp.get()), is_ref_type);
+
+    return is_ref_type;
+}
+
 void *
 SBValue::GetOpaqueType()
 {
Index: scripts/interface/SBValue.i
===================================================================
--- scripts/interface/SBValue.i
+++ scripts/interface/SBValue.i
@@ -332,7 +332,10 @@
     
     bool
     TypeIsPointerType ();
-    
+
+    bool
+    TypeIsReferenceType();
+
     lldb::SBTarget
     GetTarget();
 
Index: include/lldb/Core/ValueObject.h
===================================================================
--- include/lldb/Core/ValueObject.h
+++ include/lldb/Core/ValueObject.h
@@ -412,7 +412,10 @@
 
     virtual bool
     IsPointerType ();
-    
+
+    virtual bool
+    IsReferenceType();
+
     virtual bool
     IsArrayType ();
     
Index: include/lldb/API/SBValue.h
===================================================================
--- include/lldb/API/SBValue.h
+++ include/lldb/API/SBValue.h
@@ -352,7 +352,10 @@
 
     bool
     TypeIsPointerType ();
-    
+
+    bool
+    TypeIsReferenceType();
+
     lldb::SBType
     GetType();
     
_______________________________________________
lldb-commits mailing list
lldb-commits@cs.uiuc.edu
http://lists.cs.uiuc.edu/mailman/listinfo/lldb-commits

Reply via email to