1/*
2 * Access to elements of combined objects
3 *
4 *   Device
5 *   Power Resource
6 *   Processor
7 *   Thermal Zone
8 *   Method (access to internal objects of method,
9 *           in case that access is generated not from
10 *           inside that method looks incorrect)
11 *
12 * All available ways to access internal
13 * elements of combined objects are these:
14 *
15 * - by name (2-4 below):
16 *
17 *   1) ABCD      - through the all tree  (search rules apply)
18 *   2) ^...^ABCD - N parents up          (search rules do not apply)
19 *   3) XYZ.ABCD  - in current scope only (search rules do not apply)
20 *   4) \XYZ.ABCD - absolute path         (search rules do not apply)
21 *    - pass to Local, Arg, immediately to expressions, etc..
22 *
23 * - by RefOf/DerefOf:
24 *
25 *     RefOf(d000.i000)
26 *
27 *  ???????????????????????????????????????????
28 *
29 * - by Index/DerefOf:
30 *
31 *     Index(d000.p000)
32 *
33 *  ???????????????????????????????????????????
34 *
35 * - by Fields:
36 *
37 *     Field
38 *     Index Field
39 *     Bank Field
40 *     Buffer Field
41 *
42 *    Creating fields features:
43 *    - on the same level
44 *    - inside deeper level (inside call to another level method)
45 *    - parent object is on global/local level
46 *    - parent object is inside some compound type object
47 *    Usage fields features:
48 *    - pass by Arg to method
49 *    - Store/Copy intermediately to Local
50 *    - Store/Copy intermediately to Arg (affectively local)
51 *    - Store/Copy intermediately to Named
52 *    - Store/Copy intermediately to Named of compound object
53 *    - pass immediately to expressions
54 *      Note: don't check there the Implicit Conversion Rules
55 *
56 * - Method invocations:
57 *
58 *    - pass to methods (7,6,...) objects of different type
59 *    - in other checkings pass to method not only the object
60 *      immediately participating in checking but also other
61 *      objects including:
62 *      - parent object of element of package,
63 *      - parent object of element of Field,
64 *      - parent object of IRef Reference,
65 *      - parent object of ORef Reference,
66 *      - original compound object of all other type objects above,
67 *      - pass the same object (see above too) to method by several parameters,
68 *      - etc.
69 *
70 * There is no way to specify by ASL code accessing
71 * elements of combined object in case that combined
72 * object is represented by:
73 *
74 * - ArgX
75 * - LocalX
76 * - another Named object where the combined
77 *   object has been copied by CopyObject (see Note below)
78 *
79 *   Note: if the target object where the combined object is
80 *         copied contains some same name object as source object
81 *         then we can expect that after CopyObject operation that
82 *         object will contain new value the same as in source object
83 *         (exotic case of CopyObject usage).
84 *         I will not verify this case, at least now.
85 *
86 * So, there is no much sense to verify behaviour of:
87 *
88 * - RefOf to combined object
89 * - combined object passed by Arg to method
90 * - combined object Stored/CopyObject to LocalX
91 * - combined object Stored/CopyObject to ArgX (effective local)
92 * - combined object Stored/CopyObject to NamedX
93 * - combined object as element of Package
94 *
95 * Exotic (could be done ever):
96 *   All the possible checkings can be implemented (ASL coded)
97 *   to check the behaviour of the object substituted by the
98 *   CopyObject instead of the original one.
99 *   At that the substituted object can be 1) of the same type
100 *   and have a) all the elements the original has and b) not
101 *   all of them are present in the copy and 2) be object of
102 *   some another type than original.
103 */
104