1*99451b44SJordan Rupprecht #include "ns.h"
2*99451b44SJordan Rupprecht
func()3*99451b44SJordan Rupprecht static int func()
4*99451b44SJordan Rupprecht {
5*99451b44SJordan Rupprecht std::printf("static m2.cpp func()\n");
6*99451b44SJordan Rupprecht return 2;
7*99451b44SJordan Rupprecht }
test_lookup_at_file_scope()8*99451b44SJordan Rupprecht void test_lookup_at_file_scope()
9*99451b44SJordan Rupprecht {
10*99451b44SJordan Rupprecht // BP_file_scope
11*99451b44SJordan Rupprecht std::printf("at file scope: func() = %d\n", func()); // eval func(), exp: 2
12*99451b44SJordan Rupprecht std::printf("at file scope: func(10) = %d\n", func(10)); // eval func(10), exp: 11
13*99451b44SJordan Rupprecht }
14*99451b44SJordan Rupprecht namespace A {
15*99451b44SJordan Rupprecht namespace B {
func()16*99451b44SJordan Rupprecht int func()
17*99451b44SJordan Rupprecht {
18*99451b44SJordan Rupprecht std::printf("A::B::func()\n");
19*99451b44SJordan Rupprecht return 4;
20*99451b44SJordan Rupprecht }
test_lookup_at_nested_ns_scope()21*99451b44SJordan Rupprecht void test_lookup_at_nested_ns_scope()
22*99451b44SJordan Rupprecht {
23*99451b44SJordan Rupprecht // BP_nested_ns_scope
24*99451b44SJordan Rupprecht std::printf("at nested ns scope: func() = %d\n", func()); // eval func(), exp: 4
25*99451b44SJordan Rupprecht
26*99451b44SJordan Rupprecht //printf("func(10) = %d\n", func(10)); // eval func(10), exp: 13
27*99451b44SJordan Rupprecht // NOTE: Under the rules of C++, this test would normally get an error
28*99451b44SJordan Rupprecht // because A::B::func() hides A::func(), but lldb intentionally
29*99451b44SJordan Rupprecht // disobeys these rules so that the intended overload can be found
30*99451b44SJordan Rupprecht // by only removing duplicates if they have the same type.
31*99451b44SJordan Rupprecht }
test_lookup_at_nested_ns_scope_after_using()32*99451b44SJordan Rupprecht void test_lookup_at_nested_ns_scope_after_using()
33*99451b44SJordan Rupprecht {
34*99451b44SJordan Rupprecht // BP_nested_ns_scope_after_using
35*99451b44SJordan Rupprecht using A::func;
36*99451b44SJordan Rupprecht std::printf("at nested ns scope after using: func() = %d\n", func()); // eval func(), exp: 3
37*99451b44SJordan Rupprecht }
38*99451b44SJordan Rupprecht }
39*99451b44SJordan Rupprecht }
foo()40*99451b44SJordan Rupprecht int A::foo()
41*99451b44SJordan Rupprecht {
42*99451b44SJordan Rupprecht std::printf("A::foo()\n");
43*99451b44SJordan Rupprecht return 42;
44*99451b44SJordan Rupprecht }
func(int a)45*99451b44SJordan Rupprecht int A::func(int a)
46*99451b44SJordan Rupprecht {
47*99451b44SJordan Rupprecht std::printf("A::func(int)\n");
48*99451b44SJordan Rupprecht return a + 3;
49*99451b44SJordan Rupprecht }
test_lookup_at_ns_scope()50*99451b44SJordan Rupprecht void A::test_lookup_at_ns_scope()
51*99451b44SJordan Rupprecht {
52*99451b44SJordan Rupprecht // BP_ns_scope
53*99451b44SJordan Rupprecht std::printf("at nested ns scope: func() = %d\n", func()); // eval func(), exp: 3
54*99451b44SJordan Rupprecht std::printf("at nested ns scope: func(10) = %d\n", func(10)); // eval func(10), exp: 13
55*99451b44SJordan Rupprecht std::printf("at nested ns scope: foo() = %d\n", foo()); // eval foo(), exp: 42
56*99451b44SJordan Rupprecht }
57