os

An operating system
git clone https://erai.gay/code/os/
Log | Files | Refs | README | LICENSE

commit 7ed645936f04bb2db8a3670eb92f6145f66f2df3
parent a6732d93abe8cbe83a6c6d8470be88407a3b573f
Author: erai <erai@omiltem.net>
Date:   Mon, 20 Jan 2025 23:11:56 +0000

run bootstrap

Diffstat:
Mcc0.c | 325++++++++++++++++++++-----------------------------------------------------------
Mcc3.peg | 6++----
2 files changed, 84 insertions(+), 247 deletions(-)

diff --git a/cc0.c b/cc0.c @@ -247,68 +247,67 @@ enum { my_LOOK_AND = 2, my_LOOK_NORMAL = 0, my_LOOK_NOT = 1, - my_N_ADD = 46, - my_N_AND = 54, - my_N_ARGDECL = 13, - my_N_ARGLIST = 11, - my_N_ASSIGN = 34, - my_N_BAND = 53, - my_N_BNOT = 51, - my_N_BOR = 52, - my_N_BREAK = 28, + my_N_ADD = 45, + my_N_AND = 53, + my_N_ARGDECL = 12, + my_N_ARGLIST = 10, + my_N_ASSIGN = 33, + my_N_BAND = 52, + my_N_BNOT = 50, + my_N_BOR = 51, + my_N_BREAK = 27, my_N_CALL = 7, - my_N_CAST = 38, + my_N_CAST = 37, my_N_CHAR = 2, - my_N_COND = 23, - my_N_CONDLIST = 22, - my_N_CONTINUE = 29, - my_N_DEREF = 37, - my_N_DIV = 60, - my_N_DOT = 10, - my_N_ENUM = 24, - my_N_ENUMITEM = 25, - my_N_ENUMLIST = 26, - my_N_EQ = 44, + my_N_COND = 22, + my_N_CONDLIST = 21, + my_N_CONTINUE = 28, + my_N_DEREF = 36, + my_N_DIV = 59, + my_N_DOT = 9, + my_N_ENUM = 23, + my_N_ENUMITEM = 24, + my_N_ENUMLIST = 25, + my_N_EQ = 43, my_N_EXPRLIST = 6, - my_N_FUNC = 12, - my_N_FUNCDECL = 14, - my_N_FUNCTYPE = 16, - my_N_GE = 43, - my_N_GOTO = 33, - my_N_GT = 41, + my_N_FUNC = 11, + my_N_FUNCDECL = 13, + my_N_FUNCTYPE = 15, + my_N_GE = 42, + my_N_GOTO = 32, + my_N_GT = 40, my_N_IDENT = 0, - my_N_INDEX = 39, - my_N_LABEL = 32, - my_N_LE = 42, - my_N_LOOP = 27, - my_N_LSH = 49, - my_N_LT = 40, - my_N_MEMBERDECL = 20, - my_N_MEMBERLIST = 21, - my_N_MOD = 61, - my_N_MUL = 48, - my_N_NE = 45, - my_N_NEG = 59, + my_N_INDEX = 38, + my_N_LABEL = 31, + my_N_LE = 41, + my_N_LOOP = 26, + my_N_LSH = 48, + my_N_LT = 39, + my_N_MEMBERDECL = 19, + my_N_MEMBERLIST = 20, + my_N_MOD = 60, + my_N_MUL = 47, + my_N_NE = 44, + my_N_NEG = 58, my_N_NIL = 4, - my_N_NOT = 57, + my_N_NOT = 56, my_N_NUM = 1, - my_N_OR = 55, - my_N_POS = 58, - my_N_PROGRAM = 15, - my_N_PTRTYPE = 17, - my_N_REF = 36, - my_N_RETURN = 30, - my_N_RSH = 50, - my_N_SIZEOF = 35, + my_N_OR = 54, + my_N_POS = 57, + my_N_PROGRAM = 14, + my_N_PTRTYPE = 16, + my_N_REF = 35, + my_N_RETURN = 29, + my_N_RSH = 49, + my_N_SIZEOF = 34, my_N_STMTLIST = 5, my_N_STR = 3, - my_N_STRUCT = 18, - my_N_SUB = 47, - my_N_TYPECALL = 8, - my_N_TYPELIST = 9, - my_N_UNION = 19, - my_N_VARDECL = 31, - my_N_XOR = 56, + my_N_STRUCT = 17, + my_N_SUB = 46, + my_N_TYPELIST = 8, + my_N_UNION = 18, + my_N_VARDECL = 30, + my_N_XOR = 55, my_ONE_OR_MORE = 3, my_OP_ADCRM = 19, my_OP_ADDI = 129, @@ -410,53 +409,53 @@ enum { my_P_add_op = 38, my_P_and_op = 46, my_P_arg_decl = 10, - my_P_as = 87, + my_P_as = 86, my_P_assign_stmt = 23, my_P_band_op = 28, my_P_bnot_op = 56, my_P_bool_expr = 30, my_P_bor_op = 29, - my_P_break = 72, + my_P_break = 71, my_P_break_stmt = 17, - my_P_byte = 83, + my_P_byte = 82, my_P_call_expr = 59, my_P_cast_expr = 61, - my_P_char = 69, + my_P_char = 68, my_P_comp_expr = 37, my_P_compound_stmt = 26, - my_P_continue = 77, + my_P_continue = 76, my_P_continue_stmt = 18, - my_P_dec = 67, + my_P_dec = 66, my_P_deref_op = 52, my_P_div_op = 44, my_P_elif_stmt = 13, - my_P_else = 75, + my_P_else = 74, my_P_else_stmt = 14, my_P_empty_stmt = 25, - my_P_enum = 80, + my_P_enum = 79, my_P_enum_decl = 2, my_P_enum_item = 1, my_P_eq_op = 35, my_P_expr = 27, my_P_expr_stmt = 24, - my_P_func = 86, + my_P_func = 85, my_P_func_decl = 6, my_P_func_type = 11, my_P_ge_op = 32, my_P_gen_decl = 9, - my_P_goto = 78, + my_P_goto = 77, my_P_goto_stmt = 22, my_P_grammar = 0, my_P_gt_op = 34, - my_P_hex = 66, - my_P_ident = 89, - my_P_if = 74, + my_P_hex = 65, + my_P_ident = 88, + my_P_if = 73, my_P_if_stmt = 15, my_P_index_expr = 58, - my_P_int = 84, + my_P_int = 83, my_P_label_stmt = 21, my_P_le_op = 31, - my_P_loop = 76, + my_P_loop = 75, my_P_loop_stmt = 16, my_P_lsh_op = 48, my_P_lt_op = 33, @@ -467,35 +466,34 @@ enum { my_P_mul_op = 43, my_P_ne_op = 36, my_P_neg_op = 54, - my_P_nil = 88, + my_P_nil = 87, my_P_not_op = 55, my_P_or_op = 40, my_P_pos_op = 53, - my_P_post_expr = 63, - my_P_primary = 64, + my_P_post_expr = 62, + my_P_primary = 63, my_P_ptr_type = 8, my_P_ref_op = 51, - my_P_reserved = 70, - my_P_return = 71, + my_P_reserved = 69, + my_P_return = 70, my_P_return_stmt = 19, my_P_rsh_op = 49, my_P_shift_expr = 50, - my_P_sizeof = 73, - my_P_sizeof_expr = 65, - my_P_sp = 90, + my_P_sizeof = 72, + my_P_sizeof_expr = 64, + my_P_sp = 89, my_P_stmt = 12, - my_P_str = 68, - my_P_struct = 81, + my_P_str = 67, + my_P_struct = 80, my_P_struct_decl = 4, my_P_sub_op = 39, my_P_type = 7, - my_P_type_expr = 62, my_P_unary_expr = 57, - my_P_union = 82, + my_P_union = 81, my_P_union_decl = 5, - my_P_var = 79, + my_P_var = 78, my_P_var_stmt = 20, - my_P_void = 85, + my_P_void = 84, my_P_xor_op = 41, my_R_CR0 = 0, my_R_CR1 = 1, @@ -763,7 +761,6 @@ unsigned long( my_peg_P_func)(struct my_peg* my_c); unsigned long( my_peg_P_func_decl)(struct my_peg* my_c); unsigned long( my_peg_P_func_type)(struct my_peg* my_c); unsigned long( my_peg_P_ge_op)(struct my_peg* my_c); -unsigned long( my_peg_P_gen_decl)(struct my_peg* my_c); unsigned long( my_peg_P_goto)(struct my_peg* my_c); unsigned long( my_peg_P_goto_stmt)(struct my_peg* my_c); unsigned long( my_peg_P_grammar)(struct my_peg* my_c); @@ -809,7 +806,6 @@ unsigned long( my_peg_P_struct)(struct my_peg* my_c); unsigned long( my_peg_P_struct_decl)(struct my_peg* my_c); unsigned long( my_peg_P_sub_op)(struct my_peg* my_c); unsigned long( my_peg_P_type)(struct my_peg* my_c); -unsigned long( my_peg_P_type_expr)(struct my_peg* my_c); unsigned long( my_peg_P_unary_expr)(struct my_peg* my_c); unsigned long( my_peg_P_union)(struct my_peg* my_c); unsigned long( my_peg_P_union_decl)(struct my_peg* my_c); @@ -865,7 +861,6 @@ struct my_node*( my_reconstruct_stmt)(struct my_parser* my_c,struct my_peg_node* struct my_node*( my_reconstruct_str)(struct my_parser* my_c,struct my_peg_node* my_pn); struct my_node*( my_reconstruct_struct)(struct my_parser* my_c,struct my_peg_node* my_pn); struct my_node*( my_reconstruct_type)(struct my_parser* my_c,struct my_peg_node* my_pn); -struct my_node*( my_reconstruct_typeargs)(struct my_parser* my_c,struct my_peg_node* my_pn); struct my_node*( my_reconstruct_unary)(struct my_parser* my_c,struct my_peg_node* my_pn); struct my_node*( my_reconstruct_union)(struct my_parser* my_c,struct my_peg_node* my_pn); struct my_node*( my_reconstruct_var)(struct my_parser* my_c,struct my_peg_node* my_pn); @@ -1128,9 +1123,6 @@ unsigned char*( my_P_tag_to_str)(unsigned long my_tag){ if ((unsigned long)(((long)(my_tag))==((long)(my_P_cast_expr)))) { return (unsigned char *)"cast_expr"; } - if ((unsigned long)(((long)(my_tag))==((long)(my_P_type_expr)))) { - return (unsigned char *)"type_expr"; - } if ((unsigned long)(((long)(my_tag))==((long)(my_P_post_expr)))) { return (unsigned char *)"post_expr"; } @@ -1547,8 +1539,6 @@ unsigned long( my_call_check)(struct my_compiler* my_c,struct my_node* my_n){ (my_n)=((my_n)->my_b); } (my_result)=(1UL); - } else if ((unsigned long)(((long)((my_n)->my_kind))==((long)(my_N_TYPECALL)))) { - (my_result)=((my_call_check)((my_c),((my_n)->my_a))); } else if ((unsigned long)(((unsigned long)(((long)((my_n)->my_kind))==((long)(my_N_BOR))))||((unsigned long)(((long)((my_n)->my_kind))==((long)(my_N_BAND)))))) { (my_result)=((my_call_check)((my_c),((my_n)->my_a))); (my_result)=((unsigned long)(((unsigned long)(my_result))|((unsigned long)((my_call_check)((my_c),((my_n)->my_b)))))); @@ -1771,8 +1761,6 @@ void( my_compile_expr)(struct my_compiler* my_c,struct my_decl* my_d,struct my_n } else { (my_unify)((my_c),((((my_n)->my_a)->my_t)->my_arg),((void *)0)); } - } else if ((unsigned long)(((long)(my_kind))==((long)(my_N_TYPECALL)))) { - (my_compile_expr)((my_c),(my_d),((my_n)->my_a),(0UL)); } else if ((unsigned long)(((long)(my_kind))==((long)(my_N_DOT)))) { (my_compile_expr)((my_c),(my_d),((my_n)->my_a),(0UL)); if ((unsigned long)(((long)((((my_n)->my_a)->my_t)->my_kind))==((long)(my_TY_PTR)))) { @@ -2283,8 +2271,6 @@ void( my_ctranslate_expr)(struct my_compiler* my_c,struct my_node* my_n){ } } (my_fputs)(((my_c)->my_cout),((unsigned char *)")")); - } else if ((unsigned long)(((long)((my_n)->my_kind))==((long)(my_N_TYPECALL)))) { - (my_ctranslate_expr)((my_c),((my_n)->my_a)); } else if ((unsigned long)(((long)((my_n)->my_kind))==((long)(my_N_DOT)))) { (my_fputs)(((my_c)->my_cout),((unsigned char *)"(")); (my_ctranslate_expr)((my_c),((my_n)->my_a)); @@ -4974,7 +4960,7 @@ void( my_mark_expr_used)(struct my_compiler* my_c,struct my_decl* my_d,struct my (my_mark_expr_used)((my_c),(my_d),((my_n)->my_a)); (my_mark_expr_used)((my_c),(my_d),((my_n)->my_b)); return; - } else if ((unsigned long)(((unsigned long)(((long)(my_kind))==((long)(my_N_REF))))||((unsigned long)(((unsigned long)(((long)(my_kind))==((long)(my_N_DEREF))))||((unsigned long)(((unsigned long)(((long)(my_kind))==((long)(my_N_BNOT))))||((unsigned long)(((unsigned long)(((long)(my_kind))==((long)(my_N_POS))))||((unsigned long)(((unsigned long)(((long)(my_kind))==((long)(my_N_NEG))))||((unsigned long)(((unsigned long)(((long)(my_kind))==((long)(my_N_NOT))))||((unsigned long)(((unsigned long)(((long)(my_kind))==((long)(my_N_CAST))))||((unsigned long)(((unsigned long)(((long)(my_kind))==((long)(my_N_DOT))))||((unsigned long)(((long)(my_kind))==((long)(my_N_TYPECALL)))))))))))))))))))) { + } else if ((unsigned long)(((unsigned long)(((long)(my_kind))==((long)(my_N_REF))))||((unsigned long)(((unsigned long)(((long)(my_kind))==((long)(my_N_DEREF))))||((unsigned long)(((unsigned long)(((long)(my_kind))==((long)(my_N_BNOT))))||((unsigned long)(((unsigned long)(((long)(my_kind))==((long)(my_N_POS))))||((unsigned long)(((unsigned long)(((long)(my_kind))==((long)(my_N_NEG))))||((unsigned long)(((unsigned long)(((long)(my_kind))==((long)(my_N_NOT))))||((unsigned long)(((unsigned long)(((long)(my_kind))==((long)(my_N_CAST))))||((unsigned long)(((long)(my_kind))==((long)(my_N_DOT)))))))))))))))))) { (my_mark_expr_used)((my_c),(my_d),((my_n)->my_a)); return; } else if ((unsigned long)(((unsigned long)(((long)(my_kind))==((long)(my_N_SIZEOF))))||((unsigned long)(((unsigned long)(((long)(my_kind))==((long)(my_N_STR))))||((unsigned long)(((unsigned long)(((long)(my_kind))==((long)(my_N_NUM))))||((unsigned long)(((unsigned long)(((long)(my_kind))==((long)(my_N_CHAR))))||((unsigned long)(((long)(my_kind))==((long)(my_N_NIL)))))))))))) { @@ -6791,51 +6777,7 @@ unsigned long( my_peg_P_func_decl)(struct my_peg* my_c){ unsigned long( my_peg_P_func_type)(struct my_peg* my_c){ unsigned long my_ok = 0; (my_enter)((my_c),(my_P_func_type)); - (my_choice)((my_c)); - (my_ok)=((my_literal)((my_c),((unsigned char *)"@"))); - if (my_ok) { - (my_ok)=((my_peg_P_sp)((my_c))); - } - if (my_ok) { - (my_ok)=((my_literal)((my_c),((unsigned char *)"("))); - } - if (my_ok) { - (my_ok)=((my_peg_P_sp)((my_c))); - } - if (my_ok) { - (my_ok)=((my_peg_P_gen_decl)((my_c))); - } - if (my_ok) { - while (1) { - (my_choice)((my_c)); - (my_ok)=((my_literal)((my_c),((unsigned char *)","))); - if (my_ok) { - (my_ok)=((my_peg_P_sp)((my_c))); - } - if (my_ok) { - (my_ok)=((my_peg_P_gen_decl)((my_c))); - } - if ((unsigned long)(!(my_ok))) { - (my_ok)=(1UL); - break; - } - (my_commit)((my_c)); - } - } - if (my_ok) { - (my_ok)=((my_literal)((my_c),((unsigned char *)")"))); - } - if (my_ok) { - (my_ok)=((my_peg_P_sp)((my_c))); - } - if (my_ok) { - (my_commit)((my_c)); - } else { - (my_ok)=(1UL); - } - if (my_ok) { (my_ok)=((my_literal)((my_c),((unsigned char *)"("))); - } if (my_ok) { (my_ok)=((my_peg_P_sp)((my_c))); } @@ -6916,32 +6858,6 @@ unsigned long( my_peg_P_ge_op)(struct my_peg* my_c){ } return my_ok; } -unsigned long( my_peg_P_gen_decl)(struct my_peg* my_c){ - unsigned long my_ok = 0; - (my_enter)((my_c),(my_P_gen_decl)); - (my_ok)=((my_peg_P_ident)((my_c))); - if (my_ok) { - (my_ok)=((my_peg_P_sp)((my_c))); - } - if (my_ok) { - (my_ok)=((my_literal)((my_c),((unsigned char *)":"))); - } - if (my_ok) { - (my_ok)=((my_peg_P_sp)((my_c))); - } - if (my_ok) { - (my_ok)=((my_literal)((my_c),((unsigned char *)"type"))); - } - if (my_ok) { - (my_ok)=((my_peg_P_sp)((my_c))); - } - if (my_ok) { - (my_leave)((my_c),(my_P_gen_decl)); - } else { - (my_fail)((my_c)); - } - return my_ok; -} unsigned long( my_peg_P_goto)(struct my_peg* my_c){ unsigned long my_ok = 0; (my_enter)((my_c),(my_P_goto)); @@ -7582,10 +7498,6 @@ unsigned long( my_peg_P_post_expr)(struct my_peg* my_c){ (my_choice)((my_c)); (my_ok)=((my_peg_P_cast_expr)((my_c))); } - if ((unsigned long)(!(my_ok))) { - (my_choice)((my_c)); - (my_ok)=((my_peg_P_type_expr)((my_c))); - } if (my_ok) { (my_commit)((my_c)); } else { @@ -8266,52 +8178,6 @@ unsigned long( my_peg_P_type)(struct my_peg* my_c){ } return my_ok; } -unsigned long( my_peg_P_type_expr)(struct my_peg* my_c){ - unsigned long my_ok = 0; - (my_enter)((my_c),(my_P_type_expr)); - (my_ok)=((my_literal)((my_c),((unsigned char *)"@"))); - if (my_ok) { - (my_ok)=((my_peg_P_sp)((my_c))); - } - if (my_ok) { - (my_ok)=((my_literal)((my_c),((unsigned char *)"("))); - } - if (my_ok) { - (my_ok)=((my_peg_P_sp)((my_c))); - } - if (my_ok) { - (my_ok)=((my_peg_P_type)((my_c))); - } - if (my_ok) { - while (1) { - (my_choice)((my_c)); - (my_ok)=((my_literal)((my_c),((unsigned char *)","))); - if (my_ok) { - (my_ok)=((my_peg_P_sp)((my_c))); - } - if (my_ok) { - (my_ok)=((my_peg_P_type)((my_c))); - } - if ((unsigned long)(!(my_ok))) { - (my_ok)=(1UL); - break; - } - (my_commit)((my_c)); - } - } - if (my_ok) { - (my_ok)=((my_literal)((my_c),((unsigned char *)")"))); - } - if (my_ok) { - (my_ok)=((my_peg_P_sp)((my_c))); - } - if (my_ok) { - (my_leave)((my_c),(my_P_type_expr)); - } else { - (my_fail)((my_c)); - } - return my_ok; -} unsigned long( my_peg_P_unary_expr)(struct my_peg* my_c){ unsigned long my_ok = 0; (my_enter)((my_c),(my_P_unary_expr)); @@ -9248,10 +9114,6 @@ struct my_node*( my_reconstruct_post)(struct my_parser* my_c,struct my_peg_node* (my_n)=((my_reconstruct_type)((my_c),((my_pn)->my_child))); (my_ret)=((my_mknode)((my_c),(my_N_CAST),(my_ret),(my_n))); (my_copypos)((my_ret),(my_pn)); - } else if ((unsigned long)(((long)(my_tag))==((long)(my_P_type_expr)))) { - (my_n)=((my_reconstruct_typeargs)((my_c),((my_pn)->my_child))); - (my_ret)=((my_mknode)((my_c),(my_N_TYPECALL),(my_ret),(my_n))); - (my_copypos)((my_ret),(my_pn)); } else { (my_die)(((unsigned char *)"invalid post_expr")); } @@ -9426,26 +9288,6 @@ struct my_node*( my_reconstruct_type)(struct my_parser* my_c,struct my_peg_node* (my_die)(((unsigned char *)"reconstruct_type: invalid type")); } } -struct my_node*( my_reconstruct_typeargs)(struct my_parser* my_c,struct my_peg_node* my_pn){ - struct my_node* my_ret = 0; - struct my_node** my_link = 0; - struct my_node* my_a = 0; - struct my_node* my_n = 0; - (my_ret)=((void *)0); - (my_link)=(&(my_ret)); - while (1) { - if ((unsigned long)(!(my_pn))) { - break; - } - (my_a)=((my_reconstruct_type)((my_c),(my_pn))); - (my_n)=((my_mknode1)((my_c),(my_N_TYPELIST),(my_a))); - (my_copypos)((my_n),(my_pn)); - (*(my_link))=(my_n); - (my_link)=(&((my_n)->my_b)); - (my_pn)=((my_pn)->my_next); - } - return my_ret; -} struct my_node*( my_reconstruct_unary)(struct my_parser* my_c,struct my_peg_node* my_pn){ struct my_node* my_n = 0; struct my_node* my_ret = 0; @@ -10018,9 +9860,6 @@ void( my_typecheck_expr)(struct my_compiler* my_c,struct my_decl* my_d,struct my (my_unify)((my_c),((((my_n)->my_a)->my_t)->my_arg),((void *)0)); } ((my_n)->my_t)=((((my_n)->my_a)->my_t)->my_val); - } else if ((unsigned long)(((long)(my_kind))==((long)(my_N_TYPECALL)))) { - (my_typecheck_expr)((my_c),(my_d),((my_n)->my_a),(0UL)); - ((my_n)->my_t)=(((my_n)->my_a)->my_t); } else if ((unsigned long)(((long)(my_kind))==((long)(my_N_DOT)))) { (my_typecheck_expr)((my_c),(my_d),((my_n)->my_a),(0UL)); if ((unsigned long)(((long)((((my_n)->my_a)->my_t)->my_kind))==((long)(my_TY_PTR)))) { diff --git a/cc3.peg b/cc3.peg @@ -16,8 +16,7 @@ ptr_type <- '*' sp type gen_decl <- ident sp ':' sp 'type' sp arg_decl <- ident sp ':' sp type -func_type <- ('@' sp '(' sp gen_decl ( ',' sp gen_decl )* ')' sp)? - '(' sp ( arg_decl (',' sp arg_decl)* )? ( ',' sp )? ')' sp +func_type <- '(' sp ( arg_decl (',' sp arg_decl)* )? ( ',' sp )? ')' sp (':' sp type)? stmt <- if_stmt / loop_stmt / break_stmt / continue_stmt @@ -92,8 +91,7 @@ index_expr <- '[' sp expr ']' sp call_expr <- '(' sp ( expr (',' sp expr)* )? (',' sp)? ')' sp member_expr <- '.' sp ident sp cast_expr <- 'as' sp type -type_expr <- '@' sp '(' sp type (',' sp type)* ')' sp -post_expr <- primary (index_expr / call_expr / member_expr / cast_expr / type_expr)* +post_expr <- primary (index_expr / call_expr / member_expr / cast_expr)* primary <- ident sp / hex sp / dec sp / str sp / char sp / sizeof_expr / nil sp / '(' sp expr ')' sp