From 3a6002b5b7efd05e637bd0c7ac45ea910cd458fc Mon Sep 17 00:00:00 2001 From: Brendan Hansen Date: Thu, 18 Jun 2020 15:13:24 -0500 Subject: [PATCH] Added numeric literals and changes to bh_imap --- docs/plan | 6 ++- include/bh.h | 104 ++++++++++++++++++++++++++----------------- include/onyxlex.h | 2 +- include/onyxparser.h | 12 +++++ include/onyxwasm.h | 4 +- onyx | Bin 144440 -> 149968 bytes progs/minimal.onyx | 6 +-- src/onyxlex.c | 5 +++ src/onyxparser.c | 50 +++++++++++++++++---- src/onyxutils.c | 2 +- src/onyxwasm.c | 74 +++++++++++++++++------------- 11 files changed, 178 insertions(+), 87 deletions(-) diff --git a/docs/plan b/docs/plan index b297a650..66c9d3f8 100644 --- a/docs/plan +++ b/docs/plan @@ -53,8 +53,8 @@ HOW: casts X to type T [X] Curly braces are required for all bodies of blocks - [ ] Numeric literals are parsed - [ ] Numeric literals have the minimum type detected (automatically upcasts) + [X] Numeric literals are parsed + [X] Numeric literals have the minimum type detected [ ] Comparison operators [ ] Proper boolean type [ ] Conditional branching works as expected @@ -75,6 +75,8 @@ HOW: This could be slow but it would be easier than creating a graph scheduling algorithm. + [ ] Consequence of the above, recursion works + [ ] Devise and implement a simple set of implicit type casting rules. - Numeric literals always type cast to whatever type is needed (very flexible). diff --git a/include/bh.h b/include/bh.h index 687b51ab..38b7fa11 100644 --- a/include/bh.h +++ b/include/bh.h @@ -112,8 +112,8 @@ inline i64 chars_match(char* ptr1, char* ptr2) { // Converts an unsigned integer to the unsigned LEB128 format u8* uint_to_uleb128(u64 n, i32* output_length); u8* int_to_leb128(i64 n, i32* output_length); -u8* float_to_ieee754(f32 f); -u8* double_to_ieee754(f64 f); +u8* float_to_ieee754(f32 f, b32 reverse); +u8* double_to_ieee754(f64 f, b32 reverse); @@ -625,24 +625,25 @@ b32 bh_table_iter_next(bh_table_iterator* it); //------------------------------------------------------------------------------- #ifndef BH_NO_IMAP -typedef u64 bh_imap_key_t; +typedef u64 bh_imap_entry_t; typedef struct bh__imap_entry { - bh_imap_key_t key, value; + bh_imap_entry_t key, value; } bh__imap_entry; typedef struct bh_imap { bh_allocator allocator; - bh_arr(bh__imap_entry) keys; + bh_arr(bh__imap_entry) entries; } bh_imap; void bh_imap_init(bh_imap* imap, bh_allocator alloc); void bh_imap_free(bh_imap* imap); -void bh_imap_put(bh_imap* imap, bh_imap_key_t key, bh_imap_key_t value); -b32 bh_imap_has(bh_imap* imap, bh_imap_key_t key); -bh_imap_key_t bh_imap_get(bh_imap* imap, bh_imap_key_t key); -void bh_imap_delete(bh_imap* imap, bh_imap_key_t key); +void bh_imap_put(bh_imap* imap, bh_imap_entry_t key, bh_imap_entry_t value); +b32 bh_imap_has(bh_imap* imap, bh_imap_entry_t key); +bh_imap_entry_t bh_imap_get(bh_imap* imap, bh_imap_entry_t key); +void bh_imap_delete(bh_imap* imap, bh_imap_entry_t key); +void bh_imap_clear(bh_imap* imap); #ifdef BH_DEFINE #endif // BH_DEFINE @@ -983,30 +984,48 @@ u8* int_to_leb128(i64 n, i32* output_length) { // NOTE: This assumes the underlying implementation of float on the host // system is already IEEE-754. This is safe to assume in most cases. -u8* float_to_ieee754(f32 f) { +u8* float_to_ieee754(f32 f, b32 reverse) { static u8 buffer[4]; u8* fmem = (u8*) &f; - buffer[0] = fmem[3]; - buffer[1] = fmem[2]; - buffer[2] = fmem[1]; - buffer[3] = fmem[0]; + if (reverse) { + buffer[0] = fmem[3]; + buffer[1] = fmem[2]; + buffer[2] = fmem[1]; + buffer[3] = fmem[0]; + } else { + buffer[0] = fmem[0]; + buffer[1] = fmem[1]; + buffer[2] = fmem[2]; + buffer[3] = fmem[3]; + } return buffer; } -u8* double_to_ieee754(f64 f) { +u8* double_to_ieee754(f64 f, b32 reverse) { static u8 buffer[8]; u8* fmem = (u8*) &f; - buffer[0] = fmem[7]; - buffer[1] = fmem[6]; - buffer[2] = fmem[5]; - buffer[3] = fmem[4]; - buffer[4] = fmem[3]; - buffer[5] = fmem[2]; - buffer[6] = fmem[1]; - buffer[7] = fmem[0]; + if (reverse) { + buffer[0] = fmem[7]; + buffer[1] = fmem[6]; + buffer[2] = fmem[5]; + buffer[3] = fmem[4]; + buffer[4] = fmem[3]; + buffer[5] = fmem[2]; + buffer[6] = fmem[1]; + buffer[7] = fmem[0]; + } else { + buffer[0] = fmem[0]; + buffer[1] = fmem[1]; + buffer[2] = fmem[2]; + buffer[3] = fmem[3]; + buffer[4] = fmem[4]; + buffer[5] = fmem[5]; + buffer[6] = fmem[6]; + buffer[7] = fmem[7]; + } return buffer; } @@ -1920,25 +1939,25 @@ step_to_next: #ifndef BH_NO_IMAP void bh_imap_init(bh_imap* imap, bh_allocator alloc) { imap->allocator = alloc; - imap->keys = NULL; + imap->entries = NULL; - bh_arr_new(alloc, imap->keys, 4); + bh_arr_new(alloc, imap->entries, 4); } void bh_imap_free(bh_imap* imap) { - bh_arr_free(imap->keys); - imap->keys = NULL; + bh_arr_free(imap->entries); + imap->entries = NULL; } -b32 bh__imap_get_index(bh_imap* imap, bh_imap_key_t key, i32* pos) { +b32 bh__imap_get_index(bh_imap* imap, bh_imap_entry_t key, i32* pos) { i32 low = 0; - i32 high = bh_arr_length(imap->keys); + i32 high = bh_arr_length(imap->entries); i32 middle = 0; bh__imap_entry tmp; while (high > low) { middle = (high + low) / 2; - tmp = imap->keys[middle]; + tmp = imap->entries[middle]; if (tmp.key == key) { if (pos) *pos = middle; @@ -1955,43 +1974,48 @@ b32 bh__imap_get_index(bh_imap* imap, bh_imap_key_t key, i32* pos) { return 0; } -void bh_imap_put(bh_imap* imap, bh_imap_key_t key, bh_imap_key_t value) { +void bh_imap_put(bh_imap* imap, bh_imap_entry_t key, bh_imap_entry_t value) { i32 middle = 0; b32 found_existing = bh__imap_get_index(imap, key, &middle); if (found_existing) { - imap->keys[middle].value = value; + imap->entries[middle].value = value; } else { - bh_arr_insertn(imap->keys, middle, 1); - imap->keys[middle].key = key; - imap->keys[middle].value = value; + bh_arr_insertn(imap->entries, middle, 1); + imap->entries[middle].key = key; + imap->entries[middle].value = value; } } -b32 bh_imap_has(bh_imap* imap, bh_imap_key_t key) { +b32 bh_imap_has(bh_imap* imap, bh_imap_entry_t key) { return bh__imap_get_index(imap, key, NULL); } -bh_imap_key_t bh_imap_get(bh_imap* imap, bh_imap_key_t key) { +bh_imap_entry_t bh_imap_get(bh_imap* imap, bh_imap_entry_t key) { i32 middle = 0; b32 found_existing = bh__imap_get_index(imap, key, &middle); if (found_existing) { - return imap->keys[middle].value; + return imap->entries[middle].value; } else { return 0; } } -void bh_imap_delete(bh_imap* imap, bh_imap_key_t key) { +void bh_imap_delete(bh_imap* imap, bh_imap_entry_t key) { i32 middle = 0; b32 found_existing = bh__imap_get_index(imap, key, &middle); if (found_existing) { - bh_arr_deleten(imap->keys, middle, 1); + bh_arr_deleten(imap->entries, middle, 1); } } +void bh_imap_clear(bh_imap* imap) { + // NOTE: Does not clear out an of the data that was in the map + bh_arr_set_length(imap->entries, 0); +} + #endif // ifndef BH_NO_IMAP #endif // ifdef BH_DEFINE diff --git a/include/onyxlex.h b/include/onyxlex.h index 366465ab..97754648 100644 --- a/include/onyxlex.h +++ b/include/onyxlex.h @@ -65,7 +65,7 @@ typedef struct OnyxFilePos { typedef struct OnyxToken { OnyxTokenType type; - isize length; + i32 length; char* token; OnyxFilePos pos; } OnyxToken; diff --git a/include/onyxparser.h b/include/onyxparser.h index 47786d40..80690f2f 100644 --- a/include/onyxparser.h +++ b/include/onyxparser.h @@ -7,6 +7,7 @@ #include "onyxmsgs.h" typedef union OnyxAstNode OnyxAstNode; +typedef struct OnyxAstNodeNumLit OnyxAstNodeNumLit; typedef struct OnyxAstNodeLocal OnyxAstNodeLocal; typedef struct OnyxAstNodeScope OnyxAstNodeScope; typedef struct OnyxAstNodeBlock OnyxAstNodeBlock; @@ -111,6 +112,16 @@ typedef enum OnyxAstFlags { ONYX_AST_FLAG_COMPTIME = BH_BIT(3), } OnyxAstFlags; +struct OnyxAstNodeNumLit { + OnyxAstNodeKind kind; + u32 flags; + OnyxToken *token; + OnyxTypeInfo *type; + OnyxAstNode *next; + union { i32 i; i64 l; f32 f; f64 d; } value; + ptr unused; +}; + struct OnyxAstNodeLocal { OnyxAstNodeKind kind; u32 flags; @@ -193,6 +204,7 @@ union OnyxAstNode { OnyxAstNodeLocal as_local; OnyxAstNodeScope as_scope; OnyxAstNodeCall as_call; + OnyxAstNodeNumLit as_numlit; }; const char* onyx_ast_node_kind_string(OnyxAstNodeKind kind); diff --git a/include/onyxwasm.h b/include/onyxwasm.h index 52e0c74a..c8482ada 100644 --- a/include/onyxwasm.h +++ b/include/onyxwasm.h @@ -264,8 +264,8 @@ typedef struct WasmExport { typedef struct OnyxWasmModule { bh_allocator allocator; - // NOTE: Mapping to local indicies currently in scope. - bh_table(i32) local_map; + // NOTE: Mapping from local ast node ptrs to indicies + bh_imap local_map; // NOTE: Used internally as a map from strings that represent function types, // 0x7f 0x7f : 0x7f ( (i32, i32) -> i32 ) diff --git a/onyx b/onyx index cbaebf60c297e57c8c59b1e6365c1cc2420cfaf0..944178d4425bfbc47110af7efa3e051240acdc11 100755 GIT binary patch literal 149968 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 literal 144440 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%0A1`&y6{RqWIloMzot*QF@+Q;a81}%C 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 z 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 SE-IC8zFy1UURI#&HuzV`0Q3I< diff --git a/progs/minimal.onyx b/progs/minimal.onyx index e19b7ed2..8b153fc7 100644 --- a/progs/minimal.onyx +++ b/progs/minimal.onyx @@ -14,12 +14,12 @@ diff_square :: proc (a i32, b i32) -> i32 { return (c * d) as i32; } -export do_stuff :: proc () -> i32 { - res := diff_square((2 + 3) as i32, (4 + 5) as i32); +export do_stuff :: proc -> i32 { + res := diff_square((4 + 5) as i32, (2 + 3) as i32); res = res + foo(); return res; } -export main :: proc () { +export main :: proc { output :: do_stuff(); } diff --git a/src/onyxlex.c b/src/onyxlex.c index 9e9a0104..d0069690 100644 --- a/src/onyxlex.c +++ b/src/onyxlex.c @@ -223,6 +223,11 @@ OnyxToken* onyx_get_token(OnyxTokenizer* tokenizer) { INCREMENT_CURR_TOKEN(tokenizer); } + if (*(tokenizer->curr + 1) == 'f') { + len++; + INCREMENT_CURR_TOKEN(tokenizer); + } + tk.type = TOKEN_TYPE_LITERAL_NUMERIC; tk.length = len; } diff --git a/src/onyxparser.c b/src/onyxparser.c index b2fa3684..0c5d5dae 100644 --- a/src/onyxparser.c +++ b/src/onyxparser.c @@ -70,6 +70,7 @@ static OnyxAstNodeScope* enter_scope(OnyxParser* parser); static OnyxAstNodeScope* leave_scope(OnyxParser* parser); static void insert_identifier(OnyxParser* parser, OnyxAstNode* ident, b32 is_local); static void remove_identifier(OnyxParser* parser, OnyxAstNode* ident); +static OnyxAstNodeNumLit* parse_numeric_literal(OnyxParser* parser); static OnyxAstNode* parse_factor(OnyxParser* parser); static OnyxAstNode* parse_bin_op(OnyxParser* parser, OnyxAstNode* left); static OnyxAstNode* parse_expression(OnyxParser* parser); @@ -190,6 +191,43 @@ static void remove_identifier(OnyxParser* parser, OnyxAstNode* ident) { onyx_token_null_toggle(*local->token); } +static OnyxAstNodeNumLit* parse_numeric_literal(OnyxParser* parser) { + OnyxAstNodeNumLit* lit_node = (OnyxAstNodeNumLit *) onyx_ast_node_new(parser->allocator, ONYX_AST_NODE_KIND_LITERAL); + lit_node->token = expect(parser, TOKEN_TYPE_LITERAL_NUMERIC); + lit_node->flags |= ONYX_AST_FLAG_COMPTIME; + lit_node->value.l = 0ll; + + onyx_token_null_toggle(*lit_node->token); + + OnyxTypeInfo* type; + char* tok = lit_node->token->token; + + // NOTE: charset_contains() behaves more like string_contains() + // so I'm using it in this case + if (charset_contains(tok, '.')) { + if (tok[lit_node->token->length - 1] == 'f') { + type = &builtin_types[ONYX_TYPE_INFO_KIND_FLOAT32]; + lit_node->value.f = strtof(tok, NULL); + } else { + type = &builtin_types[ONYX_TYPE_INFO_KIND_FLOAT64]; + lit_node->value.d = strtod(tok, NULL); + } + } else { + i64 value = strtoll(tok, NULL, 0); + if (bh_abs(value) < ((u64) 1 << 32)) { + type = &builtin_types[ONYX_TYPE_INFO_KIND_INT32]; + } else { + type = &builtin_types[ONYX_TYPE_INFO_KIND_INT64]; + } + + lit_node->value.l = value; + } + + lit_node->type = type; + onyx_token_null_toggle(*lit_node->token); + return lit_node; +} + static OnyxAstNode* parse_factor(OnyxParser* parser) { switch (parser->curr_token->type) { case TOKEN_TYPE_OPEN_PAREN: @@ -254,14 +292,7 @@ static OnyxAstNode* parse_factor(OnyxParser* parser) { return (OnyxAstNode *) call_node; } - case TOKEN_TYPE_LITERAL_NUMERIC: - { - OnyxAstNode* lit_node = onyx_ast_node_new(parser->allocator, ONYX_AST_NODE_KIND_LITERAL); - lit_node->type = &builtin_types[ONYX_TYPE_INFO_KIND_INT64]; - lit_node->token = expect(parser, TOKEN_TYPE_LITERAL_NUMERIC); - lit_node->flags |= ONYX_AST_FLAG_COMPTIME; - return lit_node; - } + case TOKEN_TYPE_LITERAL_NUMERIC: return (OnyxAstNode *) parse_numeric_literal(parser); default: onyx_message_add(parser->msgs, @@ -585,6 +616,9 @@ static OnyxTypeInfo* parse_type(OnyxParser* parser) { } static OnyxAstNodeParam* parse_function_params(OnyxParser* parser) { + if (parser->curr_token->type != TOKEN_TYPE_OPEN_PAREN) + return NULL; + expect(parser, TOKEN_TYPE_OPEN_PAREN); if (parser->curr_token->type == TOKEN_TYPE_CLOSE_PAREN) { diff --git a/src/onyxutils.c b/src/onyxutils.c index 74aecf9d..055932fd 100644 --- a/src/onyxutils.c +++ b/src/onyxutils.c @@ -97,7 +97,7 @@ void onyx_ast_print(OnyxAstNode* node, i32 indent) { } case ONYX_AST_NODE_KIND_LITERAL: { - bh_printf("%b", node->token->token, node->token->length); + bh_printf("(%s) %b", node->type->name, node->token->token, node->token->length); if (node->next) { onyx_ast_print(node->next, indent); } diff --git a/src/onyxwasm.c b/src/onyxwasm.c index e30fae20..4d768fba 100644 --- a/src/onyxwasm.c +++ b/src/onyxwasm.c @@ -248,9 +248,7 @@ static void process_statement(OnyxWasmModule* mod, WasmFunc* func, OnyxAstNode* static void process_assign_lval(OnyxWasmModule* mod, WasmFunc* func, OnyxAstNode* lval) { if (lval->kind == ONYX_AST_NODE_KIND_LOCAL || lval->kind == ONYX_AST_NODE_KIND_PARAM) { - onyx_token_null_toggle(*lval->token); - i32 localidx = bh_table_get(i32, mod->local_map, lval->token->token); - onyx_token_null_toggle(*lval->token); + i32 localidx = (i32) bh_imap_get(&mod->local_map, (u64) lval); bh_arr_push(func->code, ((WasmInstruction){ WI_LOCAL_SET, localidx })); } else { @@ -338,9 +336,7 @@ static void process_expression(OnyxWasmModule* mod, WasmFunc* func, OnyxAstNode* case ONYX_AST_NODE_KIND_LOCAL: case ONYX_AST_NODE_KIND_PARAM: { - onyx_token_null_toggle(*expr->token); - i32 localidx = bh_table_get(i32, mod->local_map, expr->token->token); - onyx_token_null_toggle(*expr->token); + i32 localidx = (i32) bh_imap_get(&mod->local_map, (u64) expr); bh_arr_push(func->code, ((WasmInstruction){ WI_LOCAL_GET, localidx })); break; @@ -349,10 +345,25 @@ static void process_expression(OnyxWasmModule* mod, WasmFunc* func, OnyxAstNode* case ONYX_AST_NODE_KIND_CAST: process_cast(mod, func, expr); break; case ONYX_AST_NODE_KIND_LITERAL: { - // TODO: Implement proper literal type detection and parsing - i64 value = 0; - - bh_arr_push(func->code, ((WasmInstruction){ WI_I64_CONST, value })); + OnyxAstNodeNumLit* lit = &expr->as_numlit; + WasmType lit_type = onyx_type_to_wasm_type(lit->type); + WasmInstruction instr = { WI_NOP, 0 }; + + if (lit_type == WASM_TYPE_INT32) { + instr.type = WI_I32_CONST; + instr.data.i1 = lit->value.i; + } else if (lit_type == WASM_TYPE_INT64) { + instr.type = WI_I64_CONST; + instr.data.l = lit->value.l; + } else if (lit_type == WASM_TYPE_FLOAT32) { + instr.type = WI_F32_CONST; + instr.data.f = lit->value.f; + } else if (lit_type == WASM_TYPE_FLOAT64) { + instr.type = WI_F64_CONST; + instr.data.d = lit->value.d; + } + + bh_arr_push(func->code, instr); break; } @@ -500,9 +511,7 @@ static void process_function_definition(OnyxWasmModule* mod, OnyxAstNodeFuncDef* // NOTE: Generate the local map i32 localidx = 0; forll (OnyxAstNodeParam, param, fd->params, next) { - onyx_token_null_toggle(*param->token); - bh_table_put(i32, mod->local_map, param->token->token, localidx++); - onyx_token_null_toggle(*param->token); + bh_imap_put(&mod->local_map, (u64) param, localidx++); } static const WasmType local_types[4] = { WASM_TYPE_INT32, WASM_TYPE_INT64, WASM_TYPE_FLOAT32, WASM_TYPE_FLOAT64 }; @@ -513,9 +522,7 @@ static void process_function_definition(OnyxWasmModule* mod, OnyxAstNodeFuncDef* fori (ti, 0, 3) { forll (OnyxAstNodeLocal, local, fd->body->scope->last_local, prev_local) { if (onyx_type_to_wasm_type(local->type) == local_types[ti]) { - onyx_token_null_toggle(*local->token); - bh_table_put(i32, mod->local_map, local->token->token, localidx++); - onyx_token_null_toggle(*local->token); + bh_imap_put(&mod->local_map, (u64) local, localidx++); (*count)++; } @@ -530,7 +537,7 @@ static void process_function_definition(OnyxWasmModule* mod, OnyxAstNodeFuncDef* bh_arr_push(mod->funcs, wasm_func); // NOTE: Clear the local map on exit of generating this function - bh_table_clear(mod->local_map); + bh_imap_clear(&mod->local_map); } OnyxWasmModule onyx_wasm_generate_module(bh_allocator alloc, OnyxAstNode* program) { @@ -551,10 +558,10 @@ OnyxWasmModule onyx_wasm_generate_module(bh_allocator alloc, OnyxAstNode* progra bh_arr_new(alloc, module.functypes, 4); bh_arr_new(alloc, module.funcs, 4); - bh_table_init(bh_heap_allocator(), module.local_map, 61); bh_table_init(bh_heap_allocator(), module.type_map, 61); bh_table_init(bh_heap_allocator(), module.exports, 61); + bh_imap_init(&module.local_map, bh_heap_allocator()); bh_imap_init(&module.func_map, bh_heap_allocator()); OnyxAstNode* walker = program; @@ -575,7 +582,8 @@ OnyxWasmModule onyx_wasm_generate_module(bh_allocator alloc, OnyxAstNode* progra void onyx_wasm_module_free(OnyxWasmModule* module) { bh_arr_free(module->functypes); bh_arr_free(module->funcs); - bh_table_free(module->local_map); + bh_imap_free(&module->local_map); + bh_imap_free(&module->func_map); bh_table_free(module->type_map); bh_table_free(module->exports); } @@ -789,34 +797,40 @@ static i32 output_locals(WasmFunc* func, bh_buffer* buff) { static void output_instruction(WasmInstruction* instr, bh_buffer* buff) { i32 leb_len; u8* leb; + + bh_buffer_write_byte(buff, (u8) instr->type); + switch (instr->type) { case WI_LOCAL_GET: case WI_LOCAL_SET: - bh_buffer_write_byte(buff, (u8) instr->type); + case WI_CALL: leb = uint_to_uleb128((u64) instr->data.i1, &leb_len); bh_buffer_append(buff, leb, leb_len); break; case WI_BLOCK_START: - bh_buffer_write_byte(buff, (u8) instr->type); leb = uint_to_uleb128((u64) instr->data.i1, &leb_len); bh_buffer_append(buff, leb, leb_len); break; case WI_I32_CONST: + leb = int_to_leb128((i64) instr->data.i1, &leb_len); + bh_buffer_append(buff, leb, leb_len); + break; case WI_I64_CONST: - bh_buffer_write_byte(buff, (u8) instr->type); - bh_buffer_write_byte(buff, 0); // TODO: Actually output the literal - break; - - case WI_CALL: - bh_buffer_write_byte(buff, (u8) instr->type); - leb = uint_to_uleb128((u64) instr->data.i1, &leb_len); + leb = int_to_leb128((i64) instr->data.l, &leb_len); bh_buffer_append(buff, leb, leb_len); + break; + case WI_F32_CONST: + leb = float_to_ieee754(instr->data.f, 0); + bh_buffer_append(buff, leb, 4); + break; + case WI_F64_CONST: + leb = double_to_ieee754(instr->data.d, 0); + bh_buffer_append(buff, leb, 8); break; - default: - bh_buffer_write_byte(buff, (u8) instr->type); + default: break; } } -- 2.25.1