| # 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 |