| // Copyright 2019 The Fuchsia Authors. All rights reserved. | |
| // Use of this source code is governed by a BSD-style license that can be | |
| // found in the LICENSE file. | |
| #ifndef SRC_DEVELOPER_DEBUG_ZXDB_EXPR_EVAL_TEST_SUPPORT_H_ | |
| #define SRC_DEVELOPER_DEBUG_ZXDB_EXPR_EVAL_TEST_SUPPORT_H_ | |
| #include "src/developer/debug/zxdb/expr/expr_value.h" | |
| #include "src/developer/debug/zxdb/symbols/collection.h" | |
| #include "src/developer/debug/zxdb/symbols/modified_type.h" | |
| namespace zxdb { | |
| // Several casting tests test base/derived class conversions. This structure contains the elaborate | |
| // setup for these related cases. It declares: | |
| // | |
| // struct Base1 { | |
| // int16_t b = kB1Value; | |
| // }; | |
| // | |
| // struct Base2 { | |
| // int32_t b = kB2Value; | |
| // }; | |
| // | |
| // struct Derived : public Base1, public Base2 { | |
| // int32_t d = kDValue; | |
| // }; | |
| // | |
| // Derived derived_value; | |
| // | |
| // Derived* derived_ptr_value = &derived_value; | |
| // Base1* base1_ptr_value = &derived_value; | |
| // Base2* base2_ptr_value = &derived_value; | |
| struct DerivedClassTestSetup { | |
| DerivedClassTestSetup(); | |
| fxl::RefPtr<Collection> base1_type; | |
| fxl::RefPtr<Collection> base2_type; | |
| fxl::RefPtr<Collection> derived_type; | |
| fxl::RefPtr<ModifiedType> base1_ptr_type; // Base1* | |
| fxl::RefPtr<ModifiedType> base2_ptr_type; // Base2* | |
| fxl::RefPtr<ModifiedType> derived_ptr_type; // Derived* | |
| fxl::RefPtr<ModifiedType> base1_ref_type; // Base1& | |
| fxl::RefPtr<ModifiedType> base2_ref_type; // Base2& | |
| fxl::RefPtr<ModifiedType> derived_ref_type; // Derived& | |
| ExprValue base1_value; // References inside of derived. | |
| ExprValue base2_value; // References inside of derived. | |
| ExprValue derived_value; | |
| ExprValue base1_ptr_value; // Base1* base1_ptr_value = &base1_value; | |
| ExprValue base2_ptr_value; // Base2* base2_ptr_value = &base2_value; | |
| ExprValue derived_ptr_value; // Derived* derived_ptr_value = &derived_value; | |
| ExprValue base1_ref_value; // Base1& base1_ref_value = base1_value; | |
| ExprValue base2_ref_value; // Base1& base2_ref_value = base2_value; | |
| ExprValue derived_ref_value; // Derived& derived_ref_value = derived_value; | |
| uint64_t kBase1Offset = 0; // Offset of Base1 in Derived. | |
| uint64_t kBase2Offset = 2; // Offset of Base2 in Derived. | |
| uint64_t kDerivedAddr = 0x3000; // &derived_value | |
| uint64_t kBase1Addr = kDerivedAddr + kBase1Offset; // &base1_value | |
| uint64_t kBase2Addr = kDerivedAddr + kBase2Offset; // &base2_value | |
| }; | |
| } // namespace zxdb | |
| #endif // SRC_DEVELOPER_DEBUG_ZXDB_EXPR_EVAL_TEST_SUPPORT_H_ |