diff options
| author | Dimitry Andric <dim@FreeBSD.org> | 2016-01-06 20:12:03 +0000 | 
|---|---|---|
| committer | Dimitry Andric <dim@FreeBSD.org> | 2016-01-06 20:12:03 +0000 | 
| commit | 9e6d35490a6542f9c97607f93c2ef8ca8e03cbcc (patch) | |
| tree | dd2a1ddf0476664c2b823409c36cbccd52662ca7 /packages/Python/lldbsuite/test/lang/cpp/namespace/main.cpp | |
| parent | 3bd2e91faeb9eeec1aae82c64a3253afff551cfd (diff) | |
Notes
Diffstat (limited to 'packages/Python/lldbsuite/test/lang/cpp/namespace/main.cpp')
| -rw-r--r-- | packages/Python/lldbsuite/test/lang/cpp/namespace/main.cpp | 124 | 
1 files changed, 124 insertions, 0 deletions
diff --git a/packages/Python/lldbsuite/test/lang/cpp/namespace/main.cpp b/packages/Python/lldbsuite/test/lang/cpp/namespace/main.cpp new file mode 100644 index 000000000000..560ec40f4733 --- /dev/null +++ b/packages/Python/lldbsuite/test/lang/cpp/namespace/main.cpp @@ -0,0 +1,124 @@ +//===-- main.cpp ------------------------------------------------*- C++ -*-===// +// +//                     The LLVM Compiler Infrastructure +// +// This file is distributed under the University of Illinois Open Source +// License. See LICENSE.TXT for details. +// +//===----------------------------------------------------------------------===// + +#include <cstdarg> +#include "ns.h" + +namespace { +    typedef unsigned int my_uint_t; +    int i; // Find the line number for anonymous namespace variable i. + +    int myanonfunc (int a) +    { +        return a + a; +    } + +    int +    variadic_sum (int arg_count...) +    { +        int sum = 0; +        va_list args; +        va_start(args, arg_count); + +        for (int i = 0; i < arg_count; i++) +            sum += va_arg(args, int); + +        va_end(args); +        return sum; +    } +} + +namespace A { +    typedef unsigned int uint_t; +    namespace B { +        typedef unsigned int uint_t; +        int j; // Find the line number for named namespace variable j. +        int myfunc (int a); +        int myfunc2(int a) +        { +             return a + 2; +        } +        float myfunc (float f) +        { +            return f - 2.0; +        } +    } +} + +namespace Y +{ +    typedef unsigned int uint_t; +    using A::B::j; +    int foo; +} + +using A::B::j;          // using declaration + +namespace Foo = A::B;   // namespace alias + +using Foo::myfunc;      // using declaration + +using namespace Foo;    // using directive + +namespace A { +    namespace B { +        using namespace Y; +        int k; +    } +} + +namespace ns1 { +    int value = 100; +} + +namespace ns2 { +    int value = 200; +} + +void test_namespace_scopes() { +    do { +        using namespace ns1; +        printf("ns1::value = %d\n", value); // Evaluate ns1::value +    } while(0); +     +    do { +        using namespace ns2; +        printf("ns2::value = %d\n", value); // Evaluate ns2::value +    } while(0); +} + +int Foo::myfunc(int a) +{ +    test_namespace_scopes();     + +    ::my_uint_t anon_uint = 0; +    A::uint_t a_uint = 1; +    B::uint_t b_uint = 2; +    Y::uint_t y_uint = 3; +    i = 3; +    j = 4; +    printf("::i=%d\n", ::i); +    printf("A::B::j=%d\n", A::B::j); +    printf("variadic_sum=%d\n", variadic_sum(3, 1, 2, 3)); +    myanonfunc(3); +    return myfunc2(3) + j + i + a + 2 + anon_uint + a_uint + b_uint + y_uint; // Set break point at this line. +} + +int +main (int argc, char const *argv[]) +{ +    test_lookup_at_global_scope(); +    test_lookup_at_file_scope(); +    A::test_lookup_at_ns_scope(); +    A::B::test_lookup_at_nested_ns_scope(); +    A::B::test_lookup_at_nested_ns_scope_after_using(); +    test_lookup_before_using_directive(); +    test_lookup_after_using_directive(); +    return Foo::myfunc(12); +}  | 
