-
Notifications
You must be signed in to change notification settings - Fork 198
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
ks-opaque-types not working with imports #295
Closed
Labels
Comments
Any progress with it? It affects npy format. |
Seeing the same problem, is there any progress on this? |
@Puyodead1, it seems that opaque types specified in meta don't work without providing the CLI flag to the compiler. |
generalmimon
added a commit
to kaitai-io/kaitai_struct_compiler
that referenced
this issue
Mar 4, 2024
Fixes kaitai-io/kaitai_struct#295 Fixes duplication of warnings and non-fatal errors as shown in kaitai-io/kaitai_struct#1063 The existing code structure hinted that the `precompile(classSpecs: ClassSpecs, topClass: ClassSpec)` overload should precompile only the `topClass` specified, but its actual implementation for the most part didn't use `topClass` at all and only passed `classSpecs` to all precompilation steps, which processed all types in the given `ClassSpecs`. Given that the `precompile(classSpecs: ClassSpecs, topClass: ClassSpec)` overload is called from the `precompile(specs: ClassSpecs)` overload for each type in `ClassSpecs`, this resulted in unnecessary repeated precompilation of all types when imports are used (because then there are more types in `ClassSpecs`). If there are `N` top-level types in `ClassSpecs`, instead of running the precompile phase only once for each top-level type, it was run `N` times per each top-level type, resulting in `N**2` total precompilations of top-level types. This is not only unnecessary, but it also had some observable negative effects, e.g. a single warning being reported to the console `N` times (and `N >= 2` any time you use imports) instead of just once (see kaitai-io/kaitai_struct#295). Another problem was caused by the only actual use of `topClass` in the `precompile(classSpecs: ClassSpecs, topClass: ClassSpec)` overload, namely for checking if opaque types are enabled or not (according to the `/meta/ks-opaque-types` key) and passing the setting to the `ResolveTypes` precompile step. This meant that if one spec had opaque types enabled and the other disabled, they would be rejected even in the spec where they should be enabled (because `ResolveTypes` processes all specs first with opaque types enabled and then once more with them disabled), as reported in kaitai-io/kaitai_struct#295. This commit ensures that each `ClassSpec` of `ClassSpecs` is precompiled only once, eliminating both of the problems mentioned.
generalmimon
added a commit
to kaitai-io/kaitai_struct_compiler
that referenced
this issue
Mar 4, 2024
Fixes kaitai-io/kaitai_struct#295 Fixes duplication of warnings and non-fatal errors as shown in kaitai-io/kaitai_struct#1063 The existing code structure hinted that the `precompile(classSpecs: ClassSpecs, topClass: ClassSpec)` overload should precompile only the `topClass` specified, but its actual implementation for the most part didn't use `topClass` at all and only passed `classSpecs` to all precompilation steps, which processed all types in the given `ClassSpecs`. Given that the `precompile(classSpecs: ClassSpecs, topClass: ClassSpec)` overload is called from the `precompile(specs: ClassSpecs)` overload for each type in `ClassSpecs`, this resulted in unnecessary repeated precompilation of all types when imports are used (because then there are more types in `ClassSpecs`). If there are `N` top-level types in `ClassSpecs`, instead of running the precompile phase only once for each top-level type, it was run `N` times per each top-level type, resulting in `N**2` total precompilations of top-level types. This is not only unnecessary, but it also had some observable negative effects, e.g. a single warning being reported to the console `N` times (and `N >= 2` any time you use imports) instead of just once (see kaitai-io/kaitai_struct#295). Another problem was caused by the only actual use of `topClass` in the `precompile(classSpecs: ClassSpecs, topClass: ClassSpec)` overload, namely for checking if opaque types are enabled or not (according to the `/meta/ks-opaque-types` key) and passing the setting to the `ResolveTypes` precompile step. This meant that if one spec had opaque types enabled and the other disabled, they would be rejected even in the spec where they should be enabled (because `ResolveTypes` processes all specs first with opaque types enabled and then once more with them disabled), as reported in kaitai-io/kaitai_struct#295. This commit ensures that each `ClassSpec` of `ClassSpecs` is precompiled only once, eliminating both of the problems mentioned.
generalmimon
added a commit
to kaitai-io/kaitai_struct_compiler
that referenced
this issue
Mar 7, 2024
Fixes kaitai-io/kaitai_struct#295 Fixes duplication of warnings and non-fatal errors as shown in kaitai-io/kaitai_struct#1063 The existing code structure hinted that the `precompile(classSpecs: ClassSpecs, topClass: ClassSpec)` overload should precompile only the `topClass` specified, but its actual implementation for the most part didn't use `topClass` at all and only passed `classSpecs` to all precompilation steps, which processed all types in the given `ClassSpecs`. Given that the `precompile(classSpecs: ClassSpecs, topClass: ClassSpec)` overload is called from the `precompile(specs: ClassSpecs)` overload for each type in `ClassSpecs`, this resulted in unnecessary repeated precompilation of all types when imports are used (because then there is more than 1 type in `ClassSpecs`). If there are `N` top-level types in `ClassSpecs`, instead of running the precompile phase only once for each top-level type, it was run `N` times per each top-level type, resulting in `N**2` total precompilations of top-level types. This is not only unnecessary, but it also had some observable negative effects, e.g. a single warning being reported to the console `N` times (and `N >= 2` any time you use imports) instead of just once (see kaitai-io/kaitai_struct#1063). Another problem was caused by the only actual use of `topClass` in the `precompile(classSpecs: ClassSpecs, topClass: ClassSpec)` overload, namely for checking if opaque types are enabled or not (according to the `/meta/ks-opaque-types` key) and passing the setting to the `ResolveTypes` precompile step. This meant that if one spec had opaque types enabled and the other disabled, they would be rejected even in the spec where they should be enabled (because `ResolveTypes` processed all specs first with opaque types enabled and then once more with them disabled), as reported in kaitai-io/kaitai_struct#295. This commit ensures that each `ClassSpec` of `ClassSpecs` is precompiled only once, eliminating both of the problems mentioned.
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Moved from #1203, originally submitted by @ii8:
ks-opaque-types: true
seems to have no effect whenever there is animports
directive, even if they are completely unrelated.Example:
filea.ksy:
fileb.ksy:
command:
The text was updated successfully, but these errors were encountered: