From deb7d9962c37b4e6ddc66dd8f1ebad899c9d3ab6 Mon Sep 17 00:00:00 2001 From: Mingun Date: Sat, 11 Dec 2021 22:31:57 +0500 Subject: [PATCH] #776: Allow `repeat-expr` and `repeat-until` keys without a `repeat` key https://github.com/kaitai-io/kaitai_struct/issues/776 --- formats/repeat_repeat-expr_only.ksy | 6 ++++++ formats/repeat_repeat-until_only.ksy | 6 ++++++ formats_err/repeat_bad_repeat-expr-and-until.ksy | 11 +++++++++++ formats_err/repeat_bad_repeat-expr.ksy | 10 ++++++++++ formats_err/repeat_bad_repeat-until.ksy | 10 ++++++++++ formats_err/repeat_eos_repeat-expr-and-until.ksy | 11 +++++++++++ formats_err/repeat_eos_repeat-expr.ksy | 10 ++++++++++ formats_err/repeat_eos_repeat-until.ksy | 10 ++++++++++ formats_err/repeat_expr.ksy | 9 +++++++++ formats_err/repeat_expr_repeat-expr-and-until.ksy | 11 +++++++++++ formats_err/repeat_expr_repeat-until.ksy | 10 ++++++++++ formats_err/repeat_incompatible1.ksy | 10 ---------- formats_err/repeat_incompatible2.ksy | 10 ---------- formats_err/repeat_incompatible3.ksy | 11 ----------- formats_err/repeat_until.ksy | 9 +++++++++ formats_err/repeat_until_repeat-expr-and-until.ksy | 11 +++++++++++ formats_err/repeat_until_repeat-expr.ksy | 10 ++++++++++ formats_err/repeat_wo_expr.ksy | 9 --------- formats_err/repeat_wo_repeat.ksy | 9 --------- formats_err/repeat_wo_until.ksy | 9 --------- 20 files changed, 134 insertions(+), 58 deletions(-) create mode 100644 formats/repeat_repeat-expr_only.ksy create mode 100644 formats/repeat_repeat-until_only.ksy create mode 100644 formats_err/repeat_bad_repeat-expr-and-until.ksy create mode 100644 formats_err/repeat_bad_repeat-expr.ksy create mode 100644 formats_err/repeat_bad_repeat-until.ksy create mode 100644 formats_err/repeat_eos_repeat-expr-and-until.ksy create mode 100644 formats_err/repeat_eos_repeat-expr.ksy create mode 100644 formats_err/repeat_eos_repeat-until.ksy create mode 100644 formats_err/repeat_expr.ksy create mode 100644 formats_err/repeat_expr_repeat-expr-and-until.ksy create mode 100644 formats_err/repeat_expr_repeat-until.ksy delete mode 100644 formats_err/repeat_incompatible1.ksy delete mode 100644 formats_err/repeat_incompatible2.ksy delete mode 100644 formats_err/repeat_incompatible3.ksy create mode 100644 formats_err/repeat_until.ksy create mode 100644 formats_err/repeat_until_repeat-expr-and-until.ksy create mode 100644 formats_err/repeat_until_repeat-expr.ksy delete mode 100644 formats_err/repeat_wo_expr.ksy delete mode 100644 formats_err/repeat_wo_repeat.ksy delete mode 100644 formats_err/repeat_wo_until.ksy diff --git a/formats/repeat_repeat-expr_only.ksy b/formats/repeat_repeat-expr_only.ksy new file mode 100644 index 000000000..c4d3183b1 --- /dev/null +++ b/formats/repeat_repeat-expr_only.ksy @@ -0,0 +1,6 @@ +meta: + id: repeat_expr_only +seq: + - id: foo + type: u1 + repeat-expr: 42 \ No newline at end of file diff --git a/formats/repeat_repeat-until_only.ksy b/formats/repeat_repeat-until_only.ksy new file mode 100644 index 000000000..265a1a0f2 --- /dev/null +++ b/formats/repeat_repeat-until_only.ksy @@ -0,0 +1,6 @@ +meta: + id: repeat_until_only +seq: + - id: foo + type: u1 + repeat-until: _ != 0 \ No newline at end of file diff --git a/formats_err/repeat_bad_repeat-expr-and-until.ksy b/formats_err/repeat_bad_repeat-expr-and-until.ksy new file mode 100644 index 000000000..e5ab835d8 --- /dev/null +++ b/formats_err/repeat_bad_repeat-expr-and-until.ksy @@ -0,0 +1,11 @@ +# repeat_bad_repeat-expr-and-until.ksy: /seq/0/repeat: +# error: expected eos / expr / until, got 'bad' +# +meta: + id: repeat_bad_repeat_expr_and_until +seq: + - id: foo + type: u1 + repeat: bad + repeat-expr: 42 + repeat-until: 'true' diff --git a/formats_err/repeat_bad_repeat-expr.ksy b/formats_err/repeat_bad_repeat-expr.ksy new file mode 100644 index 000000000..a28d7e83f --- /dev/null +++ b/formats_err/repeat_bad_repeat-expr.ksy @@ -0,0 +1,10 @@ +# repeat_bad_repeat-expr.ksy: /seq/0/repeat: +# error: expected eos / expr / until, got 'bad' +# +meta: + id: repeat_bad_repeat_expr +seq: + - id: foo + type: u1 + repeat: bad + repeat-expr: 42 diff --git a/formats_err/repeat_bad_repeat-until.ksy b/formats_err/repeat_bad_repeat-until.ksy new file mode 100644 index 000000000..6e368c8c1 --- /dev/null +++ b/formats_err/repeat_bad_repeat-until.ksy @@ -0,0 +1,10 @@ +# repeat_bad_repeat-until.ksy: /seq/0/repeat: +# error: expected eos / expr / until, got 'bad' +# +meta: + id: repeat_bad_repeat_until +seq: + - id: foo + type: u1 + repeat: bad + repeat-until: 'true' diff --git a/formats_err/repeat_eos_repeat-expr-and-until.ksy b/formats_err/repeat_eos_repeat-expr-and-until.ksy new file mode 100644 index 000000000..b48e95cc3 --- /dev/null +++ b/formats_err/repeat_eos_repeat-expr-and-until.ksy @@ -0,0 +1,11 @@ +# repeat_eos_repeat-expr-and-until.ksy: /seq/0/repeat: +# error: either `repeat: eos`, or `repeat-expr`, or `repeat-until` must be specified +# +meta: + id: repeat_eos_repeat_expr_and_until +seq: + - id: foo + type: u1 + repeat: eos + repeat-expr: 42 + repeat-until: 'true' diff --git a/formats_err/repeat_eos_repeat-expr.ksy b/formats_err/repeat_eos_repeat-expr.ksy new file mode 100644 index 000000000..e9d0f6819 --- /dev/null +++ b/formats_err/repeat_eos_repeat-expr.ksy @@ -0,0 +1,10 @@ +# repeat_eos_repeat-expr.ksy: /seq/0/repeat: +# error: `repeat-expr` requires either a `repeat: expr` or absence of a `repeat` key +# +meta: + id: repeat_eos_repeat_expr +seq: + - id: foo + type: u1 + repeat: eos + repeat-expr: 42 \ No newline at end of file diff --git a/formats_err/repeat_eos_repeat-until.ksy b/formats_err/repeat_eos_repeat-until.ksy new file mode 100644 index 000000000..ff45dca5a --- /dev/null +++ b/formats_err/repeat_eos_repeat-until.ksy @@ -0,0 +1,10 @@ +# repeat_eos_repeat-until.ksy: /seq/0/repeat: +# error: `repeat-until` requires either a `repeat: until` or absence of a `repeat` key +# +meta: + id: repeat_eos_repeat_until +seq: + - id: foo + type: u1 + repeat: eos + repeat-until: 'true' diff --git a/formats_err/repeat_expr.ksy b/formats_err/repeat_expr.ksy new file mode 100644 index 000000000..830186ec8 --- /dev/null +++ b/formats_err/repeat_expr.ksy @@ -0,0 +1,9 @@ +# repeat_expr.ksy: /seq/0/repeat: +# error: `repeat: expr` requires a `repeat-expr` key +# +meta: + id: repeat_expr +seq: + - id: foo + type: u1 + repeat: expr diff --git a/formats_err/repeat_expr_repeat-expr-and-until.ksy b/formats_err/repeat_expr_repeat-expr-and-until.ksy new file mode 100644 index 000000000..3c38f7355 --- /dev/null +++ b/formats_err/repeat_expr_repeat-expr-and-until.ksy @@ -0,0 +1,11 @@ +# repeat_expr_repeat-expr-and-until.ksy: /seq/0/repeat: +# error: either `repeat: eos`, or `repeat-expr`, or `repeat-until` must be specified +# +meta: + id: repeat_expr_repeat_expr_and_until +seq: + - id: foo + type: u1 + repeat: expr + repeat-expr: 42 + repeat-until: 'true' diff --git a/formats_err/repeat_expr_repeat-until.ksy b/formats_err/repeat_expr_repeat-until.ksy new file mode 100644 index 000000000..5099e920d --- /dev/null +++ b/formats_err/repeat_expr_repeat-until.ksy @@ -0,0 +1,10 @@ +# repeat_expr_repeat-until.ksy: /seq/0/repeat: +# error: `repeat-until` requires either a `repeat: until` or absence of a `repeat` key +# +meta: + id: repeat_expr_repeat_until +seq: + - id: foo + type: u1 + repeat: expr + repeat-until: 'true' diff --git a/formats_err/repeat_incompatible1.ksy b/formats_err/repeat_incompatible1.ksy deleted file mode 100644 index d50c87470..000000000 --- a/formats_err/repeat_incompatible1.ksy +++ /dev/null @@ -1,10 +0,0 @@ -# repeat_incompatible1.ksy: /seq/0/repeat-until: -# error: unknown key found, expected: consume, doc, doc-ref, eos-error, id, if, include, repeat, terminator, type, valid -# -meta: - id: repeat_incompatible1 -seq: - - id: foo - type: u1 - repeat: eos - repeat-until: 'true' diff --git a/formats_err/repeat_incompatible2.ksy b/formats_err/repeat_incompatible2.ksy deleted file mode 100644 index d02a3c0d2..000000000 --- a/formats_err/repeat_incompatible2.ksy +++ /dev/null @@ -1,10 +0,0 @@ -# repeat_incompatible2.ksy: /seq/0/repeat: -# error: `repeat: expr` requires a `repeat-expr` expression -# -meta: - id: repeat_incompatible2 -seq: - - id: foo - type: u1 - repeat: expr - repeat-until: 'true' diff --git a/formats_err/repeat_incompatible3.ksy b/formats_err/repeat_incompatible3.ksy deleted file mode 100644 index ee7c029f5..000000000 --- a/formats_err/repeat_incompatible3.ksy +++ /dev/null @@ -1,11 +0,0 @@ -# repeat_incompatible3.ksy: /seq/0/repeat-expr: -# error: unknown key found, expected: consume, doc, doc-ref, eos-error, id, if, include, repeat, repeat-until, terminator, type, valid -# -meta: - id: repeat_incompatible3 -seq: - - id: foo - type: u1 - repeat: until - repeat-until: 1 == 1 - repeat-expr: 42 diff --git a/formats_err/repeat_until.ksy b/formats_err/repeat_until.ksy new file mode 100644 index 000000000..af16e5a00 --- /dev/null +++ b/formats_err/repeat_until.ksy @@ -0,0 +1,9 @@ +# repeat_until.ksy: /seq/0/repeat: +# error: `repeat: until` requires a `repeat-until` key +# +meta: + id: repeat_until +seq: + - id: foo + type: u1 + repeat: until diff --git a/formats_err/repeat_until_repeat-expr-and-until.ksy b/formats_err/repeat_until_repeat-expr-and-until.ksy new file mode 100644 index 000000000..92efb14c9 --- /dev/null +++ b/formats_err/repeat_until_repeat-expr-and-until.ksy @@ -0,0 +1,11 @@ +# repeat_until_repeat-expr-and-until.ksy: /seq/0/repeat: +# error: either `repeat: eos`, or `repeat-expr`, or `repeat-until` must be specified +# +meta: + id: repeat_until_repeat_expr_and_until +seq: + - id: foo + type: u1 + repeat: until + repeat-expr: 42 + repeat-until: 'true' diff --git a/formats_err/repeat_until_repeat-expr.ksy b/formats_err/repeat_until_repeat-expr.ksy new file mode 100644 index 000000000..ca7ed30f9 --- /dev/null +++ b/formats_err/repeat_until_repeat-expr.ksy @@ -0,0 +1,10 @@ +# repeat_until_repeat-expr.ksy: /seq/0/repeat: +# error: `repeat-expr` requires either a `repeat: expr` or absence of a `repeat` key +# +meta: + id: repeat_until_repeat_expr +seq: + - id: foo + type: u1 + repeat: until + repeat-expr: 42 diff --git a/formats_err/repeat_wo_expr.ksy b/formats_err/repeat_wo_expr.ksy deleted file mode 100644 index 1bb8b7a74..000000000 --- a/formats_err/repeat_wo_expr.ksy +++ /dev/null @@ -1,9 +0,0 @@ -# repeat_wo_expr.ksy: /seq/0/repeat: -# error: `repeat: expr` requires a `repeat-expr` expression -# -meta: - id: repeat_wo_expr -seq: - - id: foo - type: u1 - repeat: expr diff --git a/formats_err/repeat_wo_repeat.ksy b/formats_err/repeat_wo_repeat.ksy deleted file mode 100644 index 3914d4a6f..000000000 --- a/formats_err/repeat_wo_repeat.ksy +++ /dev/null @@ -1,9 +0,0 @@ -# repeat_wo_repeat.ksy: /seq/0/repeat-until: -# error: unknown key found, expected: consume, doc, doc-ref, eos-error, id, if, include, repeat, terminator, type, valid -# -meta: - id: repeat_wo_repeat -seq: - - id: foo - type: u1 - repeat-until: 'true' diff --git a/formats_err/repeat_wo_until.ksy b/formats_err/repeat_wo_until.ksy deleted file mode 100644 index 46b86d30e..000000000 --- a/formats_err/repeat_wo_until.ksy +++ /dev/null @@ -1,9 +0,0 @@ -# repeat_wo_until.ksy: /seq/0/repeat: -# error: `repeat: until` requires a `repeat-until` expression -# -meta: - id: repeat_wo_until -seq: - - id: foo - type: u1 - repeat: until