skip to content
==> src/module.c <==
1/* Freeing a decoded module, and finding exports. */
2#include "wasm/module.h"
3
4#include <stdlib.h>
5#include <string.h>
6
7void wasm_module_free(wasm_module *m) {
8    if (!m) return;
9    free(m->types);
10    free(m->imports);
11    free(m->funcs);
12    free(m->tables);
13    free(m->mems);
14    free(m->globals);
15    free(m->global_inits);
16    free(m->exports);
17    if (m->elems)
18        for (uint32_t i = 0; i < m->nelems; i++) {
19            free(m->elems[i].funcs);
20            free(m->elems[i].exprs);
21        }
22    free(m->elems);
23    if (m->codes)
24        for (uint32_t i = 0; i < m->ncodes; i++) free(m->codes[i].locals);
25    free(m->codes);
26    free(m->datas);
27    memset(m, 0, sizeof *m);
28}
29
30const wasm_export *wasm_module_export(const wasm_module *m, const char *name, uint8_t kind) {
31    size_t n = strlen(name);
32    for (uint32_t i = 0; i < m->nexports; i++) {
33        const wasm_export *e = &m->exports[i];
34        if (e->kind == kind && e->name_len == n && memcmp(e->name, name, n) == 0) return e;
35    }
36    return NULL;
37}