Skip to content
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

wit-component: implement a tool to create WebAssembly components. #183

Merged
merged 13 commits into from Apr 4, 2022

Commits on Apr 4, 2022

  1. wit-component: initial implementation.

    This commit provides the initial implementation for the `wit-component` tool.
    
    The tool is responsible for converting a core module implementing the canonical
    ABI into a component based on the WebAssembly component model proposal.
    
    Users provide the tool with the interfaces to be exported or imported by the
    component in `wit` format. The output of the tool is a component file.
    
    The tool validates that the core module is satisfied with the given imports and
    also exports the provided interfaces.
    
    The output component is also verified with the validator from `wasmparser`.
    peterhuene committed Apr 4, 2022
    Copy the full SHA
    e2896b9 View commit details
    Browse the repository at this point in the history
  2. wit-component: add more tests.

    This commit adds a test to encode an interface, decode the bytes using
    `wasmprinter`, and then compare the output with a baseline wat file.
    
    It also adds a `simple` test case for encoding components where a component
    exports a single default interface.
    peterhuene committed Apr 4, 2022
    Copy the full SHA
    01da91c View commit details
    Browse the repository at this point in the history
  3. wit-component: add more component tests.

    This commit adds more tests to `wit-component` for component encoding.
    peterhuene committed Apr 4, 2022
    Copy the full SHA
    559ba67 View commit details
    Browse the repository at this point in the history
  4. wit-component: add error handling test cases.

    This commit adds several test cases for validation of the module that will be
    encoded as a component.
    peterhuene committed Apr 4, 2022
    Copy the full SHA
    393bedd View commit details
    Browse the repository at this point in the history
  5. wit-component: be smarter about canonical option encoding.

    This commit only adds an encoding option if the function signatures contain
    strings.
    
    It also only adds the `into` option only if the function signature requires it.
    
    Added tests for lifting and lowering of various function signatures to ensure
    the canonical options emitted are correct.
    peterhuene committed Apr 4, 2022
    Copy the full SHA
    81d616f View commit details
    Browse the repository at this point in the history
  6. wit-component: update and better doc test cases.

    This commit updates the documentation for the tests in `wit-component` and
    restructures the interface encoding tests directory layout to match that of the
    component encoding tests.
    peterhuene committed Apr 4, 2022
    Copy the full SHA
    0b8b2ae View commit details
    Browse the repository at this point in the history
  7. wit-component: update test baseline for new wasmprinter.

    This commit updates wasmprinter and the test baselines now that it correctly
    prints outer aliases.
    peterhuene committed Apr 4, 2022
    Copy the full SHA
    d2244cb View commit details
    Browse the repository at this point in the history
  8. wit-component: update assert_eq! for better diff printing.

    The `pretty_assertions` crate prints a nice diff for `assert_eq!` failures, but
    the tests were reversing left and right to make it more confusing when
    conceptually seeing changes from the baseline.
    
    This commit swaps the two arguments to `assert_eq!` so that left is the
    baseline and right is the output of the test.
    peterhuene committed Apr 4, 2022
    Copy the full SHA
    adfe293 View commit details
    Browse the repository at this point in the history
  9. wit-component: give names to one of the test core modules.

    This commit adds some names to one of the test module's canonical definitions.
    
    This helps to test that the names survive encoding and are also present when
    printed.
    peterhuene committed Apr 4, 2022
    Copy the full SHA
    ccb9926 View commit details
    Browse the repository at this point in the history
  10. wit-component: add an import and export test case.

    This commit adds a test to cover both importing and exporting interfaces from
    the same component.
    
    Fixes a bug where importing functions wasn't contributing to the function type
    list.
    peterhuene committed Apr 4, 2022
    Copy the full SHA
    2e227be View commit details
    Browse the repository at this point in the history
  11. wit-component: use type information from wasmparser for validation.

    This commit uses the type information returned from wasmparser for the
    validation of the core module.
    
    It also reduces the complexity of parsing the core module by using methods
    provided by wasmparser.
    peterhuene committed Apr 4, 2022
    Copy the full SHA
    5935008 View commit details
    Browse the repository at this point in the history
  12. wit-component: code review feedback changes.

    Various code review feedback changes.
    peterhuene committed Apr 4, 2022
    Copy the full SHA
    36f22b4 View commit details
    Browse the repository at this point in the history
  13. wit-component: be smarter about import lowerings.

    This commit changes how imports are lowered.
    
    Previously, the tool used indirect lowerings for all imports, even if the
    import didn't need the `into` option. Now such lowerings are lowered before the
    inner core module is instantiated and directly given as an argument.
    
    Additionally, if there are indirect lowerings to perform, at most two
    additional modules are encoded: a module storing a table for only the indirect
    lowerings and another that initializes the table once the core module has been
    instantiated.
    peterhuene committed Apr 4, 2022
    Copy the full SHA
    c73b953 View commit details
    Browse the repository at this point in the history