blob: 7bcafc1de016340f8ba9205400e5fbe6d8d18c6c [file] [log] [blame]
# Copyright 2019 Google LLC
#
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
# You may obtain a copy of the License at
#
# https://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS,
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
# See the License for the specific language governing permissions and
# limitations under the License.
-- Test cases for types containing types.
[$default byte_order: "LittleEndian"]
[(cpp) namespace: "emboss::test"]
struct Out:
struct In:
struct InIn:
enum InInIn:
NO = 0
YES = 1
let outer_offset = 24
0 [+1] InInIn field_enum
# In2 should be Out.In2, despite In2 appearing in an enclosing scope and
# later in the source file.
1 [+1] In2 in_2
0 [+2] InIn in_in_1
2 [+2] InIn in_in_2
4 [+1] InIn.InInIn in_in_in_1
5 [+1] In2 in_2
6 [+1] UInt name_collision
# name_collision should resolve to Out.In.name_collision, not
# Out.name_collision, and there should be no error about ambiguous
# resolution. (Note that since field references are actually used at
# runtime, and there isn't necessarily any enclosing Out object for an
# Out.In at runtime, it does not make sense for a field name to resolve to
# a field in an outer struct.)
# TODO(bolms): Add a warning for this case, since it is somewhat subtle.
name_collision [+1] UInt name_collision_check
struct In2:
0 [+1] UInt field_byte
0 [+8] In in_1
8 [+8] In in_2
16 [+2] In.InIn in_in_1
18 [+2] In.InIn in_in_2
20 [+1] In.InIn.InInIn in_in_in_1
21 [+1] In.InIn.InInIn in_in_in_2
22 [+2] UInt name_collision
In.InIn.outer_offset [+1] UInt nested_constant_check