1""" 2Test calling user defined functions using expression evaluation. 3 4Note: 5 LLDBs current first choice of evaluating functions is using the IR interpreter, 6 which is only supported on Hexagon. Otherwise JIT is used for the evaluation. 7 8""" 9 10 11 12import lldb 13from lldbsuite.test.decorators import * 14from lldbsuite.test.lldbtest import * 15from lldbsuite.test import lldbutil 16 17 18class ExprCommandCallUserDefinedFunction(TestBase): 19 20 mydir = TestBase.compute_mydir(__file__) 21 22 def setUp(self): 23 # Call super's setUp(). 24 TestBase.setUp(self) 25 # Find the line number to break for main.c. 26 self.line = line_number( 27 'main.cpp', 28 '// Please test these expressions while stopped at this line:') 29 30 def test(self): 31 """Test return values of user defined function calls.""" 32 self.build() 33 34 # Set breakpoint in main and run exe 35 self.runCmd("file " + self.getBuildArtifact("a.out"), CURRENT_EXECUTABLE_SET) 36 lldbutil.run_break_set_by_file_and_line( 37 self, "main.cpp", self.line, num_expected_locations=-1, loc_exact=True) 38 39 self.runCmd("run", RUN_SUCCEEDED) 40 41 # Test recursive function call. 42 self.expect_expr("fib(5)", result_type="unsigned int", result_value="5") 43 44 # Test function with more than one paramter 45 self.expect_expr("add(4, 8)", result_type="int", result_value="12") 46 47 # Test nesting function calls in function paramters 48 self.expect_expr("add(add(5,2),add(3,4))", result_type="int", result_value="14") 49 self.expect_expr("add(add(5,2),fib(5))", result_type="int", result_value="12") 50 51 # Test function with pointer paramter 52 self.expect_expr('stringCompare((const char*) \"Hello world\")', result_type="bool", result_value="true") 53 self.expect_expr('stringCompare((const char*) \"Hellworld\")', result_type="bool", result_value="false") 54