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 10import lldb 11from lldbsuite.test.decorators import * 12from lldbsuite.test.lldbtest import * 13from lldbsuite.test import lldbutil 14 15 16class ExprCommandCallUserDefinedFunction(TestBase): 17 def test(self): 18 """Test return values of user defined function calls.""" 19 self.build() 20 lldbutil.run_to_source_breakpoint( 21 self, "// break here", lldb.SBFileSpec("main.cpp") 22 ) 23 24 # Test recursive function call. 25 self.expect_expr("fib(5)", result_type="unsigned int", result_value="5") 26 27 # Test function with more than one parameter 28 self.expect_expr("add(4, 8)", result_type="int", result_value="12") 29 30 # Test nesting function calls in function parameters 31 self.expect_expr("add(add(5,2),add(3,4))", result_type="int", result_value="14") 32 self.expect_expr("add(add(5,2),fib(5))", result_type="int", result_value="12") 33 34 # Test function with pointer parameter 35 self.expect_expr( 36 'stringCompare((const char*) "Hello world")', 37 result_type="bool", 38 result_value="true", 39 ) 40 self.expect_expr( 41 'stringCompare((const char*) "Hellworld")', 42 result_type="bool", 43 result_value="false", 44 ) 45