| # 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. | |
| [$default byte_order: "LittleEndian"] | |
| [(cpp) namespace: "emboss::test"] | |
| struct BasicConditional: | |
| 0 [+1] UInt x | |
| if x == 0: | |
| 1 [+1] UInt xc | |
| struct NegativeConditional: | |
| 0 [+1] UInt x | |
| if x != 0: | |
| 1 [+1] UInt xc | |
| struct ConditionalAndUnconditionalOverlappingFinalField: | |
| 0 [+1] UInt x | |
| if x == 0: | |
| 1 [+1] UInt xc | |
| 1 [+1] UInt z | |
| struct ConditionalBasicConditionalFieldFirst: | |
| if x == 0: | |
| 0 [+1] UInt xc | |
| 1 [+1] UInt x | |
| struct ConditionalAndDynamicLocation: | |
| 0 [+1] UInt x | |
| 2 [+1] UInt y | |
| if x == 0: | |
| y [+1] UInt xc | |
| struct ConditionUsesMinInt: | |
| 0 [+1] Int x | |
| if x - 0x7fff_ffff_ffff_ff80 == -0x8000_0000_0000_0000: | |
| 1 [+1] UInt xc | |
| struct NestedConditional: | |
| 0 [+1] UInt x | |
| if x == 0: | |
| 1 [+1] UInt xc | |
| if xc == 0: | |
| 2 [+1] UInt xcc | |
| struct CorrectNestedConditional: | |
| 0 [+1] UInt x | |
| if x == 0: | |
| 1 [+1] UInt xc | |
| if x == 0 && xc == 0: | |
| 2 [+1] UInt xcc | |
| struct AlwaysFalseCondition: | |
| 0 [+1] UInt x | |
| if false: | |
| 1 [+1] UInt xc | |
| struct OnlyAlwaysFalseCondition: | |
| if false: | |
| 0 [+1] UInt xc | |
| struct EmptyStruct: | |
| -- Empty structure. | |
| struct AlwaysFalseConditionDynamicSize: | |
| 0 [+1] UInt x | |
| x [+1] UInt y | |
| if false: | |
| 1 [+1] UInt xc | |
| struct ConditionDoesNotContributeToSize: | |
| 0 [+1] UInt x | |
| if x == 0: | |
| 1 [+1] UInt xc | |
| 2 [+1] UInt y | |
| enum OnOff: | |
| OFF = 0 | |
| ON = 1 | |
| struct EnumCondition: | |
| 0 [+1] OnOff x | |
| if x == OnOff.ON: | |
| 1 [+1] UInt xc | |
| if x > OnOff.OFF: | |
| 1 [+1] UInt xc2 | |
| struct NegativeEnumCondition: | |
| 0 [+1] OnOff x | |
| if x != OnOff.ON: | |
| 1 [+1] UInt xc | |
| struct LessThanCondition: | |
| 0 [+1] UInt x | |
| if x < 5: | |
| 1 [+1] UInt xc | |
| struct LessThanOrEqualCondition: | |
| 0 [+1] UInt x | |
| if x <= 5: | |
| 1 [+1] UInt xc | |
| struct GreaterThanOrEqualCondition: | |
| 0 [+1] UInt x | |
| if x >= 5: | |
| 1 [+1] UInt xc | |
| struct GreaterThanCondition: | |
| 0 [+1] UInt x | |
| if x > 5: | |
| 1 [+1] UInt xc | |
| struct RangeCondition: | |
| 0 [+1] UInt x | |
| 1 [+1] UInt y | |
| if 5 < x <= y < 10: | |
| 2 [+1] UInt xc | |
| struct ReverseRangeCondition: | |
| 0 [+1] UInt x | |
| 1 [+1] UInt y | |
| if 10 > y >= x > 5: | |
| 2 [+1] UInt xc | |
| struct AndCondition: | |
| 0 [+1] UInt x | |
| 1 [+1] UInt y | |
| if x == 5 && y == 5: | |
| 2 [+1] UInt xc | |
| struct OrCondition: | |
| 0 [+1] UInt x | |
| 1 [+1] UInt y | |
| if x == 5 || y == 5: | |
| 2 [+1] UInt xc | |
| struct ChoiceCondition: | |
| 0 [+1] enum field: | |
| USE_X = 1 | |
| USE_Y = 2 | |
| 1 [+1] UInt x | |
| 2 [+1] UInt y | |
| if (field == Field.USE_X ? x : y) == 5: | |
| 3 [+1] UInt xyc | |
| struct ContainsBits: | |
| 0 [+1] bits: | |
| 7 [+1] UInt has_top | |
| 0 [+1] UInt has_bottom | |
| struct ContainsContainsBits: | |
| 0 [+1] ContainsBits condition | |
| # TODO(bolms): allow Flags to be used as booleans in conditions. | |
| if condition.has_top == 1: | |
| 1 [+1] UInt top | |
| struct ConditionalInline: | |
| 0 [+1] UInt payload_id | |
| if payload_id == 0: | |
| 1 [+3] struct type_0: | |
| 0 [+1] UInt a | |
| 1 [+1] UInt b | |
| 2 [+1] UInt c | |
| if payload_id == 1: | |
| 1 [+3] struct type_1: | |
| 0 [+1] UInt a | |
| 1 [+1] UInt b | |
| 2 [+1] UInt c | |
| struct ConditionalAnonymous: | |
| 0 [+1] UInt x | |
| if x > 10: | |
| 1 [+1] bits: | |
| 0 [+1] UInt low | |
| if low == 1: | |
| 3 [+2] UInt mid | |
| 7 [+1] UInt high | |
| struct ConditionalOnFlag: | |
| 0 [+1] bits: | |
| 0 [+1] Flag enabled | |
| if enabled: | |
| 1 [+1] UInt value |