Skip to content

Trying to understand enum resolution #1028

@wader

Description

@wader

Hello, i'm trying to understand how enum:s are resolved. I assumed first that enum were resolve something like this:

  • If no namespace, just a name, look in current types enums
  • If namespace, has ::, look up type first then look in enums.

But when i trying some thing in webide and with ksdump things got confusing, for example:

meta:
  id: enum_resolve

seq:
  - id: s0
    type: u1
    enum: e
  - id: s1
    type: u1
    enum: a::e
  - id: s2
    type: u1
    enum: a::a::e
  - id: s3
    type: u1
    enum: b::e
  - id: s4
    type: u1
    enum: b::b::e
  - id: s5
    type: u1
    enum: a::b::e
  - id: s6
    type: u1
    enum: b::a::e

types:
  a:
    enums:
      e:
        0: zero2
  b: {}

enums:
  e:
    0: zero

Both ksdump and webide result in:

$ docker run -v "$PWD:/share" -i --entrypoint=ksdump kaitai/ksv -f json /dev/zero enum_resolve.ksy
{
  "s0": "e_zero",
  "s1": "e_zero2",
  "s2": "e_zero2",
  "s3": "e_zero",
  "s4": "e_zero",
  "s5": "e_zero",
  "s6": "e_zero2"
}

So seems to behave something like this: If last part(s?) of type namespace resolve to a type that has the enum then use it, otherwise ignore type namespace and just look in current types enums.

Metadata

Metadata

Assignees

No one assigned

    Labels

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions