bh_table(i32) type_map;
bh_table(u32) loaded_file_offsets;
+ bh_table(u32) string_literals;
bh_arr(u8) structured_jump_target;
m :: n % base;
ch := cast(u8) 0;
- if m == 0l do ch = #char "0";
- if m == 1l do ch = #char "1";
- if m == 2l do ch = #char "2";
- if m == 3l do ch = #char "3";
- if m == 4l do ch = #char "4";
- if m == 5l do ch = #char "5";
- if m == 6l do ch = #char "6";
- if m == 7l do ch = #char "7";
- if m == 8l do ch = #char "8";
- if m == 9l do ch = #char "9";
- if m == 10l do ch = #char "A";
- if m == 11l do ch = #char "B";
- if m == 12l do ch = #char "C";
- if m == 13l do ch = #char "D";
- if m == 14l do ch = #char "E";
- if m == 15l do ch = #char "F";
+
+ // TODO: Replace with array lookup when array literals are added
+ if m == 0l do ch = #char "0";
+ elseif m == 1l do ch = #char "1";
+ elseif m == 2l do ch = #char "2";
+ elseif m == 3l do ch = #char "3";
+ elseif m == 4l do ch = #char "4";
+ elseif m == 5l do ch = #char "5";
+ elseif m == 6l do ch = #char "6";
+ elseif m == 7l do ch = #char "7";
+ elseif m == 8l do ch = #char "8";
+ elseif m == 9l do ch = #char "9";
+ elseif m == 10l do ch = #char "A";
+ elseif m == 11l do ch = #char "B";
+ elseif m == 12l do ch = #char "C";
+ elseif m == 13l do ch = #char "D";
+ elseif m == 14l do ch = #char "E";
+ elseif m == 15l do ch = #char "F";
*c = ch;
c -= 1;
start :: proc #export {
heap_init();
print("Hello, World!");
+ print("Hello, World!");
print_ptr(__heap_start);
print_ptr(__stack_base);
print_ptr(__stack_top);
|| binop->operation == Binary_Op_Bool_Or)
return check_binaryop_bool(binop);
+ if (binop->left->type == NULL) {
+ onyx_message_add(Msg_Type_Unresolved_Type,
+ binop->token->pos,
+ binop->left->token->text, binop->left->token->length);
+ return 1;
+ }
+
+ if (binop->right->type == NULL) {
+ onyx_message_add(Msg_Type_Unresolved_Type,
+ binop->token->pos,
+ binop->right->token->text, binop->right->token->length);
+ return 1;
+ }
+
if (!type_is_numeric(binop->left->type) && !type_is_pointer(binop->left->type)) {
onyx_message_add(Msg_Type_Literal,
binop->token->pos,
return 1;
}
- if (binop->left->type == NULL) {
- onyx_message_add(Msg_Type_Unresolved_Type,
- binop->token->pos,
- binop->left->token->text, binop->left->token->length);
- return 1;
- }
-
- if (binop->right->type == NULL) {
- onyx_message_add(Msg_Type_Unresolved_Type,
- binop->token->pos,
- binop->right->token->text, binop->right->token->length);
- return 1;
- }
-
if (lptr) {
if (!type_is_integer(binop->right->type)) {
onyx_message_add(Msg_Type_Literal,
}
*des++ = '\0';
+ if (bh_table_has(u32, mod->string_literals, (char *) strdata)) {
+ strlit->addr = bh_table_get(u32, mod->string_literals, (char *) strdata);
+ return;
+ }
+
u32 length = (u32) (des - strdata);
WasmDatum datum = {
strlit->addr = (u32) mod->next_datum_offset,
mod->next_datum_offset += length;
+ bh_table_put(u32, mod->string_literals, (char *) strdata, strlit->addr);
+
bh_arr_push(mod->data, datum);
}
bh_table_init(global_heap_allocator, module.type_map, 61);
bh_table_init(global_heap_allocator, module.exports, 61);
bh_table_init(global_heap_allocator, module.loaded_file_offsets, 7);
+ bh_table_init(global_heap_allocator, module.string_literals, 16);
bh_imap_init(&module.index_map, global_heap_allocator, 128);
bh_imap_init(&module.local_map, global_heap_allocator, 16);