""" Test calling user defined functions using expression evaluation. Note: LLDBs current first choice of evaluating functions is using the IR interpreter, which is only supported on Hexagon. Otherwise JIT is used for the evaluation. """ from __future__ import print_function import lldb from lldbsuite.test.decorators import * from lldbsuite.test.lldbtest import * from lldbsuite.test import lldbutil class ExprCommandCallUserDefinedFunction(TestBase): mydir = TestBase.compute_mydir(__file__) def setUp(self): # Call super's setUp(). TestBase.setUp(self) # Find the line number to break for main.c. self.line = line_number( 'main.cpp', '// Please test these expressions while stopped at this line:') def test(self): """Test return values of user defined function calls.""" self.build() # Set breakpoint in main and run exe self.runCmd("file " + self.getBuildArtifact("a.out"), CURRENT_EXECUTABLE_SET) lldbutil.run_break_set_by_file_and_line( self, "main.cpp", self.line, num_expected_locations=-1, loc_exact=True) self.runCmd("run", RUN_SUCCEEDED) # Test recursive function call. self.expect("expr fib(5)", substrs=['$0 = 5']) # Test function with more than one paramter self.expect("expr add(4,8)", substrs=['$1 = 12']) # Test nesting function calls in function paramters self.expect("expr add(add(5,2),add(3,4))", substrs=['$2 = 14']) self.expect("expr add(add(5,2),fib(5))", substrs=['$3 = 12']) # Test function with pointer paramter self.expect( "exp stringCompare((const char*) \"Hello world\")", substrs=['$4 = true']) self.expect( "exp stringCompare((const char*) \"Hellworld\")", substrs=['$5 = false'])