1""" 2Test that the expression evaluator can access members of nested classes even if 3the parents of the nested classes were imported from another compilation unit. 4""" 5import lldb 6from lldbsuite.test.decorators import * 7from lldbsuite.test.lldbtest import * 8from lldbsuite.test import lldbutil 9 10 11class TestNestedClassWithParentInAnotherCU(TestBase): 12 mydir = TestBase.compute_mydir(__file__) 13 14 def test_nested_class_with_parent_in_another_cu(self): 15 self.main_source_file = lldb.SBFileSpec("main.cpp") 16 self.build() 17 (_, _, thread, _) = lldbutil.run_to_source_breakpoint(self, "// break here", self.main_source_file) 18 frame = thread.GetSelectedFrame() 19 # Parse the DIEs of the parent classes and the nested classes from 20 # other.cpp's CU. 21 warmup_result = frame.EvaluateExpression("b") 22 self.assertTrue(warmup_result.IsValid()) 23 # Inspect fields of the nested classes. This will reuse the types that 24 # were parsed during the evaluation above. By accessing a chain of 25 # fields, we try to verify that all the DIEs, reused types and 26 # declaration contexts were wired properly into lldb's parser's state. 27 expr_result = frame.EvaluateExpression("a.y.oY_inner.oX_inner") 28 self.assertTrue(expr_result.IsValid()) 29 self.assertEqual(expr_result.GetValue(), "42") 30