summaryrefslogtreecommitdiff
path: root/src/validator.c
diff options
context:
space:
mode:
Diffstat (limited to 'src/validator.c')
-rw-r--r--src/validator.c732
1 files changed, 366 insertions, 366 deletions
diff --git a/src/validator.c b/src/validator.c
index ba49296a..0f154548 100644
--- a/src/validator.c
+++ b/src/validator.c
@@ -38,7 +38,7 @@ typedef enum LabelType {
typedef struct LabelNode {
LabelType label_type;
- const WasmTypeVector* sig;
+ const WabtTypeVector* sig;
struct LabelNode* next;
size_t type_stack_limit;
} LabelNode;
@@ -52,170 +52,170 @@ typedef enum ActionResultKind {
typedef struct ActionResult {
ActionResultKind kind;
union {
- const WasmTypeVector* types;
- WasmType type;
+ const WabtTypeVector* types;
+ WabtType type;
};
} ActionResult;
typedef struct Context {
- WasmSourceErrorHandler* error_handler;
- WasmAllocator* allocator;
- WasmAstLexer* lexer;
- const WasmScript* script;
- const WasmModule* current_module;
- const WasmFunc* current_func;
+ WabtSourceErrorHandler* error_handler;
+ WabtAllocator* allocator;
+ WabtAstLexer* lexer;
+ const WabtScript* script;
+ const WabtModule* current_module;
+ const WabtFunc* current_func;
int current_table_index;
int current_memory_index;
int current_global_index;
int num_imported_globals;
- WasmTypeVector type_stack;
+ WabtTypeVector type_stack;
LabelNode* top_label;
int max_depth;
- WasmResult result;
+ WabtResult result;
} Context;
-static void WASM_PRINTF_FORMAT(3, 4)
- print_error(Context* ctx, const WasmLocation* loc, const char* fmt, ...) {
- ctx->result = WASM_ERROR;
+static void WABT_PRINTF_FORMAT(3, 4)
+ print_error(Context* ctx, const WabtLocation* loc, const char* fmt, ...) {
+ ctx->result = WABT_ERROR;
va_list args;
va_start(args, fmt);
- wasm_ast_format_error(ctx->error_handler, loc, ctx->lexer, fmt, args);
+ wabt_ast_format_error(ctx->error_handler, loc, ctx->lexer, fmt, args);
va_end(args);
}
-static WasmBool is_power_of_two(uint32_t x) {
+static WabtBool is_power_of_two(uint32_t x) {
return x && ((x & (x - 1)) == 0);
}
-static uint32_t get_opcode_natural_alignment(WasmOpcode opcode) {
- uint32_t memory_size = wasm_get_opcode_memory_size(opcode);
+static uint32_t get_opcode_natural_alignment(WabtOpcode opcode) {
+ uint32_t memory_size = wabt_get_opcode_memory_size(opcode);
assert(memory_size != 0);
return memory_size;
}
-static WasmResult check_var(Context* ctx,
+static WabtResult check_var(Context* ctx,
int max_index,
- const WasmVar* var,
+ const WabtVar* var,
const char* desc,
int* out_index) {
- assert(var->type == WASM_VAR_TYPE_INDEX);
+ assert(var->type == WABT_VAR_TYPE_INDEX);
if (var->index >= 0 && var->index < max_index) {
if (out_index)
*out_index = var->index;
- return WASM_OK;
+ return WABT_OK;
}
print_error(ctx, &var->loc, "%s variable out of range (max %d)", desc,
max_index);
- return WASM_ERROR;
+ return WABT_ERROR;
}
-static WasmResult check_func_var(Context* ctx,
- const WasmVar* var,
- const WasmFunc** out_func) {
+static WabtResult check_func_var(Context* ctx,
+ const WabtVar* var,
+ const WabtFunc** out_func) {
int index;
- if (WASM_FAILED(check_var(ctx, ctx->current_module->funcs.size, var,
+ if (WABT_FAILED(check_var(ctx, ctx->current_module->funcs.size, var,
"function", &index))) {
- return WASM_ERROR;
+ return WABT_ERROR;
}
if (out_func)
*out_func = ctx->current_module->funcs.data[index];
- return WASM_OK;
+ return WABT_OK;
}
-static WasmResult check_global_var(Context* ctx,
- const WasmVar* var,
- const WasmGlobal** out_global,
+static WabtResult check_global_var(Context* ctx,
+ const WabtVar* var,
+ const WabtGlobal** out_global,
int* out_global_index) {
int index;
- if (WASM_FAILED(check_var(ctx, ctx->current_module->globals.size, var,
+ if (WABT_FAILED(check_var(ctx, ctx->current_module->globals.size, var,
"global", &index))) {
- return WASM_ERROR;
+ return WABT_ERROR;
}
if (out_global)
*out_global = ctx->current_module->globals.data[index];
if (out_global_index)
*out_global_index = index;
- return WASM_OK;
+ return WABT_OK;
}
-static WasmResult check_func_type_var(Context* ctx,
- const WasmVar* var,
- const WasmFuncType** out_func_type) {
+static WabtResult check_func_type_var(Context* ctx,
+ const WabtVar* var,
+ const WabtFuncType** out_func_type) {
int index;
- if (WASM_FAILED(check_var(ctx, ctx->current_module->func_types.size, var,
+ if (WABT_FAILED(check_var(ctx, ctx->current_module->func_types.size, var,
"function type", &index))) {
- return WASM_ERROR;
+ return WABT_ERROR;
}
if (out_func_type)
*out_func_type = ctx->current_module->func_types.data[index];
- return WASM_OK;
+ return WABT_OK;
}
-static WasmResult check_table_var(Context* ctx,
- const WasmVar* var,
- const WasmTable** out_table) {
+static WabtResult check_table_var(Context* ctx,
+ const WabtVar* var,
+ const WabtTable** out_table) {
int index;
- if (WASM_FAILED(check_var(ctx, ctx->current_module->tables.size, var, "table",
+ if (WABT_FAILED(check_var(ctx, ctx->current_module->tables.size, var, "table",
&index))) {
- return WASM_ERROR;
+ return WABT_ERROR;
}
if (out_table)
*out_table = ctx->current_module->tables.data[index];
- return WASM_OK;
+ return WABT_OK;
}
-static WasmResult check_memory_var(Context* ctx,
- const WasmVar* var,
- const WasmMemory** out_memory) {
+static WabtResult check_memory_var(Context* ctx,
+ const WabtVar* var,
+ const WabtMemory** out_memory) {
int index;
- if (WASM_FAILED(check_var(ctx, ctx->current_module->memories.size, var,
+ if (WABT_FAILED(check_var(ctx, ctx->current_module->memories.size, var,
"memory", &index))) {
- return WASM_ERROR;
+ return WABT_ERROR;
}
if (out_memory)
*out_memory = ctx->current_module->memories.data[index];
- return WASM_OK;
+ return WABT_OK;
}
-static WasmResult check_local_var(Context* ctx,
- const WasmVar* var,
- WasmType* out_type) {
- const WasmFunc* func = ctx->current_func;
- int max_index = wasm_get_num_params_and_locals(func);
- int index = wasm_get_local_index_by_var(func, var);
+static WabtResult check_local_var(Context* ctx,
+ const WabtVar* var,
+ WabtType* out_type) {
+ const WabtFunc* func = ctx->current_func;
+ int max_index = wabt_get_num_params_and_locals(func);
+ int index = wabt_get_local_index_by_var(func, var);
if (index >= 0 && index < max_index) {
if (out_type) {
- int num_params = wasm_get_num_params(func);
+ int num_params = wabt_get_num_params(func);
if (index < num_params) {
- *out_type = wasm_get_param_type(func, index);
+ *out_type = wabt_get_param_type(func, index);
} else {
*out_type = ctx->current_func->local_types.data[index - num_params];
}
}
- return WASM_OK;
+ return WABT_OK;
}
- if (var->type == WASM_VAR_TYPE_NAME) {
+ if (var->type == WABT_VAR_TYPE_NAME) {
print_error(ctx, &var->loc,
"undefined local variable \"" PRIstringslice "\"",
- WASM_PRINTF_STRING_SLICE_ARG(var->name));
+ WABT_PRINTF_STRING_SLICE_ARG(var->name));
} else {
print_error(ctx, &var->loc, "local variable out of range (max %d)",
max_index);
}
- return WASM_ERROR;
+ return WABT_ERROR;
}
static void check_align(Context* ctx,
- const WasmLocation* loc,
+ const WabtLocation* loc,
uint32_t alignment,
uint32_t natural_alignment) {
- if (alignment != WASM_USE_NATURAL_ALIGNMENT) {
+ if (alignment != WABT_USE_NATURAL_ALIGNMENT) {
if (!is_power_of_two(alignment))
print_error(ctx, loc, "alignment must be power-of-two");
if (alignment > natural_alignment) {
@@ -227,15 +227,15 @@ static void check_align(Context* ctx,
}
static void check_offset(Context* ctx,
- const WasmLocation* loc,
+ const WabtLocation* loc,
uint64_t offset) {
if (offset > UINT32_MAX) {
print_error(ctx, loc, "offset must be less than or equal to 0xffffffff");
}
}
-static LabelNode* find_label_by_var(LabelNode* top_label, const WasmVar* var) {
- assert(var->type == WASM_VAR_TYPE_INDEX);
+static LabelNode* find_label_by_var(LabelNode* top_label, const WabtVar* var) {
+ assert(var->type == WABT_VAR_TYPE_INDEX);
LabelNode* node = top_label;
int i = 0;
while (node && i != var->index) {
@@ -245,27 +245,27 @@ static LabelNode* find_label_by_var(LabelNode* top_label, const WasmVar* var) {
return node;
}
-static WasmResult check_label_var(Context* ctx,
+static WabtResult check_label_var(Context* ctx,
LabelNode* top_label,
- const WasmVar* var,
+ const WabtVar* var,
LabelNode** out_node) {
LabelNode* node = find_label_by_var(top_label, var);
if (node) {
if (out_node)
*out_node = node;
- return WASM_OK;
+ return WABT_OK;
}
print_error(ctx, &var->loc, "label variable out of range (max %d)",
ctx->max_depth);
- return WASM_ERROR;
+ return WABT_ERROR;
}
static void push_label(Context* ctx,
- const WasmLocation* loc,
+ const WabtLocation* loc,
LabelNode* node,
LabelType label_type,
- const WasmTypeVector* sig) {
+ const WabtTypeVector* sig) {
node->label_type = label_type;
node->next = ctx->top_label;
node->sig = sig;
@@ -284,8 +284,8 @@ static size_t type_stack_limit(Context* ctx) {
return ctx->top_label->type_stack_limit;
}
-static WasmResult check_type_stack_limit(Context* ctx,
- const WasmLocation* loc,
+static WabtResult check_type_stack_limit(Context* ctx,
+ const WabtLocation* loc,
size_t expected,
const char* desc) {
size_t limit = type_stack_limit(ctx);
@@ -294,13 +294,13 @@ static WasmResult check_type_stack_limit(Context* ctx,
print_error(ctx, loc, "type stack size too small at %s. got %" PRIzd
", expected at least %" PRIzd,
desc, avail, expected);
- return WASM_ERROR;
+ return WABT_ERROR;
}
- return WASM_OK;
+ return WABT_OK;
}
-static WasmResult check_type_stack_limit_exact(Context* ctx,
- const WasmLocation* loc,
+static WabtResult check_type_stack_limit_exact(Context* ctx,
+ const WabtLocation* loc,
size_t expected,
const char* desc) {
size_t limit = type_stack_limit(ctx);
@@ -309,80 +309,80 @@ static WasmResult check_type_stack_limit_exact(Context* ctx,
print_error(ctx, loc,
"type stack at end of %s is %" PRIzd ". expected %" PRIzd, desc,
avail, expected);
- return WASM_ERROR;
+ return WABT_ERROR;
}
- return WASM_OK;
+ return WABT_OK;
}
static void reset_type_stack_to_limit(Context* ctx) {
ctx->type_stack.size = type_stack_limit(ctx);
}
-static void push_type(Context* ctx, WasmType type) {
- if (type != WASM_TYPE_VOID)
- wasm_append_type_value(ctx->allocator, &ctx->type_stack, &type);
+static void push_type(Context* ctx, WabtType type) {
+ if (type != WABT_TYPE_VOID)
+ wabt_append_type_value(ctx->allocator, &ctx->type_stack, &type);
}
-static void push_types(Context* ctx, const WasmTypeVector* types) {
+static void push_types(Context* ctx, const WabtTypeVector* types) {
size_t i;
for (i = 0; i < types->size; ++i)
push_type(ctx, types->data[i]);
}
-static WasmType peek_type(Context* ctx, size_t depth, int arity) {
+static WabtType peek_type(Context* ctx, size_t depth, int arity) {
if (arity > 0) {
if (depth < ctx->type_stack.size - type_stack_limit(ctx)) {
return ctx->type_stack.data[ctx->type_stack.size - depth - 1];
} else {
/* return any type to allow type-checking to continue; the caller should
* have already raised an error about the stack underflow. */
- return WASM_TYPE_I32;
+ return WABT_TYPE_I32;
}
} else {
- return WASM_TYPE_VOID;
+ return WABT_TYPE_VOID;
}
}
-static WasmType top_type(Context* ctx) {
+static WabtType top_type(Context* ctx) {
return peek_type(ctx, 0, 1);
}
-static WasmType pop_type(Context* ctx) {
- WasmType result = top_type(ctx);
+static WabtType pop_type(Context* ctx) {
+ WabtType result = top_type(ctx);
if (ctx->type_stack.size > type_stack_limit(ctx))
ctx->type_stack.size--;
return result;
}
static void check_type(Context* ctx,
- const WasmLocation* loc,
- WasmType actual,
- WasmType expected,
+ const WabtLocation* loc,
+ WabtType actual,
+ WabtType expected,
const char* desc) {
if (actual != expected) {
print_error(ctx, loc, "type mismatch at %s. got %s, expected %s", desc,
- wasm_get_type_name(actual), wasm_get_type_name(expected));
+ wabt_get_type_name(actual), wabt_get_type_name(expected));
}
}
static void check_type_index(Context* ctx,
- const WasmLocation* loc,
- WasmType actual,
- WasmType expected,
+ const WabtLocation* loc,
+ WabtType actual,
+ WabtType expected,
const char* desc,
int index,
const char* index_kind) {
if (actual != expected) {
print_error(ctx, loc, "type mismatch for %s %d of %s. got %s, expected %s",
- index_kind, index, desc, wasm_get_type_name(actual),
- wasm_get_type_name(expected));
+ index_kind, index, desc, wabt_get_type_name(actual),
+ wabt_get_type_name(expected));
}
}
static void check_types(Context* ctx,
- const WasmLocation* loc,
- const WasmTypeVector* actual,
- const WasmTypeVector* expected,
+ const WabtLocation* loc,
+ const WabtTypeVector* actual,
+ const WabtTypeVector* expected,
const char* desc,
const char* index_kind) {
if (actual->size == expected->size) {
@@ -398,9 +398,9 @@ static void check_types(Context* ctx,
}
static void check_const_types(Context* ctx,
- const WasmLocation* loc,
- const WasmTypeVector* actual,
- const WasmConstVector* expected,
+ const WabtLocation* loc,
+ const WabtTypeVector* actual,
+ const WabtConstVector* expected,
const char* desc) {
if (actual->size == expected->size) {
size_t i;
@@ -415,67 +415,67 @@ static void check_const_types(Context* ctx,
}
static void check_const_type(Context* ctx,
- const WasmLocation* loc,
- WasmType actual,
- const WasmConstVector* expected,
+ const WabtLocation* loc,
+ WabtType actual,
+ const WabtConstVector* expected,
const char* desc) {
- assert(actual != WASM_TYPE_ANY);
- WasmTypeVector actual_types;
+ assert(actual != WABT_TYPE_ANY);
+ WabtTypeVector actual_types;
- WASM_ZERO_MEMORY(actual_types);
- actual_types.size = actual == WASM_TYPE_VOID ? 0 : 1;
+ WABT_ZERO_MEMORY(actual_types);
+ actual_types.size = actual == WABT_TYPE_VOID ? 0 : 1;
actual_types.data = &actual;
check_const_types(ctx, loc, &actual_types, expected, desc);
}
static void pop_and_check_1_type(Context* ctx,
- const WasmLocation* loc,
- WasmType expected,
+ const WabtLocation* loc,
+ WabtType expected,
const char* desc) {
- if (WASM_SUCCEEDED(check_type_stack_limit(ctx, loc, 1, desc))) {
- WasmType actual = pop_type(ctx);
+ if (WABT_SUCCEEDED(check_type_stack_limit(ctx, loc, 1, desc))) {
+ WabtType actual = pop_type(ctx);
check_type(ctx, loc, actual, expected, desc);
}
}
static void pop_and_check_2_types(Context* ctx,
- const WasmLocation* loc,
- WasmType expected1,
- WasmType expected2,
+ const WabtLocation* loc,
+ WabtType expected1,
+ WabtType expected2,
const char* desc) {
- if (WASM_SUCCEEDED(check_type_stack_limit(ctx, loc, 2, desc))) {
- WasmType actual2 = pop_type(ctx);
- WasmType actual1 = pop_type(ctx);
+ if (WABT_SUCCEEDED(check_type_stack_limit(ctx, loc, 2, desc))) {
+ WabtType actual2 = pop_type(ctx);
+ WabtType actual1 = pop_type(ctx);
check_type(ctx, loc, actual1, expected1, desc);
check_type(ctx, loc, actual2, expected2, desc);
}
}
static void check_opcode1(Context* ctx,
- const WasmLocation* loc,
- WasmOpcode opcode) {
- pop_and_check_1_type(ctx, loc, wasm_get_opcode_param_type_1(opcode),
- wasm_get_opcode_name(opcode));
- push_type(ctx, wasm_get_opcode_result_type(opcode));
+ const WabtLocation* loc,
+ WabtOpcode opcode) {
+ pop_and_check_1_type(ctx, loc, wabt_get_opcode_param_type_1(opcode),
+ wabt_get_opcode_name(opcode));
+ push_type(ctx, wabt_get_opcode_result_type(opcode));
}
static void check_opcode2(Context* ctx,
- const WasmLocation* loc,
- WasmOpcode opcode) {
- pop_and_check_2_types(ctx, loc, wasm_get_opcode_param_type_1(opcode),
- wasm_get_opcode_param_type_2(opcode),
- wasm_get_opcode_name(opcode));
- push_type(ctx, wasm_get_opcode_result_type(opcode));
+ const WabtLocation* loc,
+ WabtOpcode opcode) {
+ pop_and_check_2_types(ctx, loc, wabt_get_opcode_param_type_1(opcode),
+ wabt_get_opcode_param_type_2(opcode),
+ wabt_get_opcode_name(opcode));
+ push_type(ctx, wabt_get_opcode_result_type(opcode));
}
static void check_n_types(Context* ctx,
- const WasmLocation* loc,
- const WasmTypeVector* expected,
+ const WabtLocation* loc,
+ const WabtTypeVector* expected,
const char* desc) {
- if (WASM_SUCCEEDED(check_type_stack_limit(ctx, loc, expected->size, desc))) {
+ if (WABT_SUCCEEDED(check_type_stack_limit(ctx, loc, expected->size, desc))) {
size_t i;
for (i = 0; i < expected->size; ++i) {
- WasmType actual =
+ WabtType actual =
ctx->type_stack.data[ctx->type_stack.size - expected->size + i];
check_type(ctx, loc, actual, expected->data[i], desc);
}
@@ -483,25 +483,25 @@ static void check_n_types(Context* ctx,
}
static void check_assert_return_nan_type(Context* ctx,
- const WasmLocation* loc,
- WasmType actual,
+ const WabtLocation* loc,
+ WabtType actual,
const char* desc) {
/* when using assert_return_nan, the result can be either a f32 or f64 type
* so we special case it here. */
- if (actual != WASM_TYPE_F32 && actual != WASM_TYPE_F64) {
+ if (actual != WABT_TYPE_F32 && actual != WABT_TYPE_F64) {
print_error(ctx, loc, "type mismatch at %s. got %s, expected f32 or f64",
- desc, wasm_get_type_name(actual));
+ desc, wabt_get_type_name(actual));
}
}
-static WasmResult check_br(Context* ctx,
- const WasmLocation* loc,
- const WasmVar* var,
- const WasmBlockSignature** out_sig,
+static WabtResult check_br(Context* ctx,
+ const WabtLocation* loc,
+ const WabtVar* var,
+ const WabtBlockSignature** out_sig,
const char* desc) {
LabelNode* node;
- WasmResult result = check_label_var(ctx, ctx->top_label, var, &node);
- if (WASM_SUCCEEDED(result)) {
+ WabtResult result = check_label_var(ctx, ctx->top_label, var, &node);
+ if (WABT_SUCCEEDED(result)) {
if (node->label_type != LABEL_TYPE_LOOP) {
check_n_types(ctx, loc, node->sig, desc);
}
@@ -513,9 +513,9 @@ static WasmResult check_br(Context* ctx,
}
static void check_call(Context* ctx,
- const WasmLocation* loc,
- const WasmStringSlice* callee_name,
- const WasmFuncSignature* sig,
+ const WabtLocation* loc,
+ const WabtStringSlice* callee_name,
+ const WabtFuncSignature* sig,
const char* desc) {
size_t expected_args = sig->param_types.size;
size_t limit = type_stack_limit(ctx);
@@ -523,9 +523,9 @@ static void check_call(Context* ctx,
size_t i;
if (expected_args <= avail) {
for (i = 0; i < sig->param_types.size; ++i) {
- WasmType actual =
+ WabtType actual =
ctx->type_stack.data[ctx->type_stack.size - expected_args + i];
- WasmType expected = sig->param_types.data[i];
+ WabtType expected = sig->param_types.data[i];
check_type_index(ctx, loc, actual, expected, desc, i, "argument");
}
ctx->type_stack.size -= expected_args;
@@ -539,20 +539,20 @@ static void check_call(Context* ctx,
push_type(ctx, sig->result_types.data[i]);
}
-static void check_expr(Context* ctx, const WasmExpr* expr);
+static void check_expr(Context* ctx, const WabtExpr* expr);
static void check_block(Context* ctx,
- const WasmLocation* loc,
- const WasmExpr* first,
+ const WabtLocation* loc,
+ const WabtExpr* first,
const char* desc) {
- WasmBool check_result = WASM_TRUE;
+ WabtBool check_result = WABT_TRUE;
if (first) {
- const WasmExpr* expr;
+ const WabtExpr* expr;
for (expr = first; expr; expr = expr->next) {
check_expr(ctx, expr);
/* stop typechecking if we hit unreachable code */
- if (top_type(ctx) == WASM_TYPE_ANY) {
- check_result = WASM_FALSE;
+ if (top_type(ctx) == WABT_TYPE_ANY) {
+ check_result = WABT_FALSE;
break;
}
}
@@ -566,21 +566,21 @@ static void check_block(Context* ctx,
}
static void check_has_memory(Context* ctx,
- const WasmLocation* loc,
- WasmOpcode opcode) {
+ const WabtLocation* loc,
+ WabtOpcode opcode) {
if (ctx->current_module->memories.size == 0) {
print_error(ctx, loc, "%s requires an imported or defined memory.",
- wasm_get_opcode_name(opcode));
+ wabt_get_opcode_name(opcode));
}
}
-static void check_expr(Context* ctx, const WasmExpr* expr) {
+static void check_expr(Context* ctx, const WabtExpr* expr) {
switch (expr->type) {
- case WASM_EXPR_TYPE_BINARY:
+ case WABT_EXPR_TYPE_BINARY:
check_opcode2(ctx, &expr->loc, expr->binary.opcode);
break;
- case WASM_EXPR_TYPE_BLOCK: {
+ case WABT_EXPR_TYPE_BLOCK: {
LabelNode node;
push_label(ctx, &expr->loc, &node, LABEL_TYPE_BLOCK, &expr->block.sig);
check_block(ctx, &expr->loc, expr->block.first, "block");
@@ -589,21 +589,21 @@ static void check_expr(Context* ctx, const WasmExpr* expr) {
break;
}
- case WASM_EXPR_TYPE_BR:
+ case WABT_EXPR_TYPE_BR:
check_br(ctx, &expr->loc, &expr->br.var, NULL, "br value");
reset_type_stack_to_limit(ctx);
- push_type(ctx, WASM_TYPE_ANY);
+ push_type(ctx, WABT_TYPE_ANY);
break;
- case WASM_EXPR_TYPE_BR_IF: {
- const WasmBlockSignature* sig;
- pop_and_check_1_type(ctx, &expr->loc, WASM_TYPE_I32, "br_if condition");
+ case WABT_EXPR_TYPE_BR_IF: {
+ const WabtBlockSignature* sig;
+ pop_and_check_1_type(ctx, &expr->loc, WABT_TYPE_I32, "br_if condition");
check_br(ctx, &expr->loc, &expr->br_if.var, &sig, "br_if value");
break;
}
- case WASM_EXPR_TYPE_BR_TABLE: {
- pop_and_check_1_type(ctx, &expr->loc, WASM_TYPE_I32, "br_table key");
+ case WABT_EXPR_TYPE_BR_TABLE: {
+ pop_and_check_1_type(ctx, &expr->loc, WABT_TYPE_I32, "br_table key");
size_t i;
for (i = 0; i < expr->br_table.targets.size; ++i) {
check_br(ctx, &expr->loc, &expr->br_table.targets.data[i], NULL,
@@ -612,73 +612,73 @@ static void check_expr(Context* ctx, const WasmExpr* expr) {
check_br(ctx, &expr->loc, &expr->br_table.default_target, NULL,
"br_table default target");
reset_type_stack_to_limit(ctx);
- push_type(ctx, WASM_TYPE_ANY);
+ push_type(ctx, WABT_TYPE_ANY);
break;
}
- case WASM_EXPR_TYPE_CALL: {
- const WasmFunc* callee;
- if (WASM_SUCCEEDED(check_func_var(ctx, &expr->call.var, &callee)))
+ case WABT_EXPR_TYPE_CALL: {
+ const WabtFunc* callee;
+ if (WABT_SUCCEEDED(check_func_var(ctx, &expr->call.var, &callee)))
check_call(ctx, &expr->loc, &callee->name, &callee->decl.sig, "call");
break;
}
- case WASM_EXPR_TYPE_CALL_INDIRECT: {
- const WasmFuncType* func_type;
+ case WABT_EXPR_TYPE_CALL_INDIRECT: {
+ const WabtFuncType* func_type;
if (ctx->current_module->tables.size == 0) {
print_error(ctx, &expr->loc,
"found call_indirect operator, but no table");
}
- if (WASM_SUCCEEDED(
+ if (WABT_SUCCEEDED(
check_func_type_var(ctx, &expr->call_indirect.var, &func_type))) {
- WasmType type = pop_type(ctx);
- check_type(ctx, &expr->loc, type, WASM_TYPE_I32,
+ WabtType type = pop_type(ctx);
+ check_type(ctx, &expr->loc, type, WABT_TYPE_I32,
"call_indirect function index");
check_call(ctx, &expr->loc, NULL, &func_type->sig, "call_indirect");
}
break;
}
- case WASM_EXPR_TYPE_COMPARE:
+ case WABT_EXPR_TYPE_COMPARE:
check_opcode2(ctx, &expr->loc, expr->compare.opcode);
break;
- case WASM_EXPR_TYPE_CONST:
+ case WABT_EXPR_TYPE_CONST:
push_type(ctx, expr->const_.type);
break;
- case WASM_EXPR_TYPE_CONVERT:
+ case WABT_EXPR_TYPE_CONVERT:
check_opcode1(ctx, &expr->loc, expr->convert.opcode);
break;
- case WASM_EXPR_TYPE_DROP:
- if (WASM_SUCCEEDED(check_type_stack_limit(ctx, &expr->loc, 1, "drop")))
+ case WABT_EXPR_TYPE_DROP:
+ if (WABT_SUCCEEDED(check_type_stack_limit(ctx, &expr->loc, 1, "drop")))
pop_type(ctx);
break;
- case WASM_EXPR_TYPE_GET_GLOBAL: {
- const WasmGlobal* global;
- if (WASM_SUCCEEDED(
+ case WABT_EXPR_TYPE_GET_GLOBAL: {
+ const WabtGlobal* global;
+ if (WABT_SUCCEEDED(
check_global_var(ctx, &expr->get_global.var, &global, NULL)))
push_type(ctx, global->type);
break;
}
- case WASM_EXPR_TYPE_GET_LOCAL: {
- WasmType type;
- if (WASM_SUCCEEDED(check_local_var(ctx, &expr->get_local.var, &type)))
+ case WABT_EXPR_TYPE_GET_LOCAL: {
+ WabtType type;
+ if (WABT_SUCCEEDED(check_local_var(ctx, &expr->get_local.var, &type)))
push_type(ctx, type);
break;
}
- case WASM_EXPR_TYPE_GROW_MEMORY:
- check_has_memory(ctx, &expr->loc, WASM_OPCODE_GROW_MEMORY);
- check_opcode1(ctx, &expr->loc, WASM_OPCODE_GROW_MEMORY);
+ case WABT_EXPR_TYPE_GROW_MEMORY:
+ check_has_memory(ctx, &expr->loc, WABT_OPCODE_GROW_MEMORY);
+ check_opcode1(ctx, &expr->loc, WABT_OPCODE_GROW_MEMORY);
break;
- case WASM_EXPR_TYPE_IF: {
+ case WABT_EXPR_TYPE_IF: {
LabelNode node;
- pop_and_check_1_type(ctx, &expr->loc, WASM_TYPE_I32, "if condition");
+ pop_and_check_1_type(ctx, &expr->loc, WABT_TYPE_I32, "if condition");
push_label(ctx, &expr->loc, &node, LABEL_TYPE_IF, &expr->if_.true_.sig);
check_block(ctx, &expr->loc, expr->if_.true_.first, "if true branch");
check_block(ctx, &expr->loc, expr->if_.false_, "if false branch");
@@ -687,7 +687,7 @@ static void check_expr(Context* ctx, const WasmExpr* expr) {
break;
}
- case WASM_EXPR_TYPE_LOAD:
+ case WABT_EXPR_TYPE_LOAD:
check_has_memory(ctx, &expr->loc, expr->load.opcode);
check_align(ctx, &expr->loc, expr->load.align,
get_opcode_natural_alignment(expr->load.opcode));
@@ -695,7 +695,7 @@ static void check_expr(Context* ctx, const WasmExpr* expr) {
check_opcode1(ctx, &expr->loc, expr->load.opcode);
break;
- case WASM_EXPR_TYPE_LOOP: {
+ case WABT_EXPR_TYPE_LOOP: {
LabelNode node;
push_label(ctx, &expr->loc, &node, LABEL_TYPE_LOOP, &expr->loop.sig);
check_block(ctx, &expr->loc, expr->loop.first, "loop");
@@ -704,38 +704,38 @@ static void check_expr(Context* ctx, const WasmExpr* expr) {
break;
}
- case WASM_EXPR_TYPE_CURRENT_MEMORY:
- check_has_memory(ctx, &expr->loc, WASM_OPCODE_CURRENT_MEMORY);
- push_type(ctx, WASM_TYPE_I32);
+ case WABT_EXPR_TYPE_CURRENT_MEMORY:
+ check_has_memory(ctx, &expr->loc, WABT_OPCODE_CURRENT_MEMORY);
+ push_type(ctx, WABT_TYPE_I32);
break;
- case WASM_EXPR_TYPE_NOP:
+ case WABT_EXPR_TYPE_NOP:
break;
- case WASM_EXPR_TYPE_RETURN: {
+ case WABT_EXPR_TYPE_RETURN: {
check_n_types(ctx, &expr->loc, &ctx->current_func->decl.sig.result_types,
"return");
reset_type_stack_to_limit(ctx);
- push_type(ctx, WASM_TYPE_ANY);
+ push_type(ctx, WABT_TYPE_ANY);
break;
}
- case WASM_EXPR_TYPE_SELECT: {
- pop_and_check_1_type(ctx, &expr->loc, WASM_TYPE_I32, "select");
- if (WASM_SUCCEEDED(
+ case WABT_EXPR_TYPE_SELECT: {
+ pop_and_check_1_type(ctx, &expr->loc, WABT_TYPE_I32, "select");
+ if (WABT_SUCCEEDED(
check_type_stack_limit(ctx, &expr->loc, 2, "select"))) {
- WasmType type1 = pop_type(ctx);
- WasmType type2 = pop_type(ctx);
+ WabtType type1 = pop_type(ctx);
+ WabtType type2 = pop_type(ctx);
check_type(ctx, &expr->loc, type2, type1, "select");
push_type(ctx, type1);
}
break;
}
- case WASM_EXPR_TYPE_SET_GLOBAL: {
- WasmType type = WASM_TYPE_I32;
- const WasmGlobal* global;
- if (WASM_SUCCEEDED(
+ case WABT_EXPR_TYPE_SET_GLOBAL: {
+ WabtType type = WABT_TYPE_I32;
+ const WabtGlobal* global;
+ if (WABT_SUCCEEDED(
check_global_var(ctx, &expr->set_global.var, &global, NULL))) {
type = global->type;
}
@@ -743,14 +743,14 @@ static void check_expr(Context* ctx, const WasmExpr* expr) {
break;
}
- case WASM_EXPR_TYPE_SET_LOCAL: {
- WasmType type = WASM_TYPE_I32;
+ case WABT_EXPR_TYPE_SET_LOCAL: {
+ WabtType type = WABT_TYPE_I32;
check_local_var(ctx, &expr->set_local.var, &type);
pop_and_check_1_type(ctx, &expr->loc, type, "set_local");
break;
}
- case WASM_EXPR_TYPE_STORE:
+ case WABT_EXPR_TYPE_STORE:
check_has_memory(ctx, &expr->loc, expr->store.opcode);
check_align(ctx, &expr->loc, expr->store.align,
get_opcode_natural_alignment(expr->store.opcode));
@@ -758,30 +758,30 @@ static void check_expr(Context* ctx, const WasmExpr* expr) {
check_opcode2(ctx, &expr->loc, expr->store.opcode);
break;
- case WASM_EXPR_TYPE_TEE_LOCAL: {
- WasmType local_type = WASM_TYPE_I32;
+ case WABT_EXPR_TYPE_TEE_LOCAL: {
+ WabtType local_type = WABT_TYPE_I32;
check_local_var(ctx, &expr->tee_local.var, &local_type);
if (check_type_stack_limit(ctx, &expr->loc, 1, "tee_local"))
check_type(ctx, &expr->loc, top_type(ctx), local_type, "tee_local");
break;
}
- case WASM_EXPR_TYPE_UNARY:
+ case WABT_EXPR_TYPE_UNARY:
check_opcode1(ctx, &expr->loc, expr->unary.opcode);
break;
- case WASM_EXPR_TYPE_UNREACHABLE:
+ case WABT_EXPR_TYPE_UNREACHABLE:
reset_type_stack_to_limit(ctx);
- push_type(ctx, WASM_TYPE_ANY);
+ push_type(ctx, WABT_TYPE_ANY);
break;
}
}
static void check_func_signature_matches_func_type(
Context* ctx,
- const WasmLocation* loc,
- const WasmFuncSignature* sig,
- const WasmFuncType* func_type) {
+ const WabtLocation* loc,
+ const WabtFuncSignature* sig,
+ const WabtFuncType* func_type) {
check_types(ctx, loc, &sig->result_types, &func_type->sig.result_types,
"function", "result");
check_types(ctx, loc, &sig->param_types, &func_type->sig.param_types,
@@ -789,17 +789,17 @@ static void check_func_signature_matches_func_type(
}
static void check_func(Context* ctx,
- const WasmLocation* loc,
- const WasmFunc* func) {
+ const WabtLocation* loc,
+ const WabtFunc* func) {
ctx->current_func = func;
- if (wasm_get_num_results(func) > 1) {
+ if (wabt_get_num_results(func) > 1) {
print_error(ctx, loc, "multiple result values not currently supported.");
/* don't run any other checks, the won't test the result_type properly */
return;
}
- if (wasm_decl_has_func_type(&func->decl)) {
- const WasmFuncType* func_type;
- if (WASM_SUCCEEDED(
+ if (wabt_decl_has_func_type(&func->decl)) {
+ const WabtFuncType* func_type;
+ if (WABT_SUCCEEDED(
check_func_type_var(ctx, &func->decl.type_var, &func_type))) {
check_func_signature_matches_func_type(ctx, loc, &func->decl.sig,
func_type);
@@ -816,7 +816,7 @@ static void check_func(Context* ctx,
}
static void print_const_expr_error(Context* ctx,
- const WasmLocation* loc,
+ const WabtLocation* loc,
const char* desc) {
print_error(ctx, loc,
"invalid %s, must be a constant expression; either *.const or "
@@ -825,11 +825,11 @@ static void print_const_expr_error(Context* ctx,
}
static void check_const_init_expr(Context* ctx,
- const WasmLocation* loc,
- const WasmExpr* expr,
- WasmType expected_type,
+ const WabtLocation* loc,
+ const WabtExpr* expr,
+ WabtType expected_type,
const char* desc) {
- WasmType type = WASM_TYPE_VOID;
+ WabtType type = WABT_TYPE_VOID;
if (expr) {
if (expr->next != NULL) {
print_const_expr_error(ctx, loc, desc);
@@ -837,14 +837,14 @@ static void check_const_init_expr(Context* ctx,
}
switch (expr->type) {
- case WASM_EXPR_TYPE_CONST:
+ case WABT_EXPR_TYPE_CONST:
type = expr->const_.type;
break;
- case WASM_EXPR_TYPE_GET_GLOBAL: {
- const WasmGlobal* ref_global = NULL;
+ case WABT_EXPR_TYPE_GET_GLOBAL: {
+ const WabtGlobal* ref_global = NULL;
int ref_global_index;
- if (WASM_FAILED(check_global_var(ctx, &expr->get_global.var,
+ if (WABT_FAILED(check_global_var(ctx, &expr->get_global.var,
&ref_global, &ref_global_index))) {
return;
}
@@ -879,15 +879,15 @@ static void check_const_init_expr(Context* ctx,
}
static void check_global(Context* ctx,
- const WasmLocation* loc,
- const WasmGlobal* global) {
+ const WabtLocation* loc,
+ const WabtGlobal* global) {
check_const_init_expr(ctx, loc, global->init_expr, global->type,
"global initializer expression");
}
static void check_limits(Context* ctx,
- const WasmLocation* loc,
- const WasmLimits* limits,
+ const WabtLocation* loc,
+ const WabtLimits* limits,
uint64_t absolute_max,
const char* desc) {
if (limits->initial > absolute_max) {
@@ -910,105 +910,105 @@ static void check_limits(Context* ctx,
}
static void check_table(Context* ctx,
- const WasmLocation* loc,
- const WasmTable* table) {
+ const WabtLocation* loc,
+ const WabtTable* table) {
if (ctx->current_table_index == 1)
print_error(ctx, loc, "only one table allowed");
check_limits(ctx, loc, &table->elem_limits, UINT32_MAX, "elems");
}
-static void check_elem_segments(Context* ctx, const WasmModule* module) {
- WasmModuleField* field;
+static void check_elem_segments(Context* ctx, const WabtModule* module) {
+ WabtModuleField* field;
for (field = module->first_field; field; field = field->next) {
- if (field->type != WASM_MODULE_FIELD_TYPE_ELEM_SEGMENT)
+ if (field->type != WABT_MODULE_FIELD_TYPE_ELEM_SEGMENT)
continue;
- WasmElemSegment* elem_segment = &field->elem_segment;
- const WasmTable* table;
- if (!WASM_SUCCEEDED(
+ WabtElemSegment* elem_segment = &field->elem_segment;
+ const WabtTable* table;
+ if (!WABT_SUCCEEDED(
check_table_var(ctx, &elem_segment->table_var, &table)))
continue;
size_t i;
for (i = 0; i < elem_segment->vars.size; ++i) {
- if (!WASM_SUCCEEDED(
+ if (!WABT_SUCCEEDED(
check_func_var(ctx, &elem_segment->vars.data[i], NULL)))
continue;
}
- check_const_init_expr(ctx, &field->loc, elem_segment->offset, WASM_TYPE_I32,
+ check_const_init_expr(ctx, &field->loc, elem_segment->offset, WABT_TYPE_I32,
"elem segment offset");
}
}
static void check_memory(Context* ctx,
- const WasmLocation* loc,
- const WasmMemory* memory) {
+ const WabtLocation* loc,
+ const WabtMemory* memory) {
if (ctx->current_memory_index == 1)
print_error(ctx, loc, "only one memory block allowed");
- check_limits(ctx, loc, &memory->page_limits, WASM_MAX_PAGES, "pages");
+ check_limits(ctx, loc, &memory->page_limits, WABT_MAX_PAGES, "pages");
}
-static void check_data_segments(Context* ctx, const WasmModule* module) {
- WasmModuleField* field;
+static void check_data_segments(Context* ctx, const WabtModule* module) {
+ WabtModuleField* field;
for (field = module->first_field; field; field = field->next) {
- if (field->type != WASM_MODULE_FIELD_TYPE_DATA_SEGMENT)
+ if (field->type != WABT_MODULE_FIELD_TYPE_DATA_SEGMENT)
continue;
- WasmDataSegment* data_segment = &field->data_segment;
- const WasmMemory* memory;
- if (!WASM_SUCCEEDED(
+ WabtDataSegment* data_segment = &field->data_segment;
+ const WabtMemory* memory;
+ if (!WABT_SUCCEEDED(
check_memory_var(ctx, &data_segment->memory_var, &memory)))
continue;
- check_const_init_expr(ctx, &field->loc, data_segment->offset, WASM_TYPE_I32,
+ check_const_init_expr(ctx, &field->loc, data_segment->offset, WABT_TYPE_I32,
"data segment offset");
}
}
static void check_import(Context* ctx,
- const WasmLocation* loc,
- const WasmImport* import) {
+ const WabtLocation* loc,
+ const WabtImport* import) {
switch (import->kind) {
- case WASM_EXTERNAL_KIND_FUNC:
- if (wasm_decl_has_func_type(&import->func.decl))
+ case WABT_EXTERNAL_KIND_FUNC:
+ if (wabt_decl_has_func_type(&import->func.decl))
check_func_type_var(ctx, &import->func.decl.type_var, NULL);
break;
- case WASM_EXTERNAL_KIND_TABLE:
+ case WABT_EXTERNAL_KIND_TABLE:
check_table(ctx, loc, &import->table);
ctx->current_table_index++;
break;
- case WASM_EXTERNAL_KIND_MEMORY:
+ case WABT_EXTERNAL_KIND_MEMORY:
check_memory(ctx, loc, &import->memory);
ctx->current_memory_index++;
break;
- case WASM_EXTERNAL_KIND_GLOBAL:
+ case WABT_EXTERNAL_KIND_GLOBAL:
if (import->global.mutable_) {
print_error(ctx, loc, "mutable globals cannot be imported");
}
ctx->num_imported_globals++;
ctx->current_global_index++;
break;
- case WASM_NUM_EXTERNAL_KINDS:
+ case WABT_NUM_EXTERNAL_KINDS:
assert(0);
break;
}
}
-static void check_export(Context* ctx, const WasmExport* export_) {
+static void check_export(Context* ctx, const WabtExport* export_) {
switch (export_->kind) {
- case WASM_EXTERNAL_KIND_FUNC:
+ case WABT_EXTERNAL_KIND_FUNC:
check_func_var(ctx, &export_->var, NULL);
break;
- case WASM_EXTERNAL_KIND_TABLE:
+ case WABT_EXTERNAL_KIND_TABLE:
check_table_var(ctx, &export_->var, NULL);
break;
- case WASM_EXTERNAL_KIND_MEMORY:
+ case WABT_EXTERNAL_KIND_MEMORY:
check_memory_var(ctx, &export_->var, NULL);
break;
- case WASM_EXTERNAL_KIND_GLOBAL: {
- const WasmGlobal* global;
- if (WASM_SUCCEEDED(check_global_var(ctx, &export_->var, &global, NULL))) {
+ case WABT_EXTERNAL_KIND_GLOBAL: {
+ const WabtGlobal* global;
+ if (WABT_SUCCEEDED(check_global_var(ctx, &export_->var, &global, NULL))) {
if (global->mutable_) {
print_error(ctx, &export_->var.loc,
"mutable globals cannot be exported");
@@ -1016,32 +1016,32 @@ static void check_export(Context* ctx, const WasmExport* export_) {
}
break;
}
- case WASM_NUM_EXTERNAL_KINDS:
+ case WABT_NUM_EXTERNAL_KINDS:
assert(0);
break;
}
}
-static void on_duplicate_binding(WasmBindingHashEntry* a,
- WasmBindingHashEntry* b,
+static void on_duplicate_binding(WabtBindingHashEntry* a,
+ WabtBindingHashEntry* b,
void* user_data) {
Context* ctx = user_data;
/* choose the location that is later in the file */
- WasmLocation* a_loc = &a->binding.loc;
- WasmLocation* b_loc = &b->binding.loc;
- WasmLocation* loc = a_loc->line > b_loc->line ? a_loc : b_loc;
+ WabtLocation* a_loc = &a->binding.loc;
+ WabtLocation* b_loc = &b->binding.loc;
+ WabtLocation* loc = a_loc->line > b_loc->line ? a_loc : b_loc;
print_error(ctx, loc, "redefinition of export \"" PRIstringslice "\"",
- WASM_PRINTF_STRING_SLICE_ARG(a->binding.name));
+ WABT_PRINTF_STRING_SLICE_ARG(a->binding.name));
}
static void check_duplicate_export_bindings(Context* ctx,
- const WasmModule* module) {
- wasm_find_duplicate_bindings(&module->export_bindings, on_duplicate_binding,
+ const WabtModule* module) {
+ wabt_find_duplicate_bindings(&module->export_bindings, on_duplicate_binding,
ctx);
}
-static void check_module(Context* ctx, const WasmModule* module) {
- WasmBool seen_start = WASM_FALSE;
+static void check_module(Context* ctx, const WabtModule* module) {
+ WabtBool seen_start = WABT_FALSE;
ctx->current_module = module;
ctx->current_table_index = 0;
@@ -1049,65 +1049,65 @@ static void check_module(Context* ctx, const WasmModule* module) {
ctx->current_global_index = 0;
ctx->num_imported_globals = 0;
- WasmModuleField* field;
+ WabtModuleField* field;
for (field = module->first_field; field != NULL; field = field->next) {
switch (field->type) {
- case WASM_MODULE_FIELD_TYPE_FUNC:
+ case WABT_MODULE_FIELD_TYPE_FUNC:
check_func(ctx, &field->loc, &field->func);
break;
- case WASM_MODULE_FIELD_TYPE_GLOBAL:
+ case WABT_MODULE_FIELD_TYPE_GLOBAL:
check_global(ctx, &field->loc, &field->global);
ctx->current_global_index++;
break;
- case WASM_MODULE_FIELD_TYPE_IMPORT:
+ case WABT_MODULE_FIELD_TYPE_IMPORT:
check_import(ctx, &field->loc, &field->import);
break;
- case WASM_MODULE_FIELD_TYPE_EXPORT:
+ case WABT_MODULE_FIELD_TYPE_EXPORT:
check_export(ctx, &field->export_);
break;
- case WASM_MODULE_FIELD_TYPE_TABLE:
+ case WABT_MODULE_FIELD_TYPE_TABLE:
check_table(ctx, &field->loc, &field->table);
ctx->current_table_index++;
break;
- case WASM_MODULE_FIELD_TYPE_ELEM_SEGMENT:
+ case WABT_MODULE_FIELD_TYPE_ELEM_SEGMENT:
/* checked below */
break;
- case WASM_MODULE_FIELD_TYPE_MEMORY:
+ case WABT_MODULE_FIELD_TYPE_MEMORY:
check_memory(ctx, &field->loc, &field->memory);
ctx->current_memory_index++;
break;
- case WASM_MODULE_FIELD_TYPE_DATA_SEGMENT:
+ case WABT_MODULE_FIELD_TYPE_DATA_SEGMENT:
/* checked below */
break;
- case WASM_MODULE_FIELD_TYPE_FUNC_TYPE:
+ case WABT_MODULE_FIELD_TYPE_FUNC_TYPE:
break;
- case WASM_MODULE_FIELD_TYPE_START: {
+ case WABT_MODULE_FIELD_TYPE_START: {
if (seen_start) {
print_error(ctx, &field->loc, "only one start function allowed");
}
- const WasmFunc* start_func = NULL;
+ const WabtFunc* start_func = NULL;
check_func_var(ctx, &field->start, &start_func);
if (start_func) {
- if (wasm_get_num_params(start_func) != 0) {
+ if (wabt_get_num_params(start_func) != 0) {
print_error(ctx, &field->loc, "start function must be nullary");
}
- if (wasm_get_num_results(start_func) != 0) {
+ if (wabt_get_num_results(start_func) != 0) {
print_error(ctx, &field->loc,
"start function must not return anything");
}
}
- seen_start = WASM_TRUE;
+ seen_start = WABT_TRUE;
break;
}
}
@@ -1121,32 +1121,32 @@ static void check_module(Context* ctx, const WasmModule* module) {
/* returns the result type of the invoked function, checked by the caller;
* returning NULL means that another error occured first, so the result type
* should be ignored. */
-static const WasmTypeVector* check_invoke(Context* ctx,
- const WasmAction* action) {
- const WasmActionInvoke* invoke = &action->invoke;
- const WasmModule* module =
- wasm_get_module_by_var(ctx->script, &action->module_var);
+static const WabtTypeVector* check_invoke(Context* ctx,
+ const WabtAction* action) {
+ const WabtActionInvoke* invoke = &action->invoke;
+ const WabtModule* module =
+ wabt_get_module_by_var(ctx->script, &action->module_var);
if (!module) {
print_error(ctx, &action->loc, "unknown module");
return NULL;
}
- WasmExport* export = wasm_get_export_by_name(module, &invoke->name);
+ WabtExport* export = wabt_get_export_by_name(module, &invoke->name);
if (!export) {
print_error(ctx, &action->loc,
"unknown function export \"" PRIstringslice "\"",
- WASM_PRINTF_STRING_SLICE_ARG(invoke->name));
+ WABT_PRINTF_STRING_SLICE_ARG(invoke->name));
return NULL;
}
- WasmFunc* func = wasm_get_func_by_var(module, &export->var);
+ WabtFunc* func = wabt_get_func_by_var(module, &export->var);
if (!func) {
/* this error will have already been reported, just skip it */
return NULL;
}
size_t actual_args = invoke->args.size;
- size_t expected_args = wasm_get_num_params(func);
+ size_t expected_args = wabt_get_num_params(func);
if (expected_args != actual_args) {
print_error(ctx, &action->loc, "too %s parameters to function. got %" PRIzd
", expected %" PRIzd,
@@ -1156,56 +1156,56 @@ static const WasmTypeVector* check_invoke(Context* ctx,
}
size_t i;
for (i = 0; i < actual_args; ++i) {
- WasmConst* const_ = &invoke->args.data[i];
+ WabtConst* const_ = &invoke->args.data[i];
check_type_index(ctx, &const_->loc, const_->type,
- wasm_get_param_type(func, i), "invoke", i, "argument");
+ wabt_get_param_type(func, i), "invoke", i, "argument");
}
return &func->decl.sig.result_types;
}
-static WasmResult check_get(Context* ctx,
- const WasmAction* action,
- WasmType* out_type) {
- const WasmActionGet* get = &action->get;
- const WasmModule* module =
- wasm_get_module_by_var(ctx->script, &action->module_var);
+static WabtResult check_get(Context* ctx,
+ const WabtAction* action,
+ WabtType* out_type) {
+ const WabtActionGet* get = &action->get;
+ const WabtModule* module =
+ wabt_get_module_by_var(ctx->script, &action->module_var);
if (!module) {
print_error(ctx, &action->loc, "unknown module");
- return WASM_ERROR;
+ return WABT_ERROR;
}
- WasmExport* export = wasm_get_export_by_name(module, &get->name);
+ WabtExport* export = wabt_get_export_by_name(module, &get->name);
if (!export) {
print_error(ctx, &action->loc,
"unknown global export \"" PRIstringslice "\"",
- WASM_PRINTF_STRING_SLICE_ARG(get->name));
- return WASM_ERROR;
+ WABT_PRINTF_STRING_SLICE_ARG(get->name));
+ return WABT_ERROR;
}
- WasmGlobal* global = wasm_get_global_by_var(module, &export->var);
+ WabtGlobal* global = wabt_get_global_by_var(module, &export->var);
if (!global) {
/* this error will have already been reported, just skip it */
- return WASM_ERROR;
+ return WABT_ERROR;
}
*out_type = global->type;
- return WASM_OK;
+ return WABT_OK;
}
-static ActionResult check_action(Context* ctx, const WasmAction* action) {
+static ActionResult check_action(Context* ctx, const WabtAction* action) {
ActionResult result;
- WASM_ZERO_MEMORY(result);
+ WABT_ZERO_MEMORY(result);
switch (action->type) {
- case WASM_ACTION_TYPE_INVOKE:
+ case WABT_ACTION_TYPE_INVOKE:
result.types = check_invoke(ctx, action);
result.kind =
result.types ? ACTION_RESULT_KIND_TYPES : ACTION_RESULT_KIND_ERROR;
break;
- case WASM_ACTION_TYPE_GET:
- if (WASM_SUCCEEDED(check_get(ctx, action, &result.type)))
+ case WABT_ACTION_TYPE_GET:
+ if (WABT_SUCCEEDED(check_get(ctx, action, &result.type)))
result.kind = ACTION_RESULT_KIND_TYPE;
else
result.kind = ACTION_RESULT_KIND_ERROR;
@@ -1215,28 +1215,28 @@ static ActionResult check_action(Context* ctx, const WasmAction* action) {
return result;
}
-static void check_command(Context* ctx, const WasmCommand* command) {
+static void check_command(Context* ctx, const WabtCommand* command) {
switch (command->type) {
- case WASM_COMMAND_TYPE_MODULE:
+ case WABT_COMMAND_TYPE_MODULE:
check_module(ctx, &command->module);
break;
- case WASM_COMMAND_TYPE_ACTION:
+ case WABT_COMMAND_TYPE_ACTION:
/* ignore result type */
check_action(ctx, &command->action);
break;
- case WASM_COMMAND_TYPE_REGISTER:
- case WASM_COMMAND_TYPE_ASSERT_MALFORMED:
- case WASM_COMMAND_TYPE_ASSERT_INVALID:
- case WASM_COMMAND_TYPE_ASSERT_INVALID_NON_BINARY:
- case WASM_COMMAND_TYPE_ASSERT_UNLINKABLE:
- case WASM_COMMAND_TYPE_ASSERT_UNINSTANTIABLE:
+ case WABT_COMMAND_TYPE_REGISTER:
+ case WABT_COMMAND_TYPE_ASSERT_MALFORMED:
+ case WABT_COMMAND_TYPE_ASSERT_INVALID:
+ case WABT_COMMAND_TYPE_ASSERT_INVALID_NON_BINARY:
+ case WABT_COMMAND_TYPE_ASSERT_UNLINKABLE:
+ case WABT_COMMAND_TYPE_ASSERT_UNINSTANTIABLE:
/* ignore */
break;
- case WASM_COMMAND_TYPE_ASSERT_RETURN: {
- const WasmAction* action = &command->assert_return.action;
+ case WABT_COMMAND_TYPE_ASSERT_RETURN: {
+ const WabtAction* action = &command->assert_return.action;
ActionResult result = check_action(ctx, action);
switch (result.kind) {
case ACTION_RESULT_KIND_TYPES:
@@ -1256,12 +1256,12 @@ static void check_command(Context* ctx, const WasmCommand* command) {
break;
}
- case WASM_COMMAND_TYPE_ASSERT_RETURN_NAN: {
- const WasmAction* action = &command->assert_return_nan.action;
+ case WABT_COMMAND_TYPE_ASSERT_RETURN_NAN: {
+ const WabtAction* action = &command->assert_return_nan.action;
ActionResult result = check_action(ctx, action);
/* a valid result type will either be f32 or f64; convert a TYPES result
- * into a TYPE result, so it is easier to check below. WASM_TYPE_ANY is
+ * into a TYPE result, so it is easier to check below. WABT_TYPE_ANY is
* used to specify a type that should not be checked (because an earlier
* error occurred). */
if (result.kind == ACTION_RESULT_KIND_TYPES) {
@@ -1271,46 +1271,46 @@ static void check_command(Context* ctx, const WasmCommand* command) {
} else {
print_error(ctx, &action->loc, "expected 1 result, got %" PRIzd,
result.types->size);
- result.type = WASM_TYPE_ANY;
+ result.type = WABT_TYPE_ANY;
}
}
if (result.kind == ACTION_RESULT_KIND_TYPE &&
- result.type != WASM_TYPE_ANY)
+ result.type != WABT_TYPE_ANY)
check_assert_return_nan_type(ctx, &action->loc, result.type, "action");
break;
}
- case WASM_COMMAND_TYPE_ASSERT_TRAP:
- case WASM_COMMAND_TYPE_ASSERT_EXHAUSTION:
+ case WABT_COMMAND_TYPE_ASSERT_TRAP:
+ case WABT_COMMAND_TYPE_ASSERT_EXHAUSTION:
/* ignore result type */
check_action(ctx, &command->assert_trap.action);
break;
- case WASM_NUM_COMMAND_TYPES:
+ case WABT_NUM_COMMAND_TYPES:
assert(0);
break;
}
}
-static void wasm_destroy_context(Context* ctx) {
- wasm_destroy_type_vector(ctx->allocator, &ctx->type_stack);
+static void wabt_destroy_context(Context* ctx) {
+ wabt_destroy_type_vector(ctx->allocator, &ctx->type_stack);
}
-WasmResult wasm_validate_script(WasmAllocator* allocator,
- WasmAstLexer* lexer,
- const struct WasmScript* script,
- WasmSourceErrorHandler* error_handler) {
+WabtResult wabt_validate_script(WabtAllocator* allocator,
+ WabtAstLexer* lexer,
+ const struct WabtScript* script,
+ WabtSourceErrorHandler* error_handler) {
Context ctx;
- WASM_ZERO_MEMORY(ctx);
+ WABT_ZERO_MEMORY(ctx);
ctx.allocator = allocator;
ctx.lexer = lexer;
ctx.error_handler = error_handler;
- ctx.result = WASM_OK;
+ ctx.result = WABT_OK;
ctx.script = script;
size_t i;
for (i = 0; i < script->commands.size; ++i)
check_command(&ctx, &script->commands.data[i]);
- wasm_destroy_context(&ctx);
+ wabt_destroy_context(&ctx);
return ctx.result;
}