os

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

commit d5b96280ee76e8993b672ba3b510d4b2c3299ab3
parent 1a9b77ea563a56d79b1dbae8cf45e95259e9209c
Author: erai <erai@omiltem.net>
Date:   Fri, 20 Sep 2024 13:11:07 -0400

all in one bootstrap

Diffstat:
M.gitignore | 1+
Mbootstrap.sh | 23++++++-----------------
Mcc0.c | 6403++++++++++++++++++++++++++++++++++++++++++++++---------------------------------
Mcc1.c | 74+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++-
Dparsepeg.c | 338-------------------------------------------------------------------------------
Mpeg.c | 115+++++++++++++++++++++++++++----------------------------------------------------
Mpeglib.c | 4++--
7 files changed, 3825 insertions(+), 3133 deletions(-)

diff --git a/.gitignore b/.gitignore @@ -7,6 +7,7 @@ cc2 cc2.c gencc parse3.c +parsepeg.c parsepeg2.c pxe cmp diff --git a/bootstrap.sh b/bootstrap.sh @@ -1,30 +1,19 @@ #!/bin/sh +BOOTSTRAP="cc0.c" LIBS="bufio.c lib.c alloc.c syscall.c" -PEG="peg.c peglib.c parsepeg.c" -SOURCES="cc1.c type.c parse2.c parse3.c peglib.c as.c decl.c node.c cout.c" +SOURCES="cc1.c type.c parse2.c parse3.c peglib.c as.c decl.c node.c cout.c peg.c parsepeg.c" # Build the bootstrap compiler from c -gcc -std=c99 ./cc0.c -o cc0 - -# Bootstrap the parser tool -./cc0 ${LIBS} ${PEG} -o peg0 - -# Bootstrap the self hosted compiler -./peg0 cc3.peg -o parse3.c +gcc -std=c99 ${BOOTSTRAP} -o cc0 +./cc0 -P P_ cc3.peg -o parse3.c +./cc0 -P PEG_ peg.peg -o parsepeg.c ./cc0 ${LIBS} ${SOURCES} -o cc1 # Double check the bootstrap and self hosting compiler have the same output ./cc1 ${LIBS} ${SOURCES} -o cc2 cmp cc1 cc2 || echo cc mismatch -# Also check the peg tool compiles the same -./cc1 ${LIBS} ${PEG} -o peg -cmp peg0 peg || echo peg mismatch - -# Verify that the saved bootstrap parsepeg.c came from peg.peg -./peg -P PEG_ peg.peg -o parsepeg2.c -cmp parsepeg.c parsepeg2.c || echo parsepeg mismatch - +# Verify the saved bootstrap matches ./cc1 -C ${LIBS} ${SOURCES} -o cc2.c cmp cc0.c cc2.c || echo bootstrap mismatch diff --git a/cc0.c b/cc0.c @@ -12,10 +12,12 @@ struct my_decl; struct my_file; struct my_fixup; struct my_label; +struct my_name_node; struct my_node; struct my_page; struct my_parser; struct my_peg; +struct my_peg_compiler; struct my_peg_frame; struct my_peg_node; struct my_peg_op; @@ -97,6 +99,10 @@ struct my_label { unsigned long my_at; unsigned long my_fixed; }; +struct my_name_node { + struct my_name_node* my_next; + unsigned char* my_name; +}; struct my_node { unsigned long my_kind; struct my_node* my_a; @@ -142,6 +148,13 @@ struct my_peg { unsigned long my_np; unsigned long my_ncap; }; +struct my_peg_compiler { + struct my_alloc* my_a; + struct my_peg* my_p; + struct my_file* my_out; + unsigned char* my_scratch; + unsigned char* my_prefix; +}; struct my_peg_frame { unsigned long my_pos; unsigned long my_depth; @@ -200,6 +213,10 @@ enum { my_CC_S = 8, my_EINTR = 4, my_EPIPE = 32, + my_EXACTLY_ONE = 1, + my_LOOK_AND = 2, + my_LOOK_NORMAL = 0, + my_LOOK_NOT = 1, my_N_ADD = 42, my_N_AND = 50, my_N_ARGDECL = 10, @@ -258,6 +275,7 @@ enum { my_N_SUB = 43, my_N_VARDECL = 27, my_N_XOR = 52, + my_ONE_OR_MORE = 3, my_OP_ADCRM = 19, my_OP_ADDI = 129, my_OP_ADDRM = 3, @@ -333,6 +351,21 @@ enum { my_O_RDONLY = 0, my_O_RDWR = 2, my_O_WRONLY = 1, + my_PEG_alternative = 3, + my_PEG_any = 9, + my_PEG_call = 12, + my_PEG_class = 11, + my_PEG_countop = 6, + my_PEG_grammar = 0, + my_PEG_identifier = 13, + my_PEG_literal = 10, + my_PEG_lookahead = 5, + my_PEG_lookop = 4, + my_PEG_pattern = 2, + my_PEG_primary = 8, + my_PEG_rule = 1, + my_PEG_sp = 14, + my_PEG_suffix = 7, my_POLLERR = 8, my_POLLHUP = 16, my_POLLIN = 1, @@ -470,8 +503,12 @@ enum { my_TY_PTR = 3, my_TY_STRUCT = 6, my_TY_VOID = 0, - my_WNOHANG = 1 + my_WNOHANG = 1, + my_ZERO_OR_MORE = 2, + my_ZERO_OR_ONE = 0 }; +unsigned char*( my_PEG_tag_to_str)(unsigned long my_tag); +unsigned char*( my_P_tag_to_str)(unsigned long my_tag); void( my__start)(unsigned long my_argc,unsigned char** my_argv,unsigned char** my_envp); unsigned long( my_accept)(unsigned long my_fd,unsigned char* my_addr,unsigned long* my_len); void( my_addfixup)(struct my_assembler* my_c,struct my_label* my_l); @@ -520,6 +557,8 @@ void( my_ctranslate_type2)(struct my_compiler* my_c,struct my_type* my_ty,unsign void( my_ctranslate_vars)(struct my_compiler* my_c,struct my_node* my_n); void( my_ctranslate_zero)(struct my_compiler* my_c,struct my_type* my_ty); unsigned long( my_dec2int)(unsigned char* my_s,unsigned long my_len,unsigned long* my_ok); +unsigned long( my_decode_count)(struct my_peg_node* my_n); +unsigned long( my_decode_look)(struct my_peg_node* my_n); void( my_defenum)(struct my_compiler* my_c,struct my_node* my_n); struct my_decl*( my_defextern)(struct my_compiler* my_c,struct my_node* my_n); void( my_defstruct)(struct my_compiler* my_c,struct my_node* my_n); @@ -634,6 +673,22 @@ unsigned long( my_open)(unsigned char* my_name,unsigned long my_flags,unsigned l void( my_open_coutput)(struct my_compiler* my_c,unsigned char* my_filename); void( my_open_output)(struct my_assembler* my_c,unsigned char* my_filename); struct my_node*( my_parse)(struct my_parser* my_c,unsigned char* my_filename); +unsigned long( my_parse_escape)(unsigned char* my_s,unsigned long* my_i,unsigned long my_n); +unsigned long( my_peg_PEG_alternative)(struct my_peg* my_c); +unsigned long( my_peg_PEG_any)(struct my_peg* my_c); +unsigned long( my_peg_PEG_call)(struct my_peg* my_c); +unsigned long( my_peg_PEG_class)(struct my_peg* my_c); +unsigned long( my_peg_PEG_countop)(struct my_peg* my_c); +unsigned long( my_peg_PEG_grammar)(struct my_peg* my_c); +unsigned long( my_peg_PEG_identifier)(struct my_peg* my_c); +unsigned long( my_peg_PEG_literal)(struct my_peg* my_c); +unsigned long( my_peg_PEG_lookahead)(struct my_peg* my_c); +unsigned long( my_peg_PEG_lookop)(struct my_peg* my_c); +unsigned long( my_peg_PEG_pattern)(struct my_peg* my_c); +unsigned long( my_peg_PEG_primary)(struct my_peg* my_c); +unsigned long( my_peg_PEG_rule)(struct my_peg* my_c); +unsigned long( my_peg_PEG_sp)(struct my_peg* my_c); +unsigned long( my_peg_PEG_suffix)(struct my_peg* my_c); unsigned long( my_peg_P_add_expr)(struct my_peg* my_c); unsigned long( my_peg_P_add_op)(struct my_peg* my_c); unsigned long( my_peg_P_and_op)(struct my_peg* my_c); @@ -719,8 +774,10 @@ unsigned long( my_peg_P_var)(struct my_peg* my_c); unsigned long( my_peg_P_var_stmt)(struct my_peg* my_c); unsigned long( my_peg_P_void)(struct my_peg* my_c); unsigned long( my_peg_P_xor_op)(struct my_peg* my_c); +void( my_peg_compile)(struct my_peg_compiler* my_c,unsigned char* my_filename); void( my_peg_free)(struct my_peg* my_c); struct my_peg*( my_peg_new)(unsigned char* my_filename,unsigned char* my_src,unsigned long my_len,struct my_alloc* my_a); +void( my_peg_open_output)(struct my_peg_compiler* my_c,unsigned char* my_filename); struct my_peg_node*( my_peg_parse)(struct my_peg* my_c,unsigned long my_sp,unsigned long(* my_grammar)(struct my_peg*)); void( my_peg_reset)(struct my_peg* my_c,unsigned char* my_filename,unsigned char* my_src,unsigned long my_len); void( my_peg_show)(struct my_file* my_out,struct my_peg_node* my_n); @@ -776,13 +833,17 @@ void( my_reverse)(unsigned char* my_buf,unsigned long my_len); void( my_setup_alloc)(struct my_alloc* my_c); struct my_assembler*( my_setup_assembler)(struct my_alloc* my_a); struct my_parser*( my_setup_parser)(struct my_alloc* my_a); +struct my_peg_compiler*( my_setup_peg)(struct my_alloc* my_a,unsigned char* my_prefix); void( my_show_node)(struct my_file* my_out,struct my_node* my_n); unsigned long( my_sigaction)(unsigned long my_sig,struct my_sigaction* my_act,struct my_sigaction* my_oact); unsigned long( my_socket)(unsigned long my_pf,unsigned long my_ty,unsigned long my_pc); unsigned long( my_strcmp)(unsigned char* my_a,unsigned char* my_b); unsigned long( my_strlen)(unsigned char* my_s); unsigned long( my_syscall)(unsigned long my_n,unsigned long my_a1,unsigned long my_a2,unsigned long my_a3,unsigned long my_a4,unsigned long my_a5,unsigned long my_a6); -unsigned char*( my_tag_to_str)(unsigned long my_tag); +void( my_translate)(struct my_peg_compiler* my_c,struct my_peg_node* my_n); +void( my_translate_charset)(struct my_peg_compiler* my_c,struct my_peg_node* my_n); +void( my_translate_literal)(struct my_peg_compiler* my_c,struct my_peg_node* my_n); +void( my_translate_pattern)(struct my_peg_compiler* my_c,struct my_peg_node* my_n); unsigned long( my_type_isint)(struct my_type* my_t); unsigned long( my_type_isprim)(struct my_type* my_t); unsigned long( my_type_sizeof)(struct my_compiler* my_c,struct my_type* my_t); @@ -794,1210 +855,697 @@ unsigned long( my_wait)(unsigned long my_pid,unsigned long* my_status,unsigned l unsigned long( my_write)(unsigned long my_fd,unsigned char* my_buf,unsigned long my_n); void( my_writeout)(struct my_assembler* my_c,struct my_label* my_start,struct my_label* my_kstart); void( my_xxd_line)(unsigned char* my_line,unsigned long my_offset,unsigned char* my_data,unsigned long my_len); -void( my__start)(unsigned long my_argc,unsigned char** my_argv,unsigned char** my_envp){ - (my_main)((my_argc),(my_argv),(my_envp)); - (my_exit)((0UL)); -} -unsigned long( my_accept)(unsigned long my_fd,unsigned char* my_addr,unsigned long* my_len){ - return (my_syscall)((43UL),(my_fd),((unsigned long)my_addr),((unsigned long)my_len),(0UL),(0UL),(0UL)); -} -void( my_addfixup)(struct my_assembler* my_c,struct my_label* my_l){ - struct my_fixup* my_f = 0; - unsigned char* my_here = 0; - if ((unsigned long)(((long)(((my_c)->my_text_end)->my_fill))<((long)(4UL)))) { - (my_die)(((unsigned char *)"invalid fixup")); +unsigned char*( my_PEG_tag_to_str)(unsigned long my_tag){ + if ((unsigned long)(((long)(my_tag))==((long)(my_PEG_grammar)))) { + return (unsigned char *)"grammar"; } - (my_here)=(&((((my_c)->my_text_end)->my_buf)[(unsigned long)(((unsigned long)(((my_c)->my_text_end)->my_fill))-((unsigned long)(4UL)))])); - if ((my_l)->my_fixed) { - (my_fixup)((my_c),(my_here),((unsigned long)(((unsigned long)((my_l)->my_at))-((unsigned long)((my_c)->my_at))))); - } else { - (my_f)=((struct my_fixup*)(my_alloc)(((my_c)->my_a),(24UL))); - ((my_f)->my_next)=((my_l)->my_fix); - ((my_f)->my_ptr)=(my_here); - ((my_f)->my_at)=((my_c)->my_at); - ((my_l)->my_fix)=(my_f); + if ((unsigned long)(((long)(my_tag))==((long)(my_PEG_rule)))) { + return (unsigned char *)"rule"; } -} -unsigned char*( my_alloc)(struct my_alloc* my_c,unsigned long my_size){ - struct my_page* my_page = 0; - unsigned long my_mret = 0; - unsigned char* my_ret = 0; - unsigned long my_psize = 0; - if ((unsigned long)(((long)(my_size))<((long)(0UL)))) { - (my_die)(((unsigned char *)"invalid alloc")); + if ((unsigned long)(((long)(my_tag))==((long)(my_PEG_pattern)))) { + return (unsigned char *)"pattern"; } - if ((unsigned long)(((long)(my_size))>=((long)(2048UL)))) { - (my_size)=((unsigned long)(((unsigned long)(my_size))+((unsigned long)(4095UL)))); - (my_size)=((unsigned long)(((unsigned long)(my_size))&((unsigned long)((unsigned long)(~(unsigned long)(4095UL)))))); - (my_mret)=((my_mmap)((0UL),(my_size),(3UL),(34UL),((unsigned long)(-(unsigned long)(1UL))),(0UL))); - if ((unsigned long)(((long)(my_mret))==((long)((unsigned long)(-(unsigned long)(1UL)))))) { - (my_die)(((unsigned char *)"out of memory")); + if ((unsigned long)(((long)(my_tag))==((long)(my_PEG_alternative)))) { + return (unsigned char *)"alternative"; } - (my_ret)=((unsigned char*)my_mret); - return my_ret; + if ((unsigned long)(((long)(my_tag))==((long)(my_PEG_lookop)))) { + return (unsigned char *)"lookop"; } - (my_page)=((my_c)->my_page); - if (my_page) { - if ((unsigned long)(((long)(my_size))<=((long)((unsigned long)(((unsigned long)((my_page)->my_size))-((unsigned long)((my_page)->my_fill))))))) { - (my_mret)=((unsigned long)(((unsigned long)((unsigned long)(my_page)->my_ptr))+((unsigned long)((my_page)->my_fill)))); - ((my_page)->my_fill)=((unsigned long)(((unsigned long)((my_page)->my_fill))+((unsigned long)(my_size)))); - (my_ret)=((unsigned char*)my_mret); - return my_ret; + if ((unsigned long)(((long)(my_tag))==((long)(my_PEG_lookahead)))) { + return (unsigned char *)"lookahead"; } + if ((unsigned long)(((long)(my_tag))==((long)(my_PEG_countop)))) { + return (unsigned char *)"countop"; } - (my_psize)=((unsigned long)(((long)(64UL))*((long)(1024UL)))); - (my_mret)=((my_mmap)((0UL),(my_psize),(3UL),(34UL),((unsigned long)(-(unsigned long)(1UL))),(0UL))); - if ((unsigned long)(((long)(my_mret))==((long)((unsigned long)(-(unsigned long)(1UL)))))) { - (my_die)(((unsigned char *)"out of memory")); + if ((unsigned long)(((long)(my_tag))==((long)(my_PEG_suffix)))) { + return (unsigned char *)"suffix"; } - (my_page)=((struct my_page*)my_mret); - ((my_page)->my_ptr)=((unsigned char*)&((my_page)[1UL])); - (my_ret)=((my_page)->my_ptr); - ((my_page)->my_size)=((unsigned long)(((unsigned long)(my_psize))-((unsigned long)(24UL)))); - ((my_page)->my_fill)=(my_size); - ((my_c)->my_page)=(my_page); - return my_ret; -} -unsigned long( my_any)(struct my_peg* my_c){ - unsigned long my_ch = 0; - (my_ch)=((my_get)((my_c))); - if ((unsigned long)(((long)(my_ch))==((long)((unsigned long)(-(unsigned long)(1UL)))))) { - (my_fail)((my_c)); - return 0UL; + if ((unsigned long)(((long)(my_tag))==((long)(my_PEG_primary)))) { + return (unsigned char *)"primary"; } - return 1UL; -} -void( my_as_emit)(struct my_assembler* my_a,unsigned long my_b){ - (my_emit)((my_a),(my_b)); -} -void( my_as_jmp)(struct my_assembler* my_a,unsigned long my_op,struct my_label* my_l){ - (my_reserve)((my_a),(16UL)); - (my_as_op)((my_a),(my_op)); - (my_as_emit)((my_a),(0UL)); - (my_as_emit)((my_a),(0UL)); - (my_as_emit)((my_a),(0UL)); - (my_as_emit)((my_a),(0UL)); - (my_addfixup)((my_a),(my_l)); -} -void( my_as_modm)(struct my_assembler* my_a,unsigned long my_op,unsigned long my_b,unsigned long my_i,unsigned long my_s,unsigned long my_d){ - (my_as_modrm)((my_a),((unsigned long)(((unsigned long)(my_op))&((unsigned long)(65535UL)))),((unsigned long)(((unsigned long)(my_op))>>((unsigned long)(16UL)))),(my_b),(my_i),(my_s),(my_d)); -} -void( my_as_modr)(struct my_assembler* my_a,unsigned long my_op,unsigned long my_b){ - (my_as_modrr)((my_a),((unsigned long)(((unsigned long)(my_op))&((unsigned long)(65535UL)))),((unsigned long)(((unsigned long)(my_op))>>((unsigned long)(16UL)))),(my_b)); -} -void( my_as_modra)(struct my_assembler* my_a,unsigned long my_op,unsigned long my_r,unsigned long my_d){ - (my_as_rex)((my_a),(my_op),(my_r),(0UL),(0UL)); - (my_as_op)((my_a),(my_op)); - (my_as_emit)((my_a),((unsigned long)(((unsigned long)((unsigned long)(((unsigned long)((unsigned long)(((unsigned long)(my_r))<<((unsigned long)(3UL)))))&((unsigned long)(56UL)))))+((unsigned long)(my_R_RSP))))); - (my_as_emit)((my_a),((unsigned long)(((unsigned long)((unsigned long)(((unsigned long)(my_R_RSP))<<((unsigned long)(3UL)))))+((unsigned long)(my_R_RBP))))); - (my_as_emit)((my_a),(my_d)); - (my_as_emit)((my_a),((unsigned long)(((unsigned long)(my_d))>>((unsigned long)(8UL))))); - (my_as_emit)((my_a),((unsigned long)(((unsigned long)(my_d))>>((unsigned long)(16UL))))); - (my_as_emit)((my_a),((unsigned long)(((unsigned long)(my_d))>>((unsigned long)(24UL))))); -} -void( my_as_modri)(struct my_assembler* my_a,unsigned long my_op,unsigned long my_r,unsigned long my_x){ - if ((unsigned long)(((unsigned long)(((long)(my_x))<((long)((unsigned long)(-(unsigned long)((unsigned long)(((unsigned long)(1UL))<<((unsigned long)(31UL)))))))))||((unsigned long)(((long)(my_x))>=((long)((unsigned long)(((unsigned long)(1UL))<<((unsigned long)(31UL))))))))) { - (my_die)(((unsigned char *)"immediate too large")); + if ((unsigned long)(((long)(my_tag))==((long)(my_PEG_any)))) { + return (unsigned char *)"any"; } - (my_as_modrr)((my_a),((unsigned long)(((unsigned long)(my_op))&((unsigned long)(65535UL)))),((unsigned long)(((unsigned long)(my_op))>>((unsigned long)(16UL)))),(my_r)); - (my_as_emit)((my_a),(my_x)); - (my_as_emit)((my_a),((unsigned long)(((unsigned long)(my_x))>>((unsigned long)(8UL))))); - (my_as_emit)((my_a),((unsigned long)(((unsigned long)(my_x))>>((unsigned long)(16UL))))); - (my_as_emit)((my_a),((unsigned long)(((unsigned long)(my_x))>>((unsigned long)(24UL))))); -} -void( my_as_modrm)(struct my_assembler* my_a,unsigned long my_op,unsigned long my_r,unsigned long my_b,unsigned long my_i,unsigned long my_s,unsigned long my_d){ - unsigned long my_sib = 0; - unsigned long my_mod = 0; - unsigned long my_rm = 0; - unsigned long my_dw = 0; - if ((unsigned long)(((unsigned long)(((long)(my_r))<((long)(0UL))))||((unsigned long)(((long)(my_r))>((long)(15UL)))))) { - (my_die)(((unsigned char *)"invalid reg")); + if ((unsigned long)(((long)(my_tag))==((long)(my_PEG_literal)))) { + return (unsigned char *)"literal"; } - (my_rm)=((unsigned long)(((unsigned long)((unsigned long)(((unsigned long)(my_r))<<((unsigned long)(3UL)))))&((unsigned long)(56UL)))); - if ((unsigned long)(((long)(my_d))!=((long)(0UL)))) { - if ((unsigned long)(((unsigned long)(((long)(my_d))>=((long)((unsigned long)(-(unsigned long)(128UL))))))&&((unsigned long)(((long)(my_d))<=((long)(127UL)))))) { - (my_mod)=(1UL); - (my_dw)=(1UL); - } else { - (my_mod)=(2UL); - (my_dw)=(4UL); + if ((unsigned long)(((long)(my_tag))==((long)(my_PEG_class)))) { + return (unsigned char *)"class"; } - } else { - (my_mod)=(0UL); - (my_dw)=(0UL); + if ((unsigned long)(((long)(my_tag))==((long)(my_PEG_call)))) { + return (unsigned char *)"call"; } - if ((unsigned long)(((long)(my_mod))==((long)(0UL)))) { - if ((unsigned long)(((unsigned long)(((long)(my_b))<((long)(0UL))))||((unsigned long)(((long)(my_b))>((long)(16UL)))))) { - (my_die)(((unsigned char *)"invalid reg")); + if ((unsigned long)(((long)(my_tag))==((long)(my_PEG_identifier)))) { + return (unsigned char *)"identifier"; } - if (my_s) { - if ((unsigned long)(((long)(my_b))==((long)(my_R_RIP)))) { - (my_die)(((unsigned char *)"invalid base")); + if ((unsigned long)(((long)(my_tag))==((long)(my_PEG_sp)))) { + return (unsigned char *)"sp"; } - if ((unsigned long)(((long)(my_i))==((long)(my_R_RSP)))) { - (my_die)(((unsigned char *)"invalid index")); + (my_die)(((unsigned char *)"invalid tag")); +} +unsigned char*( my_P_tag_to_str)(unsigned long my_tag){ + if ((unsigned long)(((long)(my_tag))==((long)(my_P_grammar)))) { + return (unsigned char *)"grammar"; } - (my_rm)=((unsigned long)(((unsigned long)(my_rm))+((unsigned long)(my_R_RSP)))); - } else { - if ((unsigned long)(((long)(my_i))!=((long)(0UL)))) { - (my_die)(((unsigned char *)"invalid index")); + if ((unsigned long)(((long)(my_tag))==((long)(my_P_enum_item)))) { + return (unsigned char *)"enum_item"; } - if ((unsigned long)(((long)(my_b))==((long)(my_R_RIP)))) { - (my_mod)=(0UL); - (my_dw)=(4UL); - (my_rm)=((unsigned long)(((unsigned long)(my_rm))+((unsigned long)(my_R_RBP)))); - } else if ((unsigned long)(((unsigned long)(((long)(my_b))==((long)(my_R_RSP))))||((unsigned long)(((long)(my_b))==((long)(my_R_R12)))))) { - (my_s)=(1UL); - (my_i)=(my_R_RSP); - (my_rm)=((unsigned long)(((unsigned long)(my_rm))+((unsigned long)(my_R_RSP)))); - } else if ((unsigned long)(((unsigned long)(((long)(my_b))==((long)(my_R_RBP))))||((unsigned long)(((long)(my_b))==((long)(my_R_R13)))))) { - (my_mod)=(1UL); - (my_dw)=(1UL); - (my_rm)=((unsigned long)(((unsigned long)(my_rm))+((unsigned long)(my_R_RBP)))); - } else { - (my_rm)=((unsigned long)(((unsigned long)(my_rm))+((unsigned long)((unsigned long)(((unsigned long)(my_b))&((unsigned long)(7UL))))))); + if ((unsigned long)(((long)(my_tag))==((long)(my_P_enum_decl)))) { + return (unsigned char *)"enum_decl"; } + if ((unsigned long)(((long)(my_tag))==((long)(my_P_member_decl)))) { + return (unsigned char *)"member_decl"; } - } else { - if ((unsigned long)(((unsigned long)(((long)(my_b))<((long)(0UL))))||((unsigned long)(((unsigned long)(((long)(my_b))>((long)(16UL))))||((unsigned long)(((unsigned long)(((long)(my_i))<((long)(0UL))))||((unsigned long)(((long)(my_i))>((long)(15UL)))))))))) { - (my_die)(((unsigned char *)"invalid reg")); + if ((unsigned long)(((long)(my_tag))==((long)(my_P_struct_decl)))) { + return (unsigned char *)"struct_decl"; } - if (my_s) { - if ((unsigned long)(((long)(my_b))==((long)(my_R_RIP)))) { - (my_die)(((unsigned char *)"invalid base")); + if ((unsigned long)(((long)(my_tag))==((long)(my_P_func_decl)))) { + return (unsigned char *)"func_decl"; } - if ((unsigned long)(((long)(my_i))==((long)(my_R_RSP)))) { - (my_die)(((unsigned char *)"invalid index")); + if ((unsigned long)(((long)(my_tag))==((long)(my_P_type)))) { + return (unsigned char *)"type"; } - (my_rm)=((unsigned long)(((unsigned long)(my_rm))+((unsigned long)(my_R_RSP)))); - } else { - if ((unsigned long)(((long)(my_i))!=((long)(0UL)))) { - (my_die)(((unsigned char *)"invalid index")); + if ((unsigned long)(((long)(my_tag))==((long)(my_P_ptr_type)))) { + return (unsigned char *)"ptr_type"; } - if ((unsigned long)(((long)(my_b))==((long)(my_R_RIP)))) { - (my_mod)=(0UL); - (my_dw)=(4UL); - (my_rm)=((unsigned long)(((unsigned long)(my_rm))+((unsigned long)(my_R_RBP)))); - } else if ((unsigned long)(((unsigned long)(((long)(my_b))==((long)(my_R_RSP))))||((unsigned long)(((long)(my_b))==((long)(my_R_R12)))))) { - (my_s)=(1UL); - (my_i)=(my_R_RSP); - (my_rm)=((unsigned long)(((unsigned long)(my_rm))+((unsigned long)(my_R_RSP)))); - } else { - (my_rm)=((unsigned long)(((unsigned long)(my_rm))+((unsigned long)((unsigned long)(((unsigned long)(my_b))&((unsigned long)(7UL))))))); + if ((unsigned long)(((long)(my_tag))==((long)(my_P_arg_decl)))) { + return (unsigned char *)"arg_decl"; } + if ((unsigned long)(((long)(my_tag))==((long)(my_P_func_type)))) { + return (unsigned char *)"func_type"; } + if ((unsigned long)(((long)(my_tag))==((long)(my_P_stmt)))) { + return (unsigned char *)"stmt"; } - (my_as_rex)((my_a),(my_op),(my_r),(my_i),(my_b)); - (my_as_op)((my_a),(my_op)); - (my_as_emit)((my_a),((unsigned long)(((unsigned long)((unsigned long)(((unsigned long)(my_mod))<<((unsigned long)(6UL)))))+((unsigned long)(my_rm))))); - if (my_s) { - (my_sib)=((unsigned long)(((unsigned long)((unsigned long)(((unsigned long)((unsigned long)(((unsigned long)(my_i))<<((unsigned long)(3UL)))))&((unsigned long)(56UL)))))+((unsigned long)((unsigned long)(((unsigned long)(my_b))&((unsigned long)(7UL))))))); - if ((unsigned long)(((long)(my_s))==((long)(2UL)))) { - (my_sib)=((unsigned long)(((unsigned long)(my_sib))+((unsigned long)(64UL)))); - } else if ((unsigned long)(((long)(my_s))==((long)(4UL)))) { - (my_sib)=((unsigned long)(((unsigned long)(my_sib))+((unsigned long)(128UL)))); - } else if ((unsigned long)(((long)(my_s))==((long)(8UL)))) { - (my_sib)=((unsigned long)(((unsigned long)(my_sib))+((unsigned long)(192UL)))); - } else if ((unsigned long)(((long)(my_s))!=((long)(1UL)))) { - (my_die)(((unsigned char *)"invalid scale")); + if ((unsigned long)(((long)(my_tag))==((long)(my_P_elif_stmt)))) { + return (unsigned char *)"elif_stmt"; } - (my_as_emit)((my_a),(my_sib)); + if ((unsigned long)(((long)(my_tag))==((long)(my_P_else_stmt)))) { + return (unsigned char *)"else_stmt"; } - if ((unsigned long)(((long)(my_dw))==((long)(1UL)))) { - (my_as_emit)((my_a),(my_d)); - } else if ((unsigned long)(((long)(my_dw))==((long)(4UL)))) { - (my_as_emit)((my_a),(my_d)); - (my_as_emit)((my_a),((unsigned long)(((unsigned long)(my_d))>>((unsigned long)(8UL))))); - (my_as_emit)((my_a),((unsigned long)(((unsigned long)(my_d))>>((unsigned long)(16UL))))); - (my_as_emit)((my_a),((unsigned long)(((unsigned long)(my_d))>>((unsigned long)(24UL))))); + if ((unsigned long)(((long)(my_tag))==((long)(my_P_if_stmt)))) { + return (unsigned char *)"if_stmt"; } -} -void( my_as_modrr)(struct my_assembler* my_a,unsigned long my_op,unsigned long my_r,unsigned long my_b){ - if ((unsigned long)(((unsigned long)(((long)(my_r))<((long)(0UL))))||((unsigned long)(((unsigned long)(((long)(my_r))>((long)(15UL))))||((unsigned long)(((unsigned long)(((long)(my_b))<((long)(0UL))))||((unsigned long)(((long)(my_b))>((long)(15UL)))))))))) { - (my_die)(((unsigned char *)"invalid reg")); + if ((unsigned long)(((long)(my_tag))==((long)(my_P_loop_stmt)))) { + return (unsigned char *)"loop_stmt"; } - (my_as_rex)((my_a),(my_op),(my_r),(0UL),(my_b)); - (my_as_op)((my_a),(my_op)); - (my_as_emit)((my_a),((unsigned long)(((unsigned long)((unsigned long)(((unsigned long)(192UL))+((unsigned long)((unsigned long)(((unsigned long)((unsigned long)(((unsigned long)(my_r))<<((unsigned long)(3UL)))))&((unsigned long)(56UL))))))))+((unsigned long)((unsigned long)(((unsigned long)(my_b))&((unsigned long)(7UL)))))))); -} -void( my_as_op)(struct my_assembler* my_a,unsigned long my_op){ - if ((unsigned long)(((long)(my_op))>((long)(255UL)))) { - (my_as_emit)((my_a),((unsigned long)(((unsigned long)(my_op))>>((unsigned long)(8UL))))); - (my_as_emit)((my_a),(my_op)); - } else { - (my_as_emit)((my_a),(my_op)); + if ((unsigned long)(((long)(my_tag))==((long)(my_P_break_stmt)))) { + return (unsigned char *)"break_stmt"; } -} -void( my_as_opr)(struct my_assembler* my_a,unsigned long my_op,unsigned long my_r){ - if ((unsigned long)(((unsigned long)(((long)(my_r))<((long)(0UL))))||((unsigned long)(((long)(my_r))>((long)(15UL)))))) { - (my_die)(((unsigned char *)"invalid reg")); + if ((unsigned long)(((long)(my_tag))==((long)(my_P_continue_stmt)))) { + return (unsigned char *)"continue_stmt"; } - if ((unsigned long)(((unsigned long)(((long)(my_op))!=((long)(my_OP_PUSHR))))&&((unsigned long)(((unsigned long)(((long)(my_op))!=((long)(my_OP_POPR))))||((unsigned long)(((long)(my_r))>((long)(7UL)))))))) { - (my_as_rex)((my_a),(my_op),(my_r),(0UL),(0UL)); + if ((unsigned long)(((long)(my_tag))==((long)(my_P_return_stmt)))) { + return (unsigned char *)"return_stmt"; } - (my_as_op)((my_a),((unsigned long)(((unsigned long)(my_op))+((unsigned long)((unsigned long)(((unsigned long)(my_r))&((unsigned long)(7UL)))))))); -} -void( my_as_opri64)(struct my_assembler* my_a,unsigned long my_op,unsigned long my_r,unsigned long my_x){ - if ((unsigned long)(((long)(my_op))!=((long)(my_OP_MOVABS)))) { - (my_die)(((unsigned char *)"only movabs")); + if ((unsigned long)(((long)(my_tag))==((long)(my_P_var_stmt)))) { + return (unsigned char *)"var_stmt"; } - (my_as_opr)((my_a),(my_op),(my_r)); - (my_as_emit)((my_a),(my_x)); - (my_as_emit)((my_a),((unsigned long)(((unsigned long)(my_x))>>((unsigned long)(8UL))))); - (my_as_emit)((my_a),((unsigned long)(((unsigned long)(my_x))>>((unsigned long)(16UL))))); - (my_as_emit)((my_a),((unsigned long)(((unsigned long)(my_x))>>((unsigned long)(24UL))))); - (my_as_emit)((my_a),((unsigned long)(((unsigned long)(my_x))>>((unsigned long)(32UL))))); - (my_as_emit)((my_a),((unsigned long)(((unsigned long)(my_x))>>((unsigned long)(40UL))))); - (my_as_emit)((my_a),((unsigned long)(((unsigned long)(my_x))>>((unsigned long)(48UL))))); - (my_as_emit)((my_a),((unsigned long)(((unsigned long)(my_x))>>((unsigned long)(56UL))))); -} -void( my_as_rex)(struct my_assembler* my_a,unsigned long my_op,unsigned long my_r,unsigned long my_i,unsigned long my_b){ - unsigned long my_w = 0; - if ((my_a)->my_bits32) { - return; + if ((unsigned long)(((long)(my_tag))==((long)(my_P_label_stmt)))) { + return (unsigned char *)"label_stmt"; } - (my_w)=(8UL); - if ((unsigned long)(((unsigned long)(((long)(my_op))==((long)(my_OP_LOADB))))||((unsigned long)(((long)(my_op))==((long)(my_OP_STOREB)))))) { - (my_w)=(0UL); + if ((unsigned long)(((long)(my_tag))==((long)(my_P_goto_stmt)))) { + return (unsigned char *)"goto_stmt"; } - (my_as_emit)((my_a),((unsigned long)(((unsigned long)((unsigned long)(((unsigned long)((unsigned long)(((unsigned long)((unsigned long)(((unsigned long)(64UL))+((unsigned long)(my_w)))))+((unsigned long)((unsigned long)(((unsigned long)((unsigned long)(((unsigned long)(my_r))>>((unsigned long)(1UL)))))&((unsigned long)(4UL))))))))+((unsigned long)((unsigned long)(((unsigned long)((unsigned long)(((unsigned long)(my_i))>>((unsigned long)(2UL)))))&((unsigned long)(2UL))))))))+((unsigned long)((unsigned long)(((unsigned long)((unsigned long)(((unsigned long)(my_b))>>((unsigned long)(3UL)))))&((unsigned long)(1UL)))))))); -} -void( my_assert)(unsigned long my_x,unsigned char* my_msg){ - if ((unsigned long)(!(my_x))) { - (my_die)((my_msg)); + if ((unsigned long)(((long)(my_tag))==((long)(my_P_assign_stmt)))) { + return (unsigned char *)"assign_stmt"; } -} -unsigned long( my_bind)(unsigned long my_fd,unsigned char* my_addr,unsigned long my_len){ - return (my_syscall)((49UL),(my_fd),((unsigned long)my_addr),((unsigned long)my_len),(0UL),(0UL),(0UL)); -} -void( my_bzero)(unsigned char* my_s,unsigned long my_size){ - unsigned long my_i = 0; - (my_i)=(0UL); - while (1) { - if ((unsigned long)(((long)(my_i))==((long)(my_size)))) { - break; + if ((unsigned long)(((long)(my_tag))==((long)(my_P_expr_stmt)))) { + return (unsigned char *)"expr_stmt"; } - ((my_s)[my_i])=((unsigned char)0UL); - (my_i)=((unsigned long)(((unsigned long)(my_i))+((unsigned long)(1UL)))); + if ((unsigned long)(((long)(my_tag))==((long)(my_P_empty_stmt)))) { + return (unsigned char *)"empty_stmt"; } -} -void( my_cdie)(struct my_compiler* my_c,unsigned char* my_msg){ - (my_cshow_context)((my_c)); - (my_fdputs)((2UL),((unsigned char *)"cdie: ")); - (my_fdputs)((2UL),(my_msg)); - (my_fdputs)((2UL),((unsigned char *)"\012")); - (my_exit)((1UL)); -} -unsigned long( my_charset)(struct my_peg* my_c,unsigned char* my_s){ - unsigned long my_i = 0; - unsigned long my_ch = 0; - (my_ch)=((my_get)((my_c))); - (my_i)=(0UL); - while (1) { - if ((unsigned long)(!((my_s)[my_i]))) { - (my_fail)((my_c)); - return 0UL; + if ((unsigned long)(((long)(my_tag))==((long)(my_P_compound_stmt)))) { + return (unsigned char *)"compound_stmt"; } - if ((unsigned long)(((long)(my_ch))==((long)((unsigned long)(my_s)[my_i])))) { - break; + if ((unsigned long)(((long)(my_tag))==((long)(my_P_expr)))) { + return (unsigned char *)"expr"; } - (my_i)=((unsigned long)(((unsigned long)(my_i))+((unsigned long)(1UL)))); + if ((unsigned long)(((long)(my_tag))==((long)(my_P_band_op)))) { + return (unsigned char *)"band_op"; } - return 1UL; -} -void( my_choice)(struct my_peg* my_c){ - if ((unsigned long)(((long)((my_c)->my_sp))==((long)((my_c)->my_limit)))) { - (my_die)(((unsigned char *)"choice overflow")); + if ((unsigned long)(((long)(my_tag))==((long)(my_P_bor_op)))) { + return (unsigned char *)"bor_op"; } - ((((my_c)->my_stack)[(my_c)->my_sp]).my_pos)=((my_c)->my_pos); - ((((my_c)->my_stack)[(my_c)->my_sp]).my_depth)=((my_c)->my_depth); - ((((my_c)->my_stack)[(my_c)->my_sp]).my_op)=((my_c)->my_op); - ((((my_c)->my_stack)[(my_c)->my_sp]).my_tag)=((my_c)->my_tag); - ((((my_c)->my_stack)[(my_c)->my_sp]).my_line)=((my_c)->my_line); - ((((my_c)->my_stack)[(my_c)->my_sp]).my_col)=((my_c)->my_col); - ((my_c)->my_sp)=((unsigned long)(((unsigned long)((my_c)->my_sp))+((unsigned long)(1UL)))); -} -unsigned long( my_close)(unsigned long my_fd){ - return (my_syscall)((3UL),(my_fd),(0UL),(0UL),(0UL),(0UL),(0UL)); -} -void( my_commit)(struct my_peg* my_c){ - if ((unsigned long)(((long)((my_c)->my_sp))==((long)(0UL)))) { - (my_die)(((unsigned char *)"commit underflow")); + if ((unsigned long)(((long)(my_tag))==((long)(my_P_bool_expr)))) { + return (unsigned char *)"bool_expr"; } - ((my_c)->my_sp)=((unsigned long)(((unsigned long)((my_c)->my_sp))-((unsigned long)(1UL)))); -} -struct my_compiler*( my_comp_setup)(struct my_alloc* my_a){ - struct my_compiler* my_c = 0; - (my_c)=((struct my_compiler*)(my_alloc)((my_a),(72UL))); - ((my_c)->my_a)=(my_a); - ((my_c)->my_p)=((my_setup_parser)((my_a))); - ((my_c)->my_filename)=((unsigned char*)0UL); - ((my_c)->my_lineno)=(0UL); - ((my_c)->my_colno)=(0UL); - ((my_c)->my_as)=((my_setup_assembler)((my_a))); - ((my_c)->my_decls)=((struct my_decl*)0UL); - ((my_c)->my_do_cout)=(0UL); - ((my_c)->my_cout)=((struct my_file*)0UL); - return my_c; -} -void( my_compile)(struct my_compiler* my_c,struct my_node* my_p){ - struct my_node* my_n = 0; - struct my_decl* my_d = 0; - unsigned long my_kind = 0; - (my_n)=(my_p); - while (1) { - if ((unsigned long)(!(my_n))) { - break; + if ((unsigned long)(((long)(my_tag))==((long)(my_P_le_op)))) { + return (unsigned char *)"le_op"; } - (my_kind)=(((my_n)->my_a)->my_kind); - if ((unsigned long)(((long)(my_kind))==((long)(my_N_STRUCT)))) { - (my_defstruct)((my_c),((my_n)->my_a)); - } else if ((unsigned long)(((long)(my_kind))==((long)(my_N_ENUM)))) { - (my_defenum)((my_c),((my_n)->my_a)); - } else if ((unsigned long)(((unsigned long)(((long)(my_kind))!=((long)(my_N_FUNC))))&&((unsigned long)(((long)(my_kind))!=((long)(my_N_FUNCDECL)))))) { - (my_cdie)((my_c),((unsigned char *)"invalid decl")); + if ((unsigned long)(((long)(my_tag))==((long)(my_P_ge_op)))) { + return (unsigned char *)"ge_op"; } - (my_n)=((my_n)->my_b); + if ((unsigned long)(((long)(my_tag))==((long)(my_P_lt_op)))) { + return (unsigned char *)"lt_op"; } - (my_n)=(my_p); - while (1) { - if ((unsigned long)(!(my_n))) { - break; + if ((unsigned long)(((long)(my_tag))==((long)(my_P_gt_op)))) { + return (unsigned char *)"gt_op"; } - (my_kind)=(((my_n)->my_a)->my_kind); - if ((unsigned long)(((long)(my_kind))==((long)(my_N_FUNCDECL)))) { - (my_defextern)((my_c),((my_n)->my_a)); - } else if ((unsigned long)(((long)(my_kind))==((long)(my_N_FUNC)))) { - (my_defun)((my_c),((my_n)->my_a)); + if ((unsigned long)(((long)(my_tag))==((long)(my_P_eq_op)))) { + return (unsigned char *)"eq_op"; } - (my_n)=((my_n)->my_b); + if ((unsigned long)(((long)(my_tag))==((long)(my_P_ne_op)))) { + return (unsigned char *)"ne_op"; } - (my_d)=((my_first_decl)((my_c))); - while (1) { - if ((unsigned long)(!(my_d))) { - break; + if ((unsigned long)(((long)(my_tag))==((long)(my_P_comp_expr)))) { + return (unsigned char *)"comp_expr"; } - if ((my_d)->my_struct_defined) { - (my_layout_struct)((my_c),(my_d)); + if ((unsigned long)(((long)(my_tag))==((long)(my_P_add_op)))) { + return (unsigned char *)"add_op"; } - (my_d)=((my_next_decl)((my_c),(my_d))); + if ((unsigned long)(((long)(my_tag))==((long)(my_P_sub_op)))) { + return (unsigned char *)"sub_op"; } - (my_d)=((my_first_decl)((my_c))); - while (1) { - if ((unsigned long)(!(my_d))) { - break; + if ((unsigned long)(((long)(my_tag))==((long)(my_P_or_op)))) { + return (unsigned char *)"or_op"; } - if ((my_d)->my_func_defined) { - (my_compile_func)((my_c),(my_d)); + if ((unsigned long)(((long)(my_tag))==((long)(my_P_xor_op)))) { + return (unsigned char *)"xor_op"; } - (my_d)=((my_next_decl)((my_c),(my_d))); + if ((unsigned long)(((long)(my_tag))==((long)(my_P_add_expr)))) { + return (unsigned char *)"add_expr"; } -} -void( my_compile_expr)(struct my_compiler* my_c,struct my_decl* my_d,struct my_node* my_n,unsigned long my_rhs){ - struct my_label* my_no = 0; - struct my_label* my_out = 0; - struct my_decl* my_v = 0; - unsigned long my_kind = 0; - ((my_c)->my_filename)=((my_n)->my_filename); - ((my_c)->my_lineno)=((my_n)->my_lineno); - ((my_c)->my_colno)=((my_n)->my_colno); - (my_kind)=((my_n)->my_kind); - if ((unsigned long)(((long)(my_kind))==((long)(my_N_STR)))) { - if ((unsigned long)(!(my_rhs))) { - (my_cdie)((my_c),((unsigned char *)"str is not an lexpr")); + if ((unsigned long)(((long)(my_tag))==((long)(my_P_mul_op)))) { + return (unsigned char *)"mul_op"; } - (my_emit_str)(((my_c)->my_as),((my_n)->my_s)); - ((my_n)->my_t)=((my_mktype1)((my_c),(my_TY_PTR),((my_mktype0)((my_c),(my_TY_BYTE))))); - } else if ((unsigned long)(((long)(my_kind))==((long)(my_N_NUM)))) { - if ((unsigned long)(!(my_rhs))) { - (my_cdie)((my_c),((unsigned char *)"num is not an lexpr")); + if ((unsigned long)(((long)(my_tag))==((long)(my_P_div_op)))) { + return (unsigned char *)"div_op"; } - (my_emit_num)(((my_c)->my_as),((my_n)->my_n)); - ((my_n)->my_t)=((my_mktype0)((my_c),(my_TY_INT))); - } else if ((unsigned long)(((long)(my_kind))==((long)(my_N_CHAR)))) { - if ((unsigned long)(!(my_rhs))) { - (my_cdie)((my_c),((unsigned char *)"char is not an lexpr")); + if ((unsigned long)(((long)(my_tag))==((long)(my_P_mod_op)))) { + return (unsigned char *)"mod_op"; } - (my_emit_num)(((my_c)->my_as),((my_n)->my_n)); - ((my_n)->my_t)=((my_mktype0)((my_c),(my_TY_INT))); - } else if ((unsigned long)(((long)(my_kind))==((long)(my_N_EXPRLIST)))) { - if ((unsigned long)(!(my_rhs))) { - (my_cdie)((my_c),((unsigned char *)"call is not an lexpr")); + if ((unsigned long)(((long)(my_tag))==((long)(my_P_and_op)))) { + return (unsigned char *)"and_op"; } - if ((my_n)->my_b) { - (my_compile_expr)((my_c),(my_d),((my_n)->my_b),(1UL)); + if ((unsigned long)(((long)(my_tag))==((long)(my_P_mul_expr)))) { + return (unsigned char *)"mul_expr"; } - (my_compile_expr)((my_c),(my_d),((my_n)->my_a),(1UL)); - if ((my_n)->my_b) { - ((my_n)->my_t)=((my_mktype2)((my_c),(my_TY_ARG),(((my_n)->my_a)->my_t),(((my_n)->my_b)->my_t))); - } else { - ((my_n)->my_t)=((my_mktype1)((my_c),(my_TY_ARG),(((my_n)->my_a)->my_t))); + if ((unsigned long)(((long)(my_tag))==((long)(my_P_lsh_op)))) { + return (unsigned char *)"lsh_op"; } - } else if ((unsigned long)(((long)(my_kind))==((long)(my_N_CALL)))) { - if ((unsigned long)(!(my_rhs))) { - (my_cdie)((my_c),((unsigned char *)"call is not an lexpr")); + if ((unsigned long)(((long)(my_tag))==((long)(my_P_rsh_op)))) { + return (unsigned char *)"rsh_op"; } - if ((my_n)->my_b) { - (my_compile_expr)((my_c),(my_d),((my_n)->my_b),(1UL)); + if ((unsigned long)(((long)(my_tag))==((long)(my_P_shift_expr)))) { + return (unsigned char *)"shift_expr"; } - if ((unsigned long)(((long)(((my_n)->my_a)->my_kind))==((long)(my_N_IDENT)))) { - (my_v)=((my_find)((my_c),(((my_n)->my_a)->my_s),((unsigned char*)0UL),(0UL))); - if ((unsigned long)((my_v)&&((my_v)->my_enum_defined))) { - (my_cdie)((my_c),((unsigned char *)"type error")); + if ((unsigned long)(((long)(my_tag))==((long)(my_P_ref_op)))) { + return (unsigned char *)"ref_op"; } - (my_v)=((my_find)((my_c),((my_d)->my_name),(((my_n)->my_a)->my_s),(0UL))); - if ((unsigned long)((my_v)&&((my_v)->my_var_defined))) { - (my_emit_lea)(((my_c)->my_as),((my_v)->my_var_offset)); - (((my_n)->my_a)->my_t)=((my_v)->my_var_type); - (my_emit_load)(((my_c)->my_as),(((my_n)->my_a)->my_t)); - (my_emit_call)(((my_c)->my_as),((my_count_args)((my_c),((((my_n)->my_a)->my_t)->my_arg)))); - } else if ((unsigned long)(!((my_strcmp)((((my_n)->my_a)->my_s),((unsigned char *)"_include"))))) { - (my_v)=((my_find)((my_c),(((my_n)->my_a)->my_s),((unsigned char*)0UL),(0UL))); - if ((unsigned long)(((unsigned long)(!(my_v)))||((unsigned long)(!((my_v)->my_func_defined))))) { - (my_cdie)((my_c),((unsigned char *)"no such function")); + if ((unsigned long)(((long)(my_tag))==((long)(my_P_deref_op)))) { + return (unsigned char *)"deref_op"; } - (((my_n)->my_a)->my_t)=((my_v)->my_func_type); - (my_compile_include)((my_c),(my_n)); - } else { - (my_v)=((my_find)((my_c),(((my_n)->my_a)->my_s),((unsigned char*)0UL),(0UL))); - if ((unsigned long)(((unsigned long)(!(my_v)))||((unsigned long)(!((my_v)->my_func_defined))))) { - (my_cdie)((my_c),((unsigned char *)"no such function")); - } - (((my_n)->my_a)->my_t)=((my_v)->my_func_type); - (my_emit_lcall)(((my_c)->my_as),((my_v)->my_func_label),((my_count_args)((my_c),((((my_n)->my_a)->my_t)->my_arg)))); + if ((unsigned long)(((long)(my_tag))==((long)(my_P_pos_op)))) { + return (unsigned char *)"pos_op"; } - } else { - (my_compile_expr)((my_c),(my_d),((my_n)->my_a),(1UL)); - (my_emit_call)(((my_c)->my_as),((my_count_args)((my_c),((((my_n)->my_a)->my_t)->my_arg)))); + if ((unsigned long)(((long)(my_tag))==((long)(my_P_neg_op)))) { + return (unsigned char *)"neg_op"; } - if ((unsigned long)(((long)((((my_n)->my_a)->my_t)->my_kind))!=((long)(my_TY_FUNC)))) { - (my_cdie)((my_c),((unsigned char *)"calling not a function")); + if ((unsigned long)(((long)(my_tag))==((long)(my_P_not_op)))) { + return (unsigned char *)"not_op"; } - if ((my_n)->my_b) { - (my_unify)((my_c),((((my_n)->my_a)->my_t)->my_arg),(((my_n)->my_b)->my_t)); - } else { - (my_unify)((my_c),((((my_n)->my_a)->my_t)->my_arg),((struct my_type*)0UL)); + if ((unsigned long)(((long)(my_tag))==((long)(my_P_bnot_op)))) { + return (unsigned char *)"bnot_op"; } - ((my_n)->my_t)=((((my_n)->my_a)->my_t)->my_val); - } 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)))) { - if ((unsigned long)(((long)(((((my_n)->my_a)->my_t)->my_val)->my_kind))!=((long)(my_TY_STRUCT)))) { - (my_cdie)((my_c),((unsigned char *)"dot not a struct")); + if ((unsigned long)(((long)(my_tag))==((long)(my_P_unary_expr)))) { + return (unsigned char *)"unary_expr"; } - (my_v)=((my_find)((my_c),((((((my_n)->my_a)->my_t)->my_val)->my_st)->my_name),(((my_n)->my_b)->my_s),(0UL))); - (my_emit_load)(((my_c)->my_as),(((my_n)->my_a)->my_t)); - } else { - if ((unsigned long)(((long)((((my_n)->my_a)->my_t)->my_kind))!=((long)(my_TY_STRUCT)))) { - (my_cdie)((my_c),((unsigned char *)"dot not a struct")); + if ((unsigned long)(((long)(my_tag))==((long)(my_P_index_expr)))) { + return (unsigned char *)"index_expr"; } - (my_v)=((my_find)((my_c),(((((my_n)->my_a)->my_t)->my_st)->my_name),(((my_n)->my_b)->my_s),(0UL))); + if ((unsigned long)(((long)(my_tag))==((long)(my_P_call_expr)))) { + return (unsigned char *)"call_expr"; } - if ((unsigned long)(((unsigned long)(!(my_v)))||((unsigned long)(!((my_v)->my_member_defined))))) { - (my_cdie)((my_c),((unsigned char *)"no such member")); + if ((unsigned long)(((long)(my_tag))==((long)(my_P_member_expr)))) { + return (unsigned char *)"member_expr"; } - (my_emit_num)(((my_c)->my_as),((my_v)->my_member_offset)); - (my_emit_add)(((my_c)->my_as)); - ((my_n)->my_t)=((my_v)->my_member_type); - if (my_rhs) { - (my_emit_load)(((my_c)->my_as),((my_n)->my_t)); + if ((unsigned long)(((long)(my_tag))==((long)(my_P_cast_expr)))) { + return (unsigned char *)"cast_expr"; } - } else if ((unsigned long)(((long)(my_kind))==((long)(my_N_IDENT)))) { - (my_v)=((my_find)((my_c),((my_n)->my_s),((unsigned char*)0UL),(0UL))); - if ((unsigned long)((my_v)&&((my_v)->my_enum_defined))) { - (my_emit_num)(((my_c)->my_as),((my_v)->my_enum_value)); - ((my_n)->my_t)=((my_mktype0)((my_c),(my_TY_INT))); - return; + if ((unsigned long)(((long)(my_tag))==((long)(my_P_post_expr)))) { + return (unsigned char *)"post_expr"; } - (my_v)=((my_find)((my_c),((my_d)->my_name),((my_n)->my_s),(0UL))); - if ((unsigned long)((my_v)&&((my_v)->my_var_defined))) { - (my_emit_lea)(((my_c)->my_as),((my_v)->my_var_offset)); - ((my_n)->my_t)=((my_v)->my_var_type); - if (my_rhs) { - (my_emit_load)(((my_c)->my_as),((my_n)->my_t)); + if ((unsigned long)(((long)(my_tag))==((long)(my_P_primary)))) { + return (unsigned char *)"primary"; } - return; + if ((unsigned long)(((long)(my_tag))==((long)(my_P_sizeof_expr)))) { + return (unsigned char *)"sizeof_expr"; } - (my_v)=((my_find)((my_c),((my_n)->my_s),((unsigned char*)0UL),(0UL))); - if ((unsigned long)((my_v)&&((my_v)->my_func_defined))) { - (my_emit_ptr)(((my_c)->my_as),((my_v)->my_func_label)); - ((my_n)->my_t)=((my_v)->my_func_type); - return; + if ((unsigned long)(((long)(my_tag))==((long)(my_P_hex)))) { + return (unsigned char *)"hex"; } - (my_cdie)((my_c),((unsigned char *)"no such variable")); - } else if ((unsigned long)(((long)(my_kind))==((long)(my_N_ASSIGN)))) { - if ((unsigned long)(!(my_rhs))) { - (my_cdie)((my_c),((unsigned char *)"assign is not an lexpr")); + if ((unsigned long)(((long)(my_tag))==((long)(my_P_dec)))) { + return (unsigned char *)"dec"; } - (my_compile_expr)((my_c),(my_d),((my_n)->my_b),(1UL)); - (my_compile_expr)((my_c),(my_d),((my_n)->my_a),(0UL)); - (my_unify)((my_c),(((my_n)->my_a)->my_t),(((my_n)->my_b)->my_t)); - ((my_n)->my_t)=(((my_n)->my_a)->my_t); - (my_emit_store)(((my_c)->my_as),((my_n)->my_t)); - } else if ((unsigned long)(((long)(my_kind))==((long)(my_N_SIZEOF)))) { - if ((unsigned long)(!(my_rhs))) { - (my_cdie)((my_c),((unsigned char *)"sizeof is not an lexpr")); + if ((unsigned long)(((long)(my_tag))==((long)(my_P_str)))) { + return (unsigned char *)"str"; } - (my_out)=((my_mklabel)(((my_c)->my_as))); - (my_emit_jmp)(((my_c)->my_as),(my_out)); - (my_compile_expr)((my_c),(my_d),((my_n)->my_a),(0UL)); - (my_fixup_label)(((my_c)->my_as),(my_out)); - if ((unsigned long)(((long)((((my_n)->my_a)->my_t)->my_kind))==((long)(my_TY_BYTE)))) { - (my_emit_num)(((my_c)->my_as),(1UL)); - } else { - (my_emit_num)(((my_c)->my_as),((my_type_sizeof)((my_c),(((my_n)->my_a)->my_t)))); + if ((unsigned long)(((long)(my_tag))==((long)(my_P_char)))) { + return (unsigned char *)"char"; } - ((my_n)->my_t)=((my_mktype0)((my_c),(my_TY_INT))); - } else if ((unsigned long)(((long)(my_kind))==((long)(my_N_REF)))) { - if ((unsigned long)(!(my_rhs))) { - (my_cdie)((my_c),((unsigned char *)"ref is not an lexpr")); + if ((unsigned long)(((long)(my_tag))==((long)(my_P_reserved)))) { + return (unsigned char *)"reserved"; } - (my_compile_expr)((my_c),(my_d),((my_n)->my_a),(0UL)); - ((my_n)->my_t)=((my_mktype1)((my_c),(my_TY_PTR),(((my_n)->my_a)->my_t))); - } else if ((unsigned long)(((long)(my_kind))==((long)(my_N_DEREF)))) { - (my_compile_expr)((my_c),(my_d),((my_n)->my_a),(1UL)); - if ((unsigned long)(((long)((((my_n)->my_a)->my_t)->my_kind))!=((long)(my_TY_PTR)))) { - (my_cdie)((my_c),((unsigned char *)"deref not a pointer")); + if ((unsigned long)(((long)(my_tag))==((long)(my_P_return)))) { + return (unsigned char *)"return"; } - ((my_n)->my_t)=((((my_n)->my_a)->my_t)->my_val); - if (my_rhs) { - (my_emit_load)(((my_c)->my_as),((my_n)->my_t)); + if ((unsigned long)(((long)(my_tag))==((long)(my_P_break)))) { + return (unsigned char *)"break"; } - } else if ((unsigned long)(((long)(my_kind))==((long)(my_N_INDEX)))) { - (my_compile_expr)((my_c),(my_d),((my_n)->my_a),(1UL)); - (my_compile_expr)((my_c),(my_d),((my_n)->my_b),(1UL)); - if ((unsigned long)(((long)((((my_n)->my_a)->my_t)->my_kind))!=((long)(my_TY_PTR)))) { - (my_cdie)((my_c),((unsigned char *)"not a pointer")); + if ((unsigned long)(((long)(my_tag))==((long)(my_P_sizeof)))) { + return (unsigned char *)"sizeof"; } - if ((unsigned long)(!((my_type_isint)((((my_n)->my_b)->my_t))))) { - (my_cdie)((my_c),((unsigned char *)"index: not an int")); + if ((unsigned long)(((long)(my_tag))==((long)(my_P_if)))) { + return (unsigned char *)"if"; } - ((my_n)->my_t)=((((my_n)->my_a)->my_t)->my_val); - if ((unsigned long)(((long)(((my_n)->my_t)->my_kind))==((long)(my_TY_BYTE)))) { - (my_emit_num)(((my_c)->my_as),(1UL)); - } else { - (my_emit_num)(((my_c)->my_as),((my_type_sizeof)((my_c),((my_n)->my_t)))); + if ((unsigned long)(((long)(my_tag))==((long)(my_P_else)))) { + return (unsigned char *)"else"; } - (my_emit_mul)(((my_c)->my_as)); - (my_emit_add)(((my_c)->my_as)); - if (my_rhs) { - (my_emit_load)(((my_c)->my_as),((my_n)->my_t)); + if ((unsigned long)(((long)(my_tag))==((long)(my_P_loop)))) { + return (unsigned char *)"loop"; } - } else if ((unsigned long)(((long)(my_kind))==((long)(my_N_LT)))) { - if ((unsigned long)(!(my_rhs))) { - (my_cdie)((my_c),((unsigned char *)"not lexpr")); + if ((unsigned long)(((long)(my_tag))==((long)(my_P_continue)))) { + return (unsigned char *)"continue"; } - (my_compile_expr)((my_c),(my_d),((my_n)->my_b),(1UL)); - (my_compile_expr)((my_c),(my_d),((my_n)->my_a),(1UL)); - (my_emit_lt)(((my_c)->my_as)); - (my_unify)((my_c),(((my_n)->my_a)->my_t),(((my_n)->my_b)->my_t)); - if ((unsigned long)(!((my_type_isprim)((((my_n)->my_a)->my_t))))) { - (my_cdie)((my_c),((unsigned char *)"lt: not an int")); + if ((unsigned long)(((long)(my_tag))==((long)(my_P_goto)))) { + return (unsigned char *)"goto"; } - ((my_n)->my_t)=(((my_n)->my_a)->my_t); - } else if ((unsigned long)(((long)(my_kind))==((long)(my_N_GT)))) { - if ((unsigned long)(!(my_rhs))) { - (my_cdie)((my_c),((unsigned char *)"not lexpr")); + if ((unsigned long)(((long)(my_tag))==((long)(my_P_var)))) { + return (unsigned char *)"var"; } - (my_compile_expr)((my_c),(my_d),((my_n)->my_b),(1UL)); - (my_compile_expr)((my_c),(my_d),((my_n)->my_a),(1UL)); - (my_emit_gt)(((my_c)->my_as)); - (my_unify)((my_c),(((my_n)->my_a)->my_t),(((my_n)->my_b)->my_t)); - if ((unsigned long)(!((my_type_isprim)((((my_n)->my_a)->my_t))))) { - (my_cdie)((my_c),((unsigned char *)"gt: not an int")); + if ((unsigned long)(((long)(my_tag))==((long)(my_P_enum)))) { + return (unsigned char *)"enum"; } - ((my_n)->my_t)=(((my_n)->my_a)->my_t); - } else if ((unsigned long)(((long)(my_kind))==((long)(my_N_LE)))) { - if ((unsigned long)(!(my_rhs))) { - (my_cdie)((my_c),((unsigned char *)"not lexpr")); + if ((unsigned long)(((long)(my_tag))==((long)(my_P_struct)))) { + return (unsigned char *)"struct"; } - (my_compile_expr)((my_c),(my_d),((my_n)->my_b),(1UL)); - (my_compile_expr)((my_c),(my_d),((my_n)->my_a),(1UL)); - (my_emit_le)(((my_c)->my_as)); - (my_unify)((my_c),(((my_n)->my_a)->my_t),(((my_n)->my_b)->my_t)); - if ((unsigned long)(!((my_type_isprim)((((my_n)->my_a)->my_t))))) { - (my_cdie)((my_c),((unsigned char *)"le: not an int")); + if ((unsigned long)(((long)(my_tag))==((long)(my_P_byte)))) { + return (unsigned char *)"byte"; } - ((my_n)->my_t)=(((my_n)->my_a)->my_t); - } else if ((unsigned long)(((long)(my_kind))==((long)(my_N_GE)))) { - if ((unsigned long)(!(my_rhs))) { - (my_cdie)((my_c),((unsigned char *)"not lexpr")); + if ((unsigned long)(((long)(my_tag))==((long)(my_P_int)))) { + return (unsigned char *)"int"; } - (my_compile_expr)((my_c),(my_d),((my_n)->my_b),(1UL)); - (my_compile_expr)((my_c),(my_d),((my_n)->my_a),(1UL)); - (my_emit_ge)(((my_c)->my_as)); - (my_unify)((my_c),(((my_n)->my_a)->my_t),(((my_n)->my_b)->my_t)); - if ((unsigned long)(!((my_type_isprim)((((my_n)->my_a)->my_t))))) { - (my_cdie)((my_c),((unsigned char *)"ge: not an int")); + if ((unsigned long)(((long)(my_tag))==((long)(my_P_void)))) { + return (unsigned char *)"void"; } - ((my_n)->my_t)=(((my_n)->my_a)->my_t); - } else if ((unsigned long)(((long)(my_kind))==((long)(my_N_EQ)))) { - if ((unsigned long)(!(my_rhs))) { - (my_cdie)((my_c),((unsigned char *)"not lexpr")); + if ((unsigned long)(((long)(my_tag))==((long)(my_P_func)))) { + return (unsigned char *)"func"; } - (my_compile_expr)((my_c),(my_d),((my_n)->my_b),(1UL)); - (my_compile_expr)((my_c),(my_d),((my_n)->my_a),(1UL)); - (my_emit_eq)(((my_c)->my_as)); - (my_unify)((my_c),(((my_n)->my_a)->my_t),(((my_n)->my_b)->my_t)); - if ((unsigned long)(!((my_type_isprim)((((my_n)->my_a)->my_t))))) { - (my_cdie)((my_c),((unsigned char *)"eq: not an int")); + if ((unsigned long)(((long)(my_tag))==((long)(my_P_ident)))) { + return (unsigned char *)"ident"; } - ((my_n)->my_t)=(((my_n)->my_a)->my_t); - } else if ((unsigned long)(((long)(my_kind))==((long)(my_N_NE)))) { - if ((unsigned long)(!(my_rhs))) { - (my_cdie)((my_c),((unsigned char *)"not lexpr")); + if ((unsigned long)(((long)(my_tag))==((long)(my_P_sp)))) { + return (unsigned char *)"sp"; } - (my_compile_expr)((my_c),(my_d),((my_n)->my_b),(1UL)); - (my_compile_expr)((my_c),(my_d),((my_n)->my_a),(1UL)); - (my_emit_ne)(((my_c)->my_as)); - (my_unify)((my_c),(((my_n)->my_a)->my_t),(((my_n)->my_b)->my_t)); - if ((unsigned long)(!((my_type_isprim)((((my_n)->my_a)->my_t))))) { - (my_cdie)((my_c),((unsigned char *)"ne: not an int")); + (my_die)(((unsigned char *)"invalid tag")); +} +void( my__start)(unsigned long my_argc,unsigned char** my_argv,unsigned char** my_envp){ + (my_main)((my_argc),(my_argv),(my_envp)); + (my_exit)((0UL)); +} +unsigned long( my_accept)(unsigned long my_fd,unsigned char* my_addr,unsigned long* my_len){ + return (my_syscall)((43UL),(my_fd),((unsigned long)my_addr),((unsigned long)my_len),(0UL),(0UL),(0UL)); +} +void( my_addfixup)(struct my_assembler* my_c,struct my_label* my_l){ + struct my_fixup* my_f = 0; + unsigned char* my_here = 0; + if ((unsigned long)(((long)(((my_c)->my_text_end)->my_fill))<((long)(4UL)))) { + (my_die)(((unsigned char *)"invalid fixup")); } - ((my_n)->my_t)=(((my_n)->my_a)->my_t); - } else if ((unsigned long)(((long)(my_kind))==((long)(my_N_BNOT)))) { - if ((unsigned long)(!(my_rhs))) { - (my_cdie)((my_c),((unsigned char *)"not lexpr")); + (my_here)=(&((((my_c)->my_text_end)->my_buf)[(unsigned long)(((unsigned long)(((my_c)->my_text_end)->my_fill))-((unsigned long)(4UL)))])); + if ((my_l)->my_fixed) { + (my_fixup)((my_c),(my_here),((unsigned long)(((unsigned long)((my_l)->my_at))-((unsigned long)((my_c)->my_at))))); + } else { + (my_f)=((struct my_fixup*)(my_alloc)(((my_c)->my_a),(24UL))); + ((my_f)->my_next)=((my_l)->my_fix); + ((my_f)->my_ptr)=(my_here); + ((my_f)->my_at)=((my_c)->my_at); + ((my_l)->my_fix)=(my_f); } - (my_no)=((my_mklabel)(((my_c)->my_as))); - (my_out)=((my_mklabel)(((my_c)->my_as))); - (my_compile_expr)((my_c),(my_d),((my_n)->my_a),(1UL)); - (my_emit_jz)(((my_c)->my_as),(my_no)); - (my_emit_num)(((my_c)->my_as),(0UL)); - (my_emit_jmp)(((my_c)->my_as),(my_out)); - (my_fixup_label)(((my_c)->my_as),(my_no)); - (my_emit_num)(((my_c)->my_as),(1UL)); - (my_fixup_label)(((my_c)->my_as),(my_out)); - if ((unsigned long)(!((my_type_isprim)((((my_n)->my_a)->my_t))))) { - (my_cdie)((my_c),((unsigned char *)"not an prim")); - } - ((my_n)->my_t)=((my_mktype0)((my_c),(my_TY_INT))); - } else if ((unsigned long)(((long)(my_kind))==((long)(my_N_BOR)))) { - if ((unsigned long)(!(my_rhs))) { - (my_cdie)((my_c),((unsigned char *)"not lexpr")); +} +unsigned char*( my_alloc)(struct my_alloc* my_c,unsigned long my_size){ + struct my_page* my_page = 0; + unsigned long my_mret = 0; + unsigned char* my_ret = 0; + unsigned long my_psize = 0; + if ((unsigned long)(((long)(my_size))<((long)(0UL)))) { + (my_die)(((unsigned char *)"invalid alloc")); } - (my_no)=((my_mklabel)(((my_c)->my_as))); - (my_out)=((my_mklabel)(((my_c)->my_as))); - (my_compile_expr)((my_c),(my_d),((my_n)->my_a),(1UL)); - (my_emit_jz)(((my_c)->my_as),(my_no)); - (my_emit_num)(((my_c)->my_as),(1UL)); - (my_emit_jmp)(((my_c)->my_as),(my_out)); - (my_fixup_label)(((my_c)->my_as),(my_no)); - (my_no)=((my_mklabel)(((my_c)->my_as))); - (my_compile_expr)((my_c),(my_d),((my_n)->my_b),(1UL)); - (my_emit_jz)(((my_c)->my_as),(my_no)); - (my_emit_num)(((my_c)->my_as),(1UL)); - (my_emit_jmp)(((my_c)->my_as),(my_out)); - (my_fixup_label)(((my_c)->my_as),(my_no)); - (my_emit_num)(((my_c)->my_as),(0UL)); - (my_fixup_label)(((my_c)->my_as),(my_out)); - if ((unsigned long)(!((my_type_isprim)((((my_n)->my_a)->my_t))))) { - (my_cdie)((my_c),((unsigned char *)"not an prim")); + if ((unsigned long)(((long)(my_size))>=((long)(2048UL)))) { + (my_size)=((unsigned long)(((unsigned long)(my_size))+((unsigned long)(4095UL)))); + (my_size)=((unsigned long)(((unsigned long)(my_size))&((unsigned long)((unsigned long)(~(unsigned long)(4095UL)))))); + (my_mret)=((my_mmap)((0UL),(my_size),(3UL),(34UL),((unsigned long)(-(unsigned long)(1UL))),(0UL))); + if ((unsigned long)(((long)(my_mret))==((long)((unsigned long)(-(unsigned long)(1UL)))))) { + (my_die)(((unsigned char *)"out of memory")); } - if ((unsigned long)(!((my_type_isprim)((((my_n)->my_b)->my_t))))) { - (my_cdie)((my_c),((unsigned char *)"not an prim")); + (my_ret)=((unsigned char*)my_mret); + return my_ret; } - ((my_n)->my_t)=((my_mktype0)((my_c),(my_TY_INT))); - } else if ((unsigned long)(((long)(my_kind))==((long)(my_N_BAND)))) { - if ((unsigned long)(!(my_rhs))) { - (my_cdie)((my_c),((unsigned char *)"not lexpr")); + (my_page)=((my_c)->my_page); + if (my_page) { + if ((unsigned long)(((long)(my_size))<=((long)((unsigned long)(((unsigned long)((my_page)->my_size))-((unsigned long)((my_page)->my_fill))))))) { + (my_mret)=((unsigned long)(((unsigned long)((unsigned long)(my_page)->my_ptr))+((unsigned long)((my_page)->my_fill)))); + ((my_page)->my_fill)=((unsigned long)(((unsigned long)((my_page)->my_fill))+((unsigned long)(my_size)))); + (my_ret)=((unsigned char*)my_mret); + return my_ret; } - (my_no)=((my_mklabel)(((my_c)->my_as))); - (my_out)=((my_mklabel)(((my_c)->my_as))); - (my_compile_expr)((my_c),(my_d),((my_n)->my_a),(1UL)); - (my_emit_jz)(((my_c)->my_as),(my_no)); - (my_compile_expr)((my_c),(my_d),((my_n)->my_b),(1UL)); - (my_emit_jz)(((my_c)->my_as),(my_no)); - (my_emit_num)(((my_c)->my_as),(1UL)); - (my_emit_jmp)(((my_c)->my_as),(my_out)); - (my_fixup_label)(((my_c)->my_as),(my_no)); - (my_emit_num)(((my_c)->my_as),(0UL)); - (my_fixup_label)(((my_c)->my_as),(my_out)); - if ((unsigned long)(!((my_type_isprim)((((my_n)->my_a)->my_t))))) { - (my_cdie)((my_c),((unsigned char *)"not an prim")); } - if ((unsigned long)(!((my_type_isprim)((((my_n)->my_b)->my_t))))) { - (my_cdie)((my_c),((unsigned char *)"not an prim")); + (my_psize)=((unsigned long)(((long)(64UL))*((long)(1024UL)))); + (my_mret)=((my_mmap)((0UL),(my_psize),(3UL),(34UL),((unsigned long)(-(unsigned long)(1UL))),(0UL))); + if ((unsigned long)(((long)(my_mret))==((long)((unsigned long)(-(unsigned long)(1UL)))))) { + (my_die)(((unsigned char *)"out of memory")); } - ((my_n)->my_t)=((my_mktype0)((my_c),(my_TY_INT))); - } else if ((unsigned long)(((long)(my_kind))==((long)(my_N_POS)))) { - if ((unsigned long)(!(my_rhs))) { - (my_cdie)((my_c),((unsigned char *)"not lexpr")); + (my_page)=((struct my_page*)my_mret); + ((my_page)->my_ptr)=((unsigned char*)&((my_page)[1UL])); + (my_ret)=((my_page)->my_ptr); + ((my_page)->my_size)=((unsigned long)(((unsigned long)(my_psize))-((unsigned long)(24UL)))); + ((my_page)->my_fill)=(my_size); + ((my_c)->my_page)=(my_page); + return my_ret; +} +unsigned long( my_any)(struct my_peg* my_c){ + unsigned long my_ch = 0; + (my_ch)=((my_get)((my_c))); + if ((unsigned long)(((long)(my_ch))==((long)((unsigned long)(-(unsigned long)(1UL)))))) { + (my_fail)((my_c)); + return 0UL; } - (my_compile_expr)((my_c),(my_d),((my_n)->my_a),(1UL)); - if ((unsigned long)(!((my_type_isint)((((my_n)->my_a)->my_t))))) { - (my_cdie)((my_c),((unsigned char *)"pos: not an int")); + return 1UL; +} +void( my_as_emit)(struct my_assembler* my_a,unsigned long my_b){ + (my_emit)((my_a),(my_b)); +} +void( my_as_jmp)(struct my_assembler* my_a,unsigned long my_op,struct my_label* my_l){ + (my_reserve)((my_a),(16UL)); + (my_as_op)((my_a),(my_op)); + (my_as_emit)((my_a),(0UL)); + (my_as_emit)((my_a),(0UL)); + (my_as_emit)((my_a),(0UL)); + (my_as_emit)((my_a),(0UL)); + (my_addfixup)((my_a),(my_l)); +} +void( my_as_modm)(struct my_assembler* my_a,unsigned long my_op,unsigned long my_b,unsigned long my_i,unsigned long my_s,unsigned long my_d){ + (my_as_modrm)((my_a),((unsigned long)(((unsigned long)(my_op))&((unsigned long)(65535UL)))),((unsigned long)(((unsigned long)(my_op))>>((unsigned long)(16UL)))),(my_b),(my_i),(my_s),(my_d)); +} +void( my_as_modr)(struct my_assembler* my_a,unsigned long my_op,unsigned long my_b){ + (my_as_modrr)((my_a),((unsigned long)(((unsigned long)(my_op))&((unsigned long)(65535UL)))),((unsigned long)(((unsigned long)(my_op))>>((unsigned long)(16UL)))),(my_b)); +} +void( my_as_modra)(struct my_assembler* my_a,unsigned long my_op,unsigned long my_r,unsigned long my_d){ + (my_as_rex)((my_a),(my_op),(my_r),(0UL),(0UL)); + (my_as_op)((my_a),(my_op)); + (my_as_emit)((my_a),((unsigned long)(((unsigned long)((unsigned long)(((unsigned long)((unsigned long)(((unsigned long)(my_r))<<((unsigned long)(3UL)))))&((unsigned long)(56UL)))))+((unsigned long)(my_R_RSP))))); + (my_as_emit)((my_a),((unsigned long)(((unsigned long)((unsigned long)(((unsigned long)(my_R_RSP))<<((unsigned long)(3UL)))))+((unsigned long)(my_R_RBP))))); + (my_as_emit)((my_a),(my_d)); + (my_as_emit)((my_a),((unsigned long)(((unsigned long)(my_d))>>((unsigned long)(8UL))))); + (my_as_emit)((my_a),((unsigned long)(((unsigned long)(my_d))>>((unsigned long)(16UL))))); + (my_as_emit)((my_a),((unsigned long)(((unsigned long)(my_d))>>((unsigned long)(24UL))))); +} +void( my_as_modri)(struct my_assembler* my_a,unsigned long my_op,unsigned long my_r,unsigned long my_x){ + if ((unsigned long)(((unsigned long)(((long)(my_x))<((long)((unsigned long)(-(unsigned long)((unsigned long)(((unsigned long)(1UL))<<((unsigned long)(31UL)))))))))||((unsigned long)(((long)(my_x))>=((long)((unsigned long)(((unsigned long)(1UL))<<((unsigned long)(31UL))))))))) { + (my_die)(((unsigned char *)"immediate too large")); } - ((my_n)->my_t)=(((my_n)->my_a)->my_t); - } else if ((unsigned long)(((long)(my_kind))==((long)(my_N_NEG)))) { - if ((unsigned long)(!(my_rhs))) { - (my_cdie)((my_c),((unsigned char *)"not lexpr")); + (my_as_modrr)((my_a),((unsigned long)(((unsigned long)(my_op))&((unsigned long)(65535UL)))),((unsigned long)(((unsigned long)(my_op))>>((unsigned long)(16UL)))),(my_r)); + (my_as_emit)((my_a),(my_x)); + (my_as_emit)((my_a),((unsigned long)(((unsigned long)(my_x))>>((unsigned long)(8UL))))); + (my_as_emit)((my_a),((unsigned long)(((unsigned long)(my_x))>>((unsigned long)(16UL))))); + (my_as_emit)((my_a),((unsigned long)(((unsigned long)(my_x))>>((unsigned long)(24UL))))); +} +void( my_as_modrm)(struct my_assembler* my_a,unsigned long my_op,unsigned long my_r,unsigned long my_b,unsigned long my_i,unsigned long my_s,unsigned long my_d){ + unsigned long my_sib = 0; + unsigned long my_mod = 0; + unsigned long my_rm = 0; + unsigned long my_dw = 0; + if ((unsigned long)(((unsigned long)(((long)(my_r))<((long)(0UL))))||((unsigned long)(((long)(my_r))>((long)(15UL)))))) { + (my_die)(((unsigned char *)"invalid reg")); } - (my_compile_expr)((my_c),(my_d),((my_n)->my_a),(1UL)); - (my_emit_neg)(((my_c)->my_as)); - if ((unsigned long)(!((my_type_isint)((((my_n)->my_a)->my_t))))) { - (my_cdie)((my_c),((unsigned char *)"neg: not an int")); + (my_rm)=((unsigned long)(((unsigned long)((unsigned long)(((unsigned long)(my_r))<<((unsigned long)(3UL)))))&((unsigned long)(56UL)))); + if ((unsigned long)(((long)(my_d))!=((long)(0UL)))) { + if ((unsigned long)(((unsigned long)(((long)(my_d))>=((long)((unsigned long)(-(unsigned long)(128UL))))))&&((unsigned long)(((long)(my_d))<=((long)(127UL)))))) { + (my_mod)=(1UL); + (my_dw)=(1UL); + } else { + (my_mod)=(2UL); + (my_dw)=(4UL); } - ((my_n)->my_t)=(((my_n)->my_a)->my_t); - } else if ((unsigned long)(((long)(my_kind))==((long)(my_N_NOT)))) { - if ((unsigned long)(!(my_rhs))) { - (my_cdie)((my_c),((unsigned char *)"not lexpr")); + } else { + (my_mod)=(0UL); + (my_dw)=(0UL); } - (my_compile_expr)((my_c),(my_d),((my_n)->my_a),(1UL)); - (my_emit_not)(((my_c)->my_as)); - if ((unsigned long)(!((my_type_isint)((((my_n)->my_a)->my_t))))) { - (my_cdie)((my_c),((unsigned char *)"not: not an int")); + if ((unsigned long)(((long)(my_mod))==((long)(0UL)))) { + if ((unsigned long)(((unsigned long)(((long)(my_b))<((long)(0UL))))||((unsigned long)(((long)(my_b))>((long)(16UL)))))) { + (my_die)(((unsigned char *)"invalid reg")); } - ((my_n)->my_t)=(((my_n)->my_a)->my_t); - } else if ((unsigned long)(((long)(my_kind))==((long)(my_N_ADD)))) { - if ((unsigned long)(!(my_rhs))) { - (my_cdie)((my_c),((unsigned char *)"not lexpr")); + if (my_s) { + if ((unsigned long)(((long)(my_b))==((long)(my_R_RIP)))) { + (my_die)(((unsigned char *)"invalid base")); } - (my_compile_expr)((my_c),(my_d),((my_n)->my_b),(1UL)); - (my_compile_expr)((my_c),(my_d),((my_n)->my_a),(1UL)); - (my_emit_add)(((my_c)->my_as)); - (my_unify)((my_c),(((my_n)->my_a)->my_t),(((my_n)->my_b)->my_t)); - if ((unsigned long)(!((my_type_isint)((((my_n)->my_a)->my_t))))) { - (my_cdie)((my_c),((unsigned char *)"add: not an int")); + if ((unsigned long)(((long)(my_i))==((long)(my_R_RSP)))) { + (my_die)(((unsigned char *)"invalid index")); } - ((my_n)->my_t)=(((my_n)->my_a)->my_t); - } else if ((unsigned long)(((long)(my_kind))==((long)(my_N_SUB)))) { - if ((unsigned long)(!(my_rhs))) { - (my_cdie)((my_c),((unsigned char *)"not lexpr")); + (my_rm)=((unsigned long)(((unsigned long)(my_rm))+((unsigned long)(my_R_RSP)))); + } else { + if ((unsigned long)(((long)(my_i))!=((long)(0UL)))) { + (my_die)(((unsigned char *)"invalid index")); } - (my_compile_expr)((my_c),(my_d),((my_n)->my_b),(1UL)); - (my_compile_expr)((my_c),(my_d),((my_n)->my_a),(1UL)); - (my_emit_sub)(((my_c)->my_as)); - (my_unify)((my_c),(((my_n)->my_a)->my_t),(((my_n)->my_b)->my_t)); - if ((unsigned long)(!((my_type_isint)((((my_n)->my_a)->my_t))))) { - (my_cdie)((my_c),((unsigned char *)"sub: not an int")); + if ((unsigned long)(((long)(my_b))==((long)(my_R_RIP)))) { + (my_mod)=(0UL); + (my_dw)=(4UL); + (my_rm)=((unsigned long)(((unsigned long)(my_rm))+((unsigned long)(my_R_RBP)))); + } else if ((unsigned long)(((unsigned long)(((long)(my_b))==((long)(my_R_RSP))))||((unsigned long)(((long)(my_b))==((long)(my_R_R12)))))) { + (my_s)=(1UL); + (my_i)=(my_R_RSP); + (my_rm)=((unsigned long)(((unsigned long)(my_rm))+((unsigned long)(my_R_RSP)))); + } else if ((unsigned long)(((unsigned long)(((long)(my_b))==((long)(my_R_RBP))))||((unsigned long)(((long)(my_b))==((long)(my_R_R13)))))) { + (my_mod)=(1UL); + (my_dw)=(1UL); + (my_rm)=((unsigned long)(((unsigned long)(my_rm))+((unsigned long)(my_R_RBP)))); + } else { + (my_rm)=((unsigned long)(((unsigned long)(my_rm))+((unsigned long)((unsigned long)(((unsigned long)(my_b))&((unsigned long)(7UL))))))); } - ((my_n)->my_t)=(((my_n)->my_a)->my_t); - } else if ((unsigned long)(((long)(my_kind))==((long)(my_N_MUL)))) { - if ((unsigned long)(!(my_rhs))) { - (my_cdie)((my_c),((unsigned char *)"not lexpr")); } - (my_compile_expr)((my_c),(my_d),((my_n)->my_b),(1UL)); - (my_compile_expr)((my_c),(my_d),((my_n)->my_a),(1UL)); - (my_emit_mul)(((my_c)->my_as)); - (my_unify)((my_c),(((my_n)->my_a)->my_t),(((my_n)->my_b)->my_t)); - if ((unsigned long)(!((my_type_isint)((((my_n)->my_a)->my_t))))) { - (my_cdie)((my_c),((unsigned char *)"mul: not an int")); + } else { + if ((unsigned long)(((unsigned long)(((long)(my_b))<((long)(0UL))))||((unsigned long)(((unsigned long)(((long)(my_b))>((long)(16UL))))||((unsigned long)(((unsigned long)(((long)(my_i))<((long)(0UL))))||((unsigned long)(((long)(my_i))>((long)(15UL)))))))))) { + (my_die)(((unsigned char *)"invalid reg")); } - ((my_n)->my_t)=(((my_n)->my_a)->my_t); - } else if ((unsigned long)(((long)(my_kind))==((long)(my_N_DIV)))) { - if ((unsigned long)(!(my_rhs))) { - (my_cdie)((my_c),((unsigned char *)"not lexpr")); + if (my_s) { + if ((unsigned long)(((long)(my_b))==((long)(my_R_RIP)))) { + (my_die)(((unsigned char *)"invalid base")); } - (my_compile_expr)((my_c),(my_d),((my_n)->my_b),(1UL)); - (my_compile_expr)((my_c),(my_d),((my_n)->my_a),(1UL)); - (my_emit_div)(((my_c)->my_as)); - (my_unify)((my_c),(((my_n)->my_a)->my_t),(((my_n)->my_b)->my_t)); - if ((unsigned long)(!((my_type_isint)((((my_n)->my_a)->my_t))))) { - (my_cdie)((my_c),((unsigned char *)"div: not an int")); + if ((unsigned long)(((long)(my_i))==((long)(my_R_RSP)))) { + (my_die)(((unsigned char *)"invalid index")); } - ((my_n)->my_t)=(((my_n)->my_a)->my_t); - } else if ((unsigned long)(((long)(my_kind))==((long)(my_N_MOD)))) { - if ((unsigned long)(!(my_rhs))) { - (my_cdie)((my_c),((unsigned char *)"not lexpr")); + (my_rm)=((unsigned long)(((unsigned long)(my_rm))+((unsigned long)(my_R_RSP)))); + } else { + if ((unsigned long)(((long)(my_i))!=((long)(0UL)))) { + (my_die)(((unsigned char *)"invalid index")); } - (my_compile_expr)((my_c),(my_d),((my_n)->my_b),(1UL)); - (my_compile_expr)((my_c),(my_d),((my_n)->my_a),(1UL)); - (my_emit_mod)(((my_c)->my_as)); - (my_unify)((my_c),(((my_n)->my_a)->my_t),(((my_n)->my_b)->my_t)); - if ((unsigned long)(!((my_type_isint)((((my_n)->my_a)->my_t))))) { - (my_cdie)((my_c),((unsigned char *)"mod: not an int")); - } - ((my_n)->my_t)=(((my_n)->my_a)->my_t); - } else if ((unsigned long)(((long)(my_kind))==((long)(my_N_LSH)))) { - if ((unsigned long)(!(my_rhs))) { - (my_cdie)((my_c),((unsigned char *)"not lexpr")); + if ((unsigned long)(((long)(my_b))==((long)(my_R_RIP)))) { + (my_mod)=(0UL); + (my_dw)=(4UL); + (my_rm)=((unsigned long)(((unsigned long)(my_rm))+((unsigned long)(my_R_RBP)))); + } else if ((unsigned long)(((unsigned long)(((long)(my_b))==((long)(my_R_RSP))))||((unsigned long)(((long)(my_b))==((long)(my_R_R12)))))) { + (my_s)=(1UL); + (my_i)=(my_R_RSP); + (my_rm)=((unsigned long)(((unsigned long)(my_rm))+((unsigned long)(my_R_RSP)))); + } else { + (my_rm)=((unsigned long)(((unsigned long)(my_rm))+((unsigned long)((unsigned long)(((unsigned long)(my_b))&((unsigned long)(7UL))))))); } - (my_compile_expr)((my_c),(my_d),((my_n)->my_b),(1UL)); - (my_compile_expr)((my_c),(my_d),((my_n)->my_a),(1UL)); - (my_emit_lsh)(((my_c)->my_as)); - (my_unify)((my_c),(((my_n)->my_a)->my_t),(((my_n)->my_b)->my_t)); - if ((unsigned long)(!((my_type_isint)((((my_n)->my_a)->my_t))))) { - (my_cdie)((my_c),((unsigned char *)"lsh: not an int")); } - ((my_n)->my_t)=(((my_n)->my_a)->my_t); - } else if ((unsigned long)(((long)(my_kind))==((long)(my_N_RSH)))) { - if ((unsigned long)(!(my_rhs))) { - (my_cdie)((my_c),((unsigned char *)"not lexpr")); } - (my_compile_expr)((my_c),(my_d),((my_n)->my_b),(1UL)); - (my_compile_expr)((my_c),(my_d),((my_n)->my_a),(1UL)); - (my_emit_rsh)(((my_c)->my_as)); - (my_unify)((my_c),(((my_n)->my_a)->my_t),(((my_n)->my_b)->my_t)); - if ((unsigned long)(!((my_type_isint)((((my_n)->my_a)->my_t))))) { - (my_cdie)((my_c),((unsigned char *)"rsh: not an int")); + (my_as_rex)((my_a),(my_op),(my_r),(my_i),(my_b)); + (my_as_op)((my_a),(my_op)); + (my_as_emit)((my_a),((unsigned long)(((unsigned long)((unsigned long)(((unsigned long)(my_mod))<<((unsigned long)(6UL)))))+((unsigned long)(my_rm))))); + if (my_s) { + (my_sib)=((unsigned long)(((unsigned long)((unsigned long)(((unsigned long)((unsigned long)(((unsigned long)(my_i))<<((unsigned long)(3UL)))))&((unsigned long)(56UL)))))+((unsigned long)((unsigned long)(((unsigned long)(my_b))&((unsigned long)(7UL))))))); + if ((unsigned long)(((long)(my_s))==((long)(2UL)))) { + (my_sib)=((unsigned long)(((unsigned long)(my_sib))+((unsigned long)(64UL)))); + } else if ((unsigned long)(((long)(my_s))==((long)(4UL)))) { + (my_sib)=((unsigned long)(((unsigned long)(my_sib))+((unsigned long)(128UL)))); + } else if ((unsigned long)(((long)(my_s))==((long)(8UL)))) { + (my_sib)=((unsigned long)(((unsigned long)(my_sib))+((unsigned long)(192UL)))); + } else if ((unsigned long)(((long)(my_s))!=((long)(1UL)))) { + (my_die)(((unsigned char *)"invalid scale")); } - ((my_n)->my_t)=(((my_n)->my_a)->my_t); - } else if ((unsigned long)(((long)(my_kind))==((long)(my_N_AND)))) { - if ((unsigned long)(!(my_rhs))) { - (my_cdie)((my_c),((unsigned char *)"not lexpr")); + (my_as_emit)((my_a),(my_sib)); } - (my_compile_expr)((my_c),(my_d),((my_n)->my_b),(1UL)); - (my_compile_expr)((my_c),(my_d),((my_n)->my_a),(1UL)); - (my_emit_and)(((my_c)->my_as)); - (my_unify)((my_c),(((my_n)->my_a)->my_t),(((my_n)->my_b)->my_t)); - if ((unsigned long)(!((my_type_isint)((((my_n)->my_a)->my_t))))) { - (my_cdie)((my_c),((unsigned char *)"and: not an int")); + if ((unsigned long)(((long)(my_dw))==((long)(1UL)))) { + (my_as_emit)((my_a),(my_d)); + } else if ((unsigned long)(((long)(my_dw))==((long)(4UL)))) { + (my_as_emit)((my_a),(my_d)); + (my_as_emit)((my_a),((unsigned long)(((unsigned long)(my_d))>>((unsigned long)(8UL))))); + (my_as_emit)((my_a),((unsigned long)(((unsigned long)(my_d))>>((unsigned long)(16UL))))); + (my_as_emit)((my_a),((unsigned long)(((unsigned long)(my_d))>>((unsigned long)(24UL))))); } - ((my_n)->my_t)=(((my_n)->my_a)->my_t); - } else if ((unsigned long)(((long)(my_kind))==((long)(my_N_OR)))) { - if ((unsigned long)(!(my_rhs))) { - (my_cdie)((my_c),((unsigned char *)"not lexpr")); +} +void( my_as_modrr)(struct my_assembler* my_a,unsigned long my_op,unsigned long my_r,unsigned long my_b){ + if ((unsigned long)(((unsigned long)(((long)(my_r))<((long)(0UL))))||((unsigned long)(((unsigned long)(((long)(my_r))>((long)(15UL))))||((unsigned long)(((unsigned long)(((long)(my_b))<((long)(0UL))))||((unsigned long)(((long)(my_b))>((long)(15UL)))))))))) { + (my_die)(((unsigned char *)"invalid reg")); } - (my_compile_expr)((my_c),(my_d),((my_n)->my_b),(1UL)); - (my_compile_expr)((my_c),(my_d),((my_n)->my_a),(1UL)); - (my_emit_or)(((my_c)->my_as)); - (my_unify)((my_c),(((my_n)->my_a)->my_t),(((my_n)->my_b)->my_t)); - if ((unsigned long)(!((my_type_isint)((((my_n)->my_a)->my_t))))) { - (my_cdie)((my_c),((unsigned char *)"or: not an int")); + (my_as_rex)((my_a),(my_op),(my_r),(0UL),(my_b)); + (my_as_op)((my_a),(my_op)); + (my_as_emit)((my_a),((unsigned long)(((unsigned long)((unsigned long)(((unsigned long)(192UL))+((unsigned long)((unsigned long)(((unsigned long)((unsigned long)(((unsigned long)(my_r))<<((unsigned long)(3UL)))))&((unsigned long)(56UL))))))))+((unsigned long)((unsigned long)(((unsigned long)(my_b))&((unsigned long)(7UL)))))))); +} +void( my_as_op)(struct my_assembler* my_a,unsigned long my_op){ + if ((unsigned long)(((long)(my_op))>((long)(255UL)))) { + (my_as_emit)((my_a),((unsigned long)(((unsigned long)(my_op))>>((unsigned long)(8UL))))); + (my_as_emit)((my_a),(my_op)); + } else { + (my_as_emit)((my_a),(my_op)); } - ((my_n)->my_t)=(((my_n)->my_a)->my_t); - } else if ((unsigned long)(((long)(my_kind))==((long)(my_N_XOR)))) { - if ((unsigned long)(!(my_rhs))) { - (my_cdie)((my_c),((unsigned char *)"not lexpr")); +} +void( my_as_opr)(struct my_assembler* my_a,unsigned long my_op,unsigned long my_r){ + if ((unsigned long)(((unsigned long)(((long)(my_r))<((long)(0UL))))||((unsigned long)(((long)(my_r))>((long)(15UL)))))) { + (my_die)(((unsigned char *)"invalid reg")); } - (my_compile_expr)((my_c),(my_d),((my_n)->my_b),(1UL)); - (my_compile_expr)((my_c),(my_d),((my_n)->my_a),(1UL)); - (my_emit_xor)(((my_c)->my_as)); - (my_unify)((my_c),(((my_n)->my_a)->my_t),(((my_n)->my_b)->my_t)); - if ((unsigned long)(!((my_type_isint)((((my_n)->my_a)->my_t))))) { - (my_cdie)((my_c),((unsigned char *)"xor: not an int")); + if ((unsigned long)(((unsigned long)(((long)(my_op))!=((long)(my_OP_PUSHR))))&&((unsigned long)(((unsigned long)(((long)(my_op))!=((long)(my_OP_POPR))))||((unsigned long)(((long)(my_r))>((long)(7UL)))))))) { + (my_as_rex)((my_a),(my_op),(my_r),(0UL),(0UL)); } - ((my_n)->my_t)=(((my_n)->my_a)->my_t); - } else if ((unsigned long)(((long)(my_kind))==((long)(my_N_CAST)))) { - if ((unsigned long)(!(my_rhs))) { - (my_cdie)((my_c),((unsigned char *)"not lexpr")); + (my_as_op)((my_a),((unsigned long)(((unsigned long)(my_op))+((unsigned long)((unsigned long)(((unsigned long)(my_r))&((unsigned long)(7UL)))))))); +} +void( my_as_opri64)(struct my_assembler* my_a,unsigned long my_op,unsigned long my_r,unsigned long my_x){ + if ((unsigned long)(((long)(my_op))!=((long)(my_OP_MOVABS)))) { + (my_die)(((unsigned char *)"only movabs")); } - (my_compile_expr)((my_c),(my_d),((my_n)->my_a),(1UL)); - if ((unsigned long)(!((my_type_isprim)((((my_n)->my_a)->my_t))))) { - (my_cdie)((my_c),((unsigned char *)"not a primitive")); + (my_as_opr)((my_a),(my_op),(my_r)); + (my_as_emit)((my_a),(my_x)); + (my_as_emit)((my_a),((unsigned long)(((unsigned long)(my_x))>>((unsigned long)(8UL))))); + (my_as_emit)((my_a),((unsigned long)(((unsigned long)(my_x))>>((unsigned long)(16UL))))); + (my_as_emit)((my_a),((unsigned long)(((unsigned long)(my_x))>>((unsigned long)(24UL))))); + (my_as_emit)((my_a),((unsigned long)(((unsigned long)(my_x))>>((unsigned long)(32UL))))); + (my_as_emit)((my_a),((unsigned long)(((unsigned long)(my_x))>>((unsigned long)(40UL))))); + (my_as_emit)((my_a),((unsigned long)(((unsigned long)(my_x))>>((unsigned long)(48UL))))); + (my_as_emit)((my_a),((unsigned long)(((unsigned long)(my_x))>>((unsigned long)(56UL))))); +} +void( my_as_rex)(struct my_assembler* my_a,unsigned long my_op,unsigned long my_r,unsigned long my_i,unsigned long my_b){ + unsigned long my_w = 0; + if ((my_a)->my_bits32) { + return; } - ((my_n)->my_t)=((my_prototype)((my_c),((my_n)->my_b))); - } else { - (my_cdie)((my_c),((unsigned char *)"not an expression")); + (my_w)=(8UL); + if ((unsigned long)(((unsigned long)(((long)(my_op))==((long)(my_OP_LOADB))))||((unsigned long)(((long)(my_op))==((long)(my_OP_STOREB)))))) { + (my_w)=(0UL); } + (my_as_emit)((my_a),((unsigned long)(((unsigned long)((unsigned long)(((unsigned long)((unsigned long)(((unsigned long)((unsigned long)(((unsigned long)(64UL))+((unsigned long)(my_w)))))+((unsigned long)((unsigned long)(((unsigned long)((unsigned long)(((unsigned long)(my_r))>>((unsigned long)(1UL)))))&((unsigned long)(4UL))))))))+((unsigned long)((unsigned long)(((unsigned long)((unsigned long)(((unsigned long)(my_i))>>((unsigned long)(2UL)))))&((unsigned long)(2UL))))))))+((unsigned long)((unsigned long)(((unsigned long)((unsigned long)(((unsigned long)(my_b))>>((unsigned long)(3UL)))))&((unsigned long)(1UL)))))))); } -void( my_compile_func)(struct my_compiler* my_c,struct my_decl* my_d){ - unsigned char* my_name = 0; - struct my_decl* my_v = 0; - struct my_type* my_t = 0; - unsigned long my_offset = 0; - struct my_node* my_n = 0; - unsigned long my_pragma = 0; - if ((unsigned long)(!((my_d)->my_func_def))) { - return; +void( my_assert)(unsigned long my_x,unsigned char* my_msg){ + if ((unsigned long)(!(my_x))) { + (my_die)((my_msg)); } - (my_n)=(((((my_d)->my_func_def)->my_a)->my_b)->my_a); - (my_offset)=(16UL); +} +unsigned long( my_bind)(unsigned long my_fd,unsigned char* my_addr,unsigned long my_len){ + return (my_syscall)((49UL),(my_fd),((unsigned long)my_addr),((unsigned long)my_len),(0UL),(0UL),(0UL)); +} +void( my_bzero)(unsigned char* my_s,unsigned long my_size){ + unsigned long my_i = 0; + (my_i)=(0UL); while (1) { - if ((unsigned long)(!(my_n))) { + if ((unsigned long)(((long)(my_i))==((long)(my_size)))) { break; } - (my_name)=((((my_n)->my_a)->my_a)->my_s); - (my_t)=((my_prototype)((my_c),(((my_n)->my_a)->my_b))); - (my_v)=((my_find)((my_c),((my_d)->my_name),(my_name),(1UL))); - if ((my_v)->my_var_defined) { - (my_cdie)((my_c),((unsigned char *)"duplicate argument")); - } - ((my_v)->my_var_defined)=(1UL); - ((my_v)->my_var_type)=(my_t); - ((my_v)->my_var_offset)=(my_offset); - ((my_v)->my_var_def)=((my_n)->my_a); - (my_offset)=((unsigned long)(((unsigned long)(my_offset))+((unsigned long)(8UL)))); - (my_n)=((my_n)->my_b); - } - (my_offset)=((my_hoist_locals)((my_c),(my_d),(((my_d)->my_func_def)->my_b),(0UL))); - if ((unsigned long)(!((my_strcmp)(((my_d)->my_name),((unsigned char *)"_start"))))) { - (my_pragma)=(1UL); - } else if ((unsigned long)(!((my_strcmp)(((my_d)->my_name),((unsigned char *)"_kstart"))))) { - (my_pragma)=(2UL); - } else { - (my_pragma)=(0UL); - } - (my_emit_str)(((my_c)->my_as),((my_d)->my_name)); - (my_fixup_label)(((my_c)->my_as),((my_d)->my_func_label)); - (my_emit_preamble)(((my_c)->my_as),(my_offset),(my_pragma)); - (my_compile_stmt)((my_c),(my_d),(((my_d)->my_func_def)->my_b),((struct my_label*)0UL),((struct my_label*)0UL)); - (my_emit_num)(((my_c)->my_as),(0UL)); - if (my_pragma) { - (my_emit_ud)(((my_c)->my_as)); + ((my_s)[my_i])=((unsigned char)0UL); + (my_i)=((unsigned long)(((unsigned long)(my_i))+((unsigned long)(1UL)))); } - (my_emit_ret)(((my_c)->my_as)); } -void( my_compile_include)(struct my_compiler* my_c,struct my_node* my_n){ - unsigned char* my_filename = 0; - unsigned long my_fd = 0; - unsigned char* my_blob = 0; - unsigned long my_len = 0; - if ((unsigned long)(((long)((((my_n)->my_b)->my_a)->my_kind))!=((long)(my_N_STR)))) { - (my_die)(((unsigned char *)"non literal include")); - } - (my_filename)=((((my_n)->my_b)->my_a)->my_s); - (my_fd)=((my_open)((my_filename),(my_O_RDONLY),(0UL))); - if ((unsigned long)(((long)(my_fd))<((long)(0UL)))) { - (my_die)(((unsigned char *)"failed to open include")); - } - (my_blob)=((my_readall)((my_fd),(&(my_len)),((my_c)->my_a))); - (my_close)((my_fd)); - (my_as_opr)(((my_c)->my_as),(my_OP_POPR),(my_R_RAX)); - (my_as_opr)(((my_c)->my_as),(my_OP_POPR),(my_R_RDI)); - (my_as_opri64)(((my_c)->my_as),(my_OP_MOVABS),(my_R_RAX),(my_len)); - (my_as_modrm)(((my_c)->my_as),(my_OP_STORE),(my_R_RAX),(my_R_RDI),(0UL),(0UL),(0UL)); - (my_emit_blob)(((my_c)->my_as),(my_blob),(my_len)); - (my_free)(((my_c)->my_a),(my_blob)); +void( my_cdie)(struct my_compiler* my_c,unsigned char* my_msg){ + (my_cshow_context)((my_c)); + (my_fdputs)((2UL),((unsigned char *)"cdie: ")); + (my_fdputs)((2UL),(my_msg)); + (my_fdputs)((2UL),((unsigned char *)"\012")); + (my_exit)((1UL)); } -void( my_compile_stmt)(struct my_compiler* my_c,struct my_decl* my_d,struct my_node* my_n,struct my_label* my_top,struct my_label* my_out){ - struct my_label* my_no = 0; - struct my_label* my_ifout = 0; - struct my_decl* my_v = 0; - unsigned long my_kind = 0; - if ((unsigned long)(!(my_n))) { - return; - } - ((my_c)->my_filename)=((my_n)->my_filename); - ((my_c)->my_lineno)=((my_n)->my_lineno); - ((my_c)->my_colno)=((my_n)->my_colno); - (my_kind)=((my_n)->my_kind); - if ((unsigned long)(((long)(my_kind))==((long)(my_N_CONDLIST)))) { - (my_ifout)=((my_mklabel)(((my_c)->my_as))); - (my_no)=((struct my_label*)0UL); +unsigned long( my_charset)(struct my_peg* my_c,unsigned char* my_s){ + unsigned long my_i = 0; + unsigned long my_ch = 0; + (my_ch)=((my_get)((my_c))); + (my_i)=(0UL); while (1) { - if (my_no) { - (my_fixup_label)(((my_c)->my_as),(my_no)); + if ((unsigned long)(!((my_s)[my_i]))) { + (my_fail)((my_c)); + return 0UL; } - if ((unsigned long)(!(my_n))) { + if ((unsigned long)(((long)(my_ch))==((long)((unsigned long)(my_s)[my_i])))) { break; } - (my_no)=((my_mklabel)(((my_c)->my_as))); - if (((my_n)->my_a)->my_a) { - (my_compile_expr)((my_c),(my_d),(((my_n)->my_a)->my_a),(1UL)); - (my_emit_jz)(((my_c)->my_as),(my_no)); + (my_i)=((unsigned long)(((unsigned long)(my_i))+((unsigned long)(1UL)))); } - (my_compile_stmt)((my_c),(my_d),(((my_n)->my_a)->my_b),(my_top),(my_out)); - (my_emit_jmp)(((my_c)->my_as),(my_ifout)); - (my_n)=((my_n)->my_b); - } - (my_fixup_label)(((my_c)->my_as),(my_ifout)); - } else if ((unsigned long)(((long)(my_kind))==((long)(my_N_STMTLIST)))) { - while (1) { - if ((unsigned long)(!(my_n))) { - break; - } - (my_compile_stmt)((my_c),(my_d),((my_n)->my_a),(my_top),(my_out)); - (my_n)=((my_n)->my_b); - } - } else if ((unsigned long)(((long)(my_kind))==((long)(my_N_LOOP)))) { - (my_top)=((my_mklabel)(((my_c)->my_as))); - (my_out)=((my_mklabel)(((my_c)->my_as))); - (my_fixup_label)(((my_c)->my_as),(my_top)); - (my_compile_stmt)((my_c),(my_d),((my_n)->my_a),(my_top),(my_out)); - (my_emit_jmp)(((my_c)->my_as),(my_top)); - (my_fixup_label)(((my_c)->my_as),(my_out)); - } else if ((unsigned long)(((long)(my_kind))==((long)(my_N_BREAK)))) { - if ((unsigned long)(!(my_out))) { - (my_cdie)((my_c),((unsigned char *)"break outside loop")); - } - (my_emit_jmp)(((my_c)->my_as),(my_out)); - } else if ((unsigned long)(((long)(my_kind))==((long)(my_N_CONTINUE)))) { - if ((unsigned long)(!(my_top))) { - (my_cdie)((my_c),((unsigned char *)"continue outside loop")); - } - (my_emit_jmp)(((my_c)->my_as),(my_top)); - } else if ((unsigned long)(((long)(my_kind))==((long)(my_N_RETURN)))) { - if ((my_n)->my_a) { - if ((unsigned long)(((long)((((my_d)->my_func_type)->my_val)->my_kind))==((long)(my_TY_VOID)))) { - (my_cdie)((my_c),((unsigned char *)"returning a value in a void function")); - } - (my_compile_expr)((my_c),(my_d),((my_n)->my_a),(1UL)); - (my_unify)((my_c),(((my_n)->my_a)->my_t),(((my_d)->my_func_type)->my_val)); - } else { - if ((unsigned long)(((long)((((my_d)->my_func_type)->my_val)->my_kind))!=((long)(my_TY_VOID)))) { - (my_cdie)((my_c),((unsigned char *)"returning void in a non void function")); - } - (my_emit_num)(((my_c)->my_as),(0UL)); - } - (my_emit_ret)(((my_c)->my_as)); - } else if ((unsigned long)(((long)(my_kind))==((long)(my_N_LABEL)))) { - (my_v)=((my_find)((my_c),((my_d)->my_name),(((my_n)->my_a)->my_s),(0UL))); - (my_fixup_label)(((my_c)->my_as),((my_v)->my_goto_label)); - } else if ((unsigned long)(((long)(my_kind))==((long)(my_N_GOTO)))) { - (my_v)=((my_find)((my_c),((my_d)->my_name),(((my_n)->my_a)->my_s),(0UL))); - if ((unsigned long)(((unsigned long)(!(my_v)))||((unsigned long)(!((my_v)->my_goto_defined))))) { - (my_cdie)((my_c),((unsigned char *)"label not defined")); - } - (my_emit_jmp)(((my_c)->my_as),((my_v)->my_goto_label)); - } else if ((unsigned long)(((long)(my_kind))!=((long)(my_N_VARDECL)))) { - (my_compile_expr)((my_c),(my_d),(my_n),(1UL)); - (my_emit_pop)(((my_c)->my_as),(1UL)); - } -} -struct my_node*( my_concat_program)(struct my_node* my_a,struct my_node* my_b){ - struct my_node* my_ret = 0; - if ((unsigned long)(!(my_a))) { - return my_b; - } - if ((unsigned long)(!(my_b))) { - return my_a; - } - (my_ret)=(my_a); - while (1) { - if ((unsigned long)(!((my_a)->my_b))) { - break; - } - (my_a)=((my_a)->my_b); - } - ((my_a)->my_b)=(my_b); - return my_ret; + return 1UL; } -struct my_peg_node*( my_construct)(struct my_peg* my_c,unsigned long my_sp){ - unsigned long my_i = 0; - unsigned long my_j = 0; - unsigned long my_nargs = 0; - struct my_peg_node* my_n = 0; - struct my_peg_node** my_link = 0; - (((my_c)->my_nstack)[0UL])=((struct my_peg_node*)0UL); - (my_i)=(0UL); - while (1) { - if ((unsigned long)(((long)(my_i))==((long)((my_c)->my_op)))) { - return ((my_c)->my_nstack)[0UL]; - } - if ((unsigned long)(((long)((((my_c)->my_out)[my_i]).my_tag))!=((long)(my_sp)))) { - (my_n)=((struct my_peg_node*)(my_alloc)(((my_c)->my_a),(64UL))); - ((my_n)->my_tag)=((((my_c)->my_out)[my_i]).my_tag); - ((my_n)->my_next)=((struct my_peg_node*)0UL); - ((my_n)->my_child)=((struct my_peg_node*)0UL); - ((my_n)->my_str)=(&(((my_c)->my_src)[(((my_c)->my_out)[my_i]).my_start])); - ((my_n)->my_len)=((unsigned long)(((unsigned long)((((my_c)->my_out)[my_i]).my_end))-((unsigned long)((((my_c)->my_out)[my_i]).my_start)))); - ((my_n)->my_filename)=((my_c)->my_filename); - ((my_n)->my_line)=((((my_c)->my_out)[my_i]).my_line); - ((my_n)->my_col)=((((my_c)->my_out)[my_i]).my_col); - (my_nargs)=((((my_c)->my_out)[my_i]).my_nargs); - if ((unsigned long)(((long)(my_nargs))>((long)((my_c)->my_np)))) { - (my_die)(((unsigned char *)"node underflow")); - } - (my_link)=(&((my_n)->my_child)); - (my_j)=((unsigned long)(((unsigned long)((my_c)->my_np))-((unsigned long)(my_nargs)))); - while (1) { - if ((unsigned long)(((long)(my_j))==((long)((my_c)->my_np)))) { - break; - } - if (((my_c)->my_nstack)[my_j]) { - (*(my_link))=(((my_c)->my_nstack)[my_j]); - (my_link)=(&((((my_c)->my_nstack)[my_j])->my_next)); - } - (my_j)=((unsigned long)(((unsigned long)(my_j))+((unsigned long)(1UL)))); - } - ((my_c)->my_np)=((unsigned long)(((unsigned long)((my_c)->my_np))-((unsigned long)(my_nargs)))); - if ((unsigned long)(((long)((my_c)->my_np))==((long)((my_c)->my_ncap)))) { - (my_die)(((unsigned char *)"node overflow")); - } - } else { - (my_n)=((struct my_peg_node*)0UL); - } - (((my_c)->my_nstack)[(my_c)->my_np])=(my_n); - ((my_c)->my_np)=((unsigned long)(((unsigned long)((my_c)->my_np))+((unsigned long)(1UL)))); - (my_i)=((unsigned long)(((unsigned long)(my_i))+((unsigned long)(1UL)))); +void( my_choice)(struct my_peg* my_c){ + if ((unsigned long)(((long)((my_c)->my_sp))==((long)((my_c)->my_limit)))) { + (my_die)(((unsigned char *)"choice overflow")); } + ((((my_c)->my_stack)[(my_c)->my_sp]).my_pos)=((my_c)->my_pos); + ((((my_c)->my_stack)[(my_c)->my_sp]).my_depth)=((my_c)->my_depth); + ((((my_c)->my_stack)[(my_c)->my_sp]).my_op)=((my_c)->my_op); + ((((my_c)->my_stack)[(my_c)->my_sp]).my_tag)=((my_c)->my_tag); + ((((my_c)->my_stack)[(my_c)->my_sp]).my_line)=((my_c)->my_line); + ((((my_c)->my_stack)[(my_c)->my_sp]).my_col)=((my_c)->my_col); + ((my_c)->my_sp)=((unsigned long)(((unsigned long)((my_c)->my_sp))+((unsigned long)(1UL)))); } -void( my_copypos)(struct my_node* my_n,struct my_peg_node* my_pn){ - ((my_n)->my_filename)=((my_pn)->my_filename); - ((my_n)->my_lineno)=((my_pn)->my_line); - ((my_n)->my_colno)=((my_pn)->my_col); +unsigned long( my_close)(unsigned long my_fd){ + return (my_syscall)((3UL),(my_fd),(0UL),(0UL),(0UL),(0UL),(0UL)); } -unsigned long( my_count_args)(struct my_compiler* my_c,struct my_type* my_t){ - unsigned long my_nargs = 0; - (my_nargs)=(0UL); - while (1) { - if ((unsigned long)(!(my_t))) { - break; - } - (my_t)=((my_t)->my_arg); - (my_nargs)=((unsigned long)(((unsigned long)(my_nargs))+((unsigned long)(1UL)))); +void( my_commit)(struct my_peg* my_c){ + if ((unsigned long)(((long)((my_c)->my_sp))==((long)(0UL)))) { + (my_die)(((unsigned char *)"commit underflow")); } - return my_nargs; + ((my_c)->my_sp)=((unsigned long)(((unsigned long)((my_c)->my_sp))-((unsigned long)(1UL)))); } -void( my_cshow_context)(struct my_compiler* my_c){ - (my_fdputs)((2UL),((unsigned char *)"on ")); - if ((my_c)->my_filename) { - (my_fdputs)((2UL),((my_c)->my_filename)); - } - (my_fdputs)((2UL),((unsigned char *)":")); - (my_fdputd)((2UL),((my_c)->my_lineno)); - (my_fdputs)((2UL),((unsigned char *)":")); - (my_fdputd)((2UL),((my_c)->my_colno)); - (my_fdputs)((2UL),((unsigned char *)"\012")); +struct my_compiler*( my_comp_setup)(struct my_alloc* my_a){ + struct my_compiler* my_c = 0; + (my_c)=((struct my_compiler*)(my_alloc)((my_a),(72UL))); + ((my_c)->my_a)=(my_a); + ((my_c)->my_p)=((my_setup_parser)((my_a))); + ((my_c)->my_filename)=((unsigned char*)0UL); + ((my_c)->my_lineno)=(0UL); + ((my_c)->my_colno)=(0UL); + ((my_c)->my_as)=((my_setup_assembler)((my_a))); + ((my_c)->my_decls)=((struct my_decl*)0UL); + ((my_c)->my_do_cout)=(0UL); + ((my_c)->my_cout)=((struct my_file*)0UL); + return my_c; } -void( my_ctranslate)(struct my_compiler* my_c){ +void( my_compile)(struct my_compiler* my_c,struct my_node* my_p){ + struct my_node* my_n = 0; struct my_decl* my_d = 0; - unsigned long my_seen = 0; - unsigned long my_has_enum = 0; - (my_fputs)(((my_c)->my_cout),((unsigned char *)"#ifndef my__start\012")); - (my_fputs)(((my_c)->my_cout),((unsigned char *)"#define my__start main\012")); - (my_fputs)(((my_c)->my_cout),((unsigned char *)"#endif\012")); - (my_fputs)(((my_c)->my_cout),((unsigned char *)"#ifndef my_syscall\012")); - (my_fputs)(((my_c)->my_cout),((unsigned char *)"#define my_syscall syscall\012")); - (my_fputs)(((my_c)->my_cout),((unsigned char *)"#endif\012")); - (my_d)=((my_first_decl)((my_c))); - while (1) { - if ((unsigned long)(!(my_d))) { - break; - } - if ((my_d)->my_struct_defined) { - (my_fputs)(((my_c)->my_cout),((unsigned char *)"struct my_")); - (my_fputs)(((my_c)->my_cout),((my_d)->my_name)); - (my_fputs)(((my_c)->my_cout),((unsigned char *)";\012")); - } - (my_d)=((my_next_decl)((my_c),(my_d))); - } - (my_d)=((my_first_decl)((my_c))); + unsigned long my_kind = 0; + (my_n)=(my_p); while (1) { - if ((unsigned long)(!(my_d))) { + if ((unsigned long)(!(my_n))) { break; } - if ((my_d)->my_struct_defined) { - (my_ctranslate_struct)((my_c),(my_d)); + (my_kind)=(((my_n)->my_a)->my_kind); + if ((unsigned long)(((long)(my_kind))==((long)(my_N_STRUCT)))) { + (my_defstruct)((my_c),((my_n)->my_a)); + } else if ((unsigned long)(((long)(my_kind))==((long)(my_N_ENUM)))) { + (my_defenum)((my_c),((my_n)->my_a)); + } else if ((unsigned long)(((unsigned long)(((long)(my_kind))!=((long)(my_N_FUNC))))&&((unsigned long)(((long)(my_kind))!=((long)(my_N_FUNCDECL)))))) { + (my_cdie)((my_c),((unsigned char *)"invalid decl")); } - (my_d)=((my_next_decl)((my_c),(my_d))); + (my_n)=((my_n)->my_b); } - (my_d)=((my_first_decl)((my_c))); - (my_has_enum)=(0UL); - (my_seen)=(0UL); + (my_n)=(my_p); while (1) { - if ((unsigned long)(!(my_d))) { + if ((unsigned long)(!(my_n))) { break; } - if ((my_d)->my_enum_defined) { - if ((unsigned long)(!(my_has_enum))) { - (my_fputs)(((my_c)->my_cout),((unsigned char *)"enum {\012")); - (my_has_enum)=(1UL); - } - if (my_seen) { - (my_fputs)(((my_c)->my_cout),((unsigned char *)",\012")); - } - (my_fputs)(((my_c)->my_cout),((unsigned char *)"\011my_")); - (my_fputs)(((my_c)->my_cout),((my_d)->my_name)); - (my_fputs)(((my_c)->my_cout),((unsigned char *)" = ")); - (my_fputd)(((my_c)->my_cout),((my_d)->my_enum_value)); - (my_seen)=(1UL); - } - (my_d)=((my_next_decl)((my_c),(my_d))); + (my_kind)=(((my_n)->my_a)->my_kind); + if ((unsigned long)(((long)(my_kind))==((long)(my_N_FUNCDECL)))) { + (my_defextern)((my_c),((my_n)->my_a)); + } else if ((unsigned long)(((long)(my_kind))==((long)(my_N_FUNC)))) { + (my_defun)((my_c),((my_n)->my_a)); } - if (my_has_enum) { - (my_fputs)(((my_c)->my_cout),((unsigned char *)"\012};\012")); + (my_n)=((my_n)->my_b); } (my_d)=((my_first_decl)((my_c))); while (1) { if ((unsigned long)(!(my_d))) { break; } - if ((my_d)->my_func_defined) { - (my_ctranslate_type)((my_c),((my_d)->my_func_type),((my_d)->my_name),(1UL),((((my_d)->my_func_decl)->my_b)->my_a)); - (my_fputs)(((my_c)->my_cout),((unsigned char *)";\012")); + if ((my_d)->my_struct_defined) { + (my_layout_struct)((my_c),(my_d)); } (my_d)=((my_next_decl)((my_c),(my_d))); } @@ -2007,17 +1555,839 @@ void( my_ctranslate)(struct my_compiler* my_c){ break; } if ((my_d)->my_func_defined) { - (my_ctranslate_func)((my_c),(my_d)); + (my_compile_func)((my_c),(my_d)); } (my_d)=((my_next_decl)((my_c),(my_d))); } - (my_flush_coutput)((my_c)); } -void( my_ctranslate_expr)(struct my_compiler* my_c,struct my_node* my_n){ - if ((unsigned long)(((long)((my_n)->my_kind))==((long)(my_N_STR)))) { - (my_ctranslate_str)((my_c),((my_n)->my_s)); - } else if ((unsigned long)(((long)((my_n)->my_kind))==((long)(my_N_NUM)))) { - (my_fputd)(((my_c)->my_cout),((my_n)->my_n)); +void( my_compile_expr)(struct my_compiler* my_c,struct my_decl* my_d,struct my_node* my_n,unsigned long my_rhs){ + struct my_label* my_no = 0; + struct my_label* my_out = 0; + struct my_decl* my_v = 0; + unsigned long my_kind = 0; + ((my_c)->my_filename)=((my_n)->my_filename); + ((my_c)->my_lineno)=((my_n)->my_lineno); + ((my_c)->my_colno)=((my_n)->my_colno); + (my_kind)=((my_n)->my_kind); + if ((unsigned long)(((long)(my_kind))==((long)(my_N_STR)))) { + if ((unsigned long)(!(my_rhs))) { + (my_cdie)((my_c),((unsigned char *)"str is not an lexpr")); + } + (my_emit_str)(((my_c)->my_as),((my_n)->my_s)); + ((my_n)->my_t)=((my_mktype1)((my_c),(my_TY_PTR),((my_mktype0)((my_c),(my_TY_BYTE))))); + } else if ((unsigned long)(((long)(my_kind))==((long)(my_N_NUM)))) { + if ((unsigned long)(!(my_rhs))) { + (my_cdie)((my_c),((unsigned char *)"num is not an lexpr")); + } + (my_emit_num)(((my_c)->my_as),((my_n)->my_n)); + ((my_n)->my_t)=((my_mktype0)((my_c),(my_TY_INT))); + } else if ((unsigned long)(((long)(my_kind))==((long)(my_N_CHAR)))) { + if ((unsigned long)(!(my_rhs))) { + (my_cdie)((my_c),((unsigned char *)"char is not an lexpr")); + } + (my_emit_num)(((my_c)->my_as),((my_n)->my_n)); + ((my_n)->my_t)=((my_mktype0)((my_c),(my_TY_INT))); + } else if ((unsigned long)(((long)(my_kind))==((long)(my_N_EXPRLIST)))) { + if ((unsigned long)(!(my_rhs))) { + (my_cdie)((my_c),((unsigned char *)"call is not an lexpr")); + } + if ((my_n)->my_b) { + (my_compile_expr)((my_c),(my_d),((my_n)->my_b),(1UL)); + } + (my_compile_expr)((my_c),(my_d),((my_n)->my_a),(1UL)); + if ((my_n)->my_b) { + ((my_n)->my_t)=((my_mktype2)((my_c),(my_TY_ARG),(((my_n)->my_a)->my_t),(((my_n)->my_b)->my_t))); + } else { + ((my_n)->my_t)=((my_mktype1)((my_c),(my_TY_ARG),(((my_n)->my_a)->my_t))); + } + } else if ((unsigned long)(((long)(my_kind))==((long)(my_N_CALL)))) { + if ((unsigned long)(!(my_rhs))) { + (my_cdie)((my_c),((unsigned char *)"call is not an lexpr")); + } + if ((my_n)->my_b) { + (my_compile_expr)((my_c),(my_d),((my_n)->my_b),(1UL)); + } + if ((unsigned long)(((long)(((my_n)->my_a)->my_kind))==((long)(my_N_IDENT)))) { + (my_v)=((my_find)((my_c),(((my_n)->my_a)->my_s),((unsigned char*)0UL),(0UL))); + if ((unsigned long)((my_v)&&((my_v)->my_enum_defined))) { + (my_cdie)((my_c),((unsigned char *)"type error")); + } + (my_v)=((my_find)((my_c),((my_d)->my_name),(((my_n)->my_a)->my_s),(0UL))); + if ((unsigned long)((my_v)&&((my_v)->my_var_defined))) { + (my_emit_lea)(((my_c)->my_as),((my_v)->my_var_offset)); + (((my_n)->my_a)->my_t)=((my_v)->my_var_type); + (my_emit_load)(((my_c)->my_as),(((my_n)->my_a)->my_t)); + (my_emit_call)(((my_c)->my_as),((my_count_args)((my_c),((((my_n)->my_a)->my_t)->my_arg)))); + } else if ((unsigned long)(!((my_strcmp)((((my_n)->my_a)->my_s),((unsigned char *)"_include"))))) { + (my_v)=((my_find)((my_c),(((my_n)->my_a)->my_s),((unsigned char*)0UL),(0UL))); + if ((unsigned long)(((unsigned long)(!(my_v)))||((unsigned long)(!((my_v)->my_func_defined))))) { + (my_cdie)((my_c),((unsigned char *)"no such function")); + } + (((my_n)->my_a)->my_t)=((my_v)->my_func_type); + (my_compile_include)((my_c),(my_n)); + } else { + (my_v)=((my_find)((my_c),(((my_n)->my_a)->my_s),((unsigned char*)0UL),(0UL))); + if ((unsigned long)(((unsigned long)(!(my_v)))||((unsigned long)(!((my_v)->my_func_defined))))) { + (my_cdie)((my_c),((unsigned char *)"no such function")); + } + (((my_n)->my_a)->my_t)=((my_v)->my_func_type); + (my_emit_lcall)(((my_c)->my_as),((my_v)->my_func_label),((my_count_args)((my_c),((((my_n)->my_a)->my_t)->my_arg)))); + } + } else { + (my_compile_expr)((my_c),(my_d),((my_n)->my_a),(1UL)); + (my_emit_call)(((my_c)->my_as),((my_count_args)((my_c),((((my_n)->my_a)->my_t)->my_arg)))); + } + if ((unsigned long)(((long)((((my_n)->my_a)->my_t)->my_kind))!=((long)(my_TY_FUNC)))) { + (my_cdie)((my_c),((unsigned char *)"calling not a function")); + } + if ((my_n)->my_b) { + (my_unify)((my_c),((((my_n)->my_a)->my_t)->my_arg),(((my_n)->my_b)->my_t)); + } else { + (my_unify)((my_c),((((my_n)->my_a)->my_t)->my_arg),((struct my_type*)0UL)); + } + ((my_n)->my_t)=((((my_n)->my_a)->my_t)->my_val); + } 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)))) { + if ((unsigned long)(((long)(((((my_n)->my_a)->my_t)->my_val)->my_kind))!=((long)(my_TY_STRUCT)))) { + (my_cdie)((my_c),((unsigned char *)"dot not a struct")); + } + (my_v)=((my_find)((my_c),((((((my_n)->my_a)->my_t)->my_val)->my_st)->my_name),(((my_n)->my_b)->my_s),(0UL))); + (my_emit_load)(((my_c)->my_as),(((my_n)->my_a)->my_t)); + } else { + if ((unsigned long)(((long)((((my_n)->my_a)->my_t)->my_kind))!=((long)(my_TY_STRUCT)))) { + (my_cdie)((my_c),((unsigned char *)"dot not a struct")); + } + (my_v)=((my_find)((my_c),(((((my_n)->my_a)->my_t)->my_st)->my_name),(((my_n)->my_b)->my_s),(0UL))); + } + if ((unsigned long)(((unsigned long)(!(my_v)))||((unsigned long)(!((my_v)->my_member_defined))))) { + (my_cdie)((my_c),((unsigned char *)"no such member")); + } + (my_emit_num)(((my_c)->my_as),((my_v)->my_member_offset)); + (my_emit_add)(((my_c)->my_as)); + ((my_n)->my_t)=((my_v)->my_member_type); + if (my_rhs) { + (my_emit_load)(((my_c)->my_as),((my_n)->my_t)); + } + } else if ((unsigned long)(((long)(my_kind))==((long)(my_N_IDENT)))) { + (my_v)=((my_find)((my_c),((my_n)->my_s),((unsigned char*)0UL),(0UL))); + if ((unsigned long)((my_v)&&((my_v)->my_enum_defined))) { + (my_emit_num)(((my_c)->my_as),((my_v)->my_enum_value)); + ((my_n)->my_t)=((my_mktype0)((my_c),(my_TY_INT))); + return; + } + (my_v)=((my_find)((my_c),((my_d)->my_name),((my_n)->my_s),(0UL))); + if ((unsigned long)((my_v)&&((my_v)->my_var_defined))) { + (my_emit_lea)(((my_c)->my_as),((my_v)->my_var_offset)); + ((my_n)->my_t)=((my_v)->my_var_type); + if (my_rhs) { + (my_emit_load)(((my_c)->my_as),((my_n)->my_t)); + } + return; + } + (my_v)=((my_find)((my_c),((my_n)->my_s),((unsigned char*)0UL),(0UL))); + if ((unsigned long)((my_v)&&((my_v)->my_func_defined))) { + (my_emit_ptr)(((my_c)->my_as),((my_v)->my_func_label)); + ((my_n)->my_t)=((my_v)->my_func_type); + return; + } + (my_cdie)((my_c),((unsigned char *)"no such variable")); + } else if ((unsigned long)(((long)(my_kind))==((long)(my_N_ASSIGN)))) { + if ((unsigned long)(!(my_rhs))) { + (my_cdie)((my_c),((unsigned char *)"assign is not an lexpr")); + } + (my_compile_expr)((my_c),(my_d),((my_n)->my_b),(1UL)); + (my_compile_expr)((my_c),(my_d),((my_n)->my_a),(0UL)); + (my_unify)((my_c),(((my_n)->my_a)->my_t),(((my_n)->my_b)->my_t)); + ((my_n)->my_t)=(((my_n)->my_a)->my_t); + (my_emit_store)(((my_c)->my_as),((my_n)->my_t)); + } else if ((unsigned long)(((long)(my_kind))==((long)(my_N_SIZEOF)))) { + if ((unsigned long)(!(my_rhs))) { + (my_cdie)((my_c),((unsigned char *)"sizeof is not an lexpr")); + } + (my_out)=((my_mklabel)(((my_c)->my_as))); + (my_emit_jmp)(((my_c)->my_as),(my_out)); + (my_compile_expr)((my_c),(my_d),((my_n)->my_a),(0UL)); + (my_fixup_label)(((my_c)->my_as),(my_out)); + if ((unsigned long)(((long)((((my_n)->my_a)->my_t)->my_kind))==((long)(my_TY_BYTE)))) { + (my_emit_num)(((my_c)->my_as),(1UL)); + } else { + (my_emit_num)(((my_c)->my_as),((my_type_sizeof)((my_c),(((my_n)->my_a)->my_t)))); + } + ((my_n)->my_t)=((my_mktype0)((my_c),(my_TY_INT))); + } else if ((unsigned long)(((long)(my_kind))==((long)(my_N_REF)))) { + if ((unsigned long)(!(my_rhs))) { + (my_cdie)((my_c),((unsigned char *)"ref is not an lexpr")); + } + (my_compile_expr)((my_c),(my_d),((my_n)->my_a),(0UL)); + ((my_n)->my_t)=((my_mktype1)((my_c),(my_TY_PTR),(((my_n)->my_a)->my_t))); + } else if ((unsigned long)(((long)(my_kind))==((long)(my_N_DEREF)))) { + (my_compile_expr)((my_c),(my_d),((my_n)->my_a),(1UL)); + if ((unsigned long)(((long)((((my_n)->my_a)->my_t)->my_kind))!=((long)(my_TY_PTR)))) { + (my_cdie)((my_c),((unsigned char *)"deref not a pointer")); + } + ((my_n)->my_t)=((((my_n)->my_a)->my_t)->my_val); + if (my_rhs) { + (my_emit_load)(((my_c)->my_as),((my_n)->my_t)); + } + } else if ((unsigned long)(((long)(my_kind))==((long)(my_N_INDEX)))) { + (my_compile_expr)((my_c),(my_d),((my_n)->my_a),(1UL)); + (my_compile_expr)((my_c),(my_d),((my_n)->my_b),(1UL)); + if ((unsigned long)(((long)((((my_n)->my_a)->my_t)->my_kind))!=((long)(my_TY_PTR)))) { + (my_cdie)((my_c),((unsigned char *)"not a pointer")); + } + if ((unsigned long)(!((my_type_isint)((((my_n)->my_b)->my_t))))) { + (my_cdie)((my_c),((unsigned char *)"index: not an int")); + } + ((my_n)->my_t)=((((my_n)->my_a)->my_t)->my_val); + if ((unsigned long)(((long)(((my_n)->my_t)->my_kind))==((long)(my_TY_BYTE)))) { + (my_emit_num)(((my_c)->my_as),(1UL)); + } else { + (my_emit_num)(((my_c)->my_as),((my_type_sizeof)((my_c),((my_n)->my_t)))); + } + (my_emit_mul)(((my_c)->my_as)); + (my_emit_add)(((my_c)->my_as)); + if (my_rhs) { + (my_emit_load)(((my_c)->my_as),((my_n)->my_t)); + } + } else if ((unsigned long)(((long)(my_kind))==((long)(my_N_LT)))) { + if ((unsigned long)(!(my_rhs))) { + (my_cdie)((my_c),((unsigned char *)"not lexpr")); + } + (my_compile_expr)((my_c),(my_d),((my_n)->my_b),(1UL)); + (my_compile_expr)((my_c),(my_d),((my_n)->my_a),(1UL)); + (my_emit_lt)(((my_c)->my_as)); + (my_unify)((my_c),(((my_n)->my_a)->my_t),(((my_n)->my_b)->my_t)); + if ((unsigned long)(!((my_type_isprim)((((my_n)->my_a)->my_t))))) { + (my_cdie)((my_c),((unsigned char *)"lt: not an int")); + } + ((my_n)->my_t)=(((my_n)->my_a)->my_t); + } else if ((unsigned long)(((long)(my_kind))==((long)(my_N_GT)))) { + if ((unsigned long)(!(my_rhs))) { + (my_cdie)((my_c),((unsigned char *)"not lexpr")); + } + (my_compile_expr)((my_c),(my_d),((my_n)->my_b),(1UL)); + (my_compile_expr)((my_c),(my_d),((my_n)->my_a),(1UL)); + (my_emit_gt)(((my_c)->my_as)); + (my_unify)((my_c),(((my_n)->my_a)->my_t),(((my_n)->my_b)->my_t)); + if ((unsigned long)(!((my_type_isprim)((((my_n)->my_a)->my_t))))) { + (my_cdie)((my_c),((unsigned char *)"gt: not an int")); + } + ((my_n)->my_t)=(((my_n)->my_a)->my_t); + } else if ((unsigned long)(((long)(my_kind))==((long)(my_N_LE)))) { + if ((unsigned long)(!(my_rhs))) { + (my_cdie)((my_c),((unsigned char *)"not lexpr")); + } + (my_compile_expr)((my_c),(my_d),((my_n)->my_b),(1UL)); + (my_compile_expr)((my_c),(my_d),((my_n)->my_a),(1UL)); + (my_emit_le)(((my_c)->my_as)); + (my_unify)((my_c),(((my_n)->my_a)->my_t),(((my_n)->my_b)->my_t)); + if ((unsigned long)(!((my_type_isprim)((((my_n)->my_a)->my_t))))) { + (my_cdie)((my_c),((unsigned char *)"le: not an int")); + } + ((my_n)->my_t)=(((my_n)->my_a)->my_t); + } else if ((unsigned long)(((long)(my_kind))==((long)(my_N_GE)))) { + if ((unsigned long)(!(my_rhs))) { + (my_cdie)((my_c),((unsigned char *)"not lexpr")); + } + (my_compile_expr)((my_c),(my_d),((my_n)->my_b),(1UL)); + (my_compile_expr)((my_c),(my_d),((my_n)->my_a),(1UL)); + (my_emit_ge)(((my_c)->my_as)); + (my_unify)((my_c),(((my_n)->my_a)->my_t),(((my_n)->my_b)->my_t)); + if ((unsigned long)(!((my_type_isprim)((((my_n)->my_a)->my_t))))) { + (my_cdie)((my_c),((unsigned char *)"ge: not an int")); + } + ((my_n)->my_t)=(((my_n)->my_a)->my_t); + } else if ((unsigned long)(((long)(my_kind))==((long)(my_N_EQ)))) { + if ((unsigned long)(!(my_rhs))) { + (my_cdie)((my_c),((unsigned char *)"not lexpr")); + } + (my_compile_expr)((my_c),(my_d),((my_n)->my_b),(1UL)); + (my_compile_expr)((my_c),(my_d),((my_n)->my_a),(1UL)); + (my_emit_eq)(((my_c)->my_as)); + (my_unify)((my_c),(((my_n)->my_a)->my_t),(((my_n)->my_b)->my_t)); + if ((unsigned long)(!((my_type_isprim)((((my_n)->my_a)->my_t))))) { + (my_cdie)((my_c),((unsigned char *)"eq: not an int")); + } + ((my_n)->my_t)=(((my_n)->my_a)->my_t); + } else if ((unsigned long)(((long)(my_kind))==((long)(my_N_NE)))) { + if ((unsigned long)(!(my_rhs))) { + (my_cdie)((my_c),((unsigned char *)"not lexpr")); + } + (my_compile_expr)((my_c),(my_d),((my_n)->my_b),(1UL)); + (my_compile_expr)((my_c),(my_d),((my_n)->my_a),(1UL)); + (my_emit_ne)(((my_c)->my_as)); + (my_unify)((my_c),(((my_n)->my_a)->my_t),(((my_n)->my_b)->my_t)); + if ((unsigned long)(!((my_type_isprim)((((my_n)->my_a)->my_t))))) { + (my_cdie)((my_c),((unsigned char *)"ne: not an int")); + } + ((my_n)->my_t)=(((my_n)->my_a)->my_t); + } else if ((unsigned long)(((long)(my_kind))==((long)(my_N_BNOT)))) { + if ((unsigned long)(!(my_rhs))) { + (my_cdie)((my_c),((unsigned char *)"not lexpr")); + } + (my_no)=((my_mklabel)(((my_c)->my_as))); + (my_out)=((my_mklabel)(((my_c)->my_as))); + (my_compile_expr)((my_c),(my_d),((my_n)->my_a),(1UL)); + (my_emit_jz)(((my_c)->my_as),(my_no)); + (my_emit_num)(((my_c)->my_as),(0UL)); + (my_emit_jmp)(((my_c)->my_as),(my_out)); + (my_fixup_label)(((my_c)->my_as),(my_no)); + (my_emit_num)(((my_c)->my_as),(1UL)); + (my_fixup_label)(((my_c)->my_as),(my_out)); + if ((unsigned long)(!((my_type_isprim)((((my_n)->my_a)->my_t))))) { + (my_cdie)((my_c),((unsigned char *)"not an prim")); + } + ((my_n)->my_t)=((my_mktype0)((my_c),(my_TY_INT))); + } else if ((unsigned long)(((long)(my_kind))==((long)(my_N_BOR)))) { + if ((unsigned long)(!(my_rhs))) { + (my_cdie)((my_c),((unsigned char *)"not lexpr")); + } + (my_no)=((my_mklabel)(((my_c)->my_as))); + (my_out)=((my_mklabel)(((my_c)->my_as))); + (my_compile_expr)((my_c),(my_d),((my_n)->my_a),(1UL)); + (my_emit_jz)(((my_c)->my_as),(my_no)); + (my_emit_num)(((my_c)->my_as),(1UL)); + (my_emit_jmp)(((my_c)->my_as),(my_out)); + (my_fixup_label)(((my_c)->my_as),(my_no)); + (my_no)=((my_mklabel)(((my_c)->my_as))); + (my_compile_expr)((my_c),(my_d),((my_n)->my_b),(1UL)); + (my_emit_jz)(((my_c)->my_as),(my_no)); + (my_emit_num)(((my_c)->my_as),(1UL)); + (my_emit_jmp)(((my_c)->my_as),(my_out)); + (my_fixup_label)(((my_c)->my_as),(my_no)); + (my_emit_num)(((my_c)->my_as),(0UL)); + (my_fixup_label)(((my_c)->my_as),(my_out)); + if ((unsigned long)(!((my_type_isprim)((((my_n)->my_a)->my_t))))) { + (my_cdie)((my_c),((unsigned char *)"not an prim")); + } + if ((unsigned long)(!((my_type_isprim)((((my_n)->my_b)->my_t))))) { + (my_cdie)((my_c),((unsigned char *)"not an prim")); + } + ((my_n)->my_t)=((my_mktype0)((my_c),(my_TY_INT))); + } else if ((unsigned long)(((long)(my_kind))==((long)(my_N_BAND)))) { + if ((unsigned long)(!(my_rhs))) { + (my_cdie)((my_c),((unsigned char *)"not lexpr")); + } + (my_no)=((my_mklabel)(((my_c)->my_as))); + (my_out)=((my_mklabel)(((my_c)->my_as))); + (my_compile_expr)((my_c),(my_d),((my_n)->my_a),(1UL)); + (my_emit_jz)(((my_c)->my_as),(my_no)); + (my_compile_expr)((my_c),(my_d),((my_n)->my_b),(1UL)); + (my_emit_jz)(((my_c)->my_as),(my_no)); + (my_emit_num)(((my_c)->my_as),(1UL)); + (my_emit_jmp)(((my_c)->my_as),(my_out)); + (my_fixup_label)(((my_c)->my_as),(my_no)); + (my_emit_num)(((my_c)->my_as),(0UL)); + (my_fixup_label)(((my_c)->my_as),(my_out)); + if ((unsigned long)(!((my_type_isprim)((((my_n)->my_a)->my_t))))) { + (my_cdie)((my_c),((unsigned char *)"not an prim")); + } + if ((unsigned long)(!((my_type_isprim)((((my_n)->my_b)->my_t))))) { + (my_cdie)((my_c),((unsigned char *)"not an prim")); + } + ((my_n)->my_t)=((my_mktype0)((my_c),(my_TY_INT))); + } else if ((unsigned long)(((long)(my_kind))==((long)(my_N_POS)))) { + if ((unsigned long)(!(my_rhs))) { + (my_cdie)((my_c),((unsigned char *)"not lexpr")); + } + (my_compile_expr)((my_c),(my_d),((my_n)->my_a),(1UL)); + if ((unsigned long)(!((my_type_isint)((((my_n)->my_a)->my_t))))) { + (my_cdie)((my_c),((unsigned char *)"pos: not an int")); + } + ((my_n)->my_t)=(((my_n)->my_a)->my_t); + } else if ((unsigned long)(((long)(my_kind))==((long)(my_N_NEG)))) { + if ((unsigned long)(!(my_rhs))) { + (my_cdie)((my_c),((unsigned char *)"not lexpr")); + } + (my_compile_expr)((my_c),(my_d),((my_n)->my_a),(1UL)); + (my_emit_neg)(((my_c)->my_as)); + if ((unsigned long)(!((my_type_isint)((((my_n)->my_a)->my_t))))) { + (my_cdie)((my_c),((unsigned char *)"neg: not an int")); + } + ((my_n)->my_t)=(((my_n)->my_a)->my_t); + } else if ((unsigned long)(((long)(my_kind))==((long)(my_N_NOT)))) { + if ((unsigned long)(!(my_rhs))) { + (my_cdie)((my_c),((unsigned char *)"not lexpr")); + } + (my_compile_expr)((my_c),(my_d),((my_n)->my_a),(1UL)); + (my_emit_not)(((my_c)->my_as)); + if ((unsigned long)(!((my_type_isint)((((my_n)->my_a)->my_t))))) { + (my_cdie)((my_c),((unsigned char *)"not: not an int")); + } + ((my_n)->my_t)=(((my_n)->my_a)->my_t); + } else if ((unsigned long)(((long)(my_kind))==((long)(my_N_ADD)))) { + if ((unsigned long)(!(my_rhs))) { + (my_cdie)((my_c),((unsigned char *)"not lexpr")); + } + (my_compile_expr)((my_c),(my_d),((my_n)->my_b),(1UL)); + (my_compile_expr)((my_c),(my_d),((my_n)->my_a),(1UL)); + (my_emit_add)(((my_c)->my_as)); + (my_unify)((my_c),(((my_n)->my_a)->my_t),(((my_n)->my_b)->my_t)); + if ((unsigned long)(!((my_type_isint)((((my_n)->my_a)->my_t))))) { + (my_cdie)((my_c),((unsigned char *)"add: not an int")); + } + ((my_n)->my_t)=(((my_n)->my_a)->my_t); + } else if ((unsigned long)(((long)(my_kind))==((long)(my_N_SUB)))) { + if ((unsigned long)(!(my_rhs))) { + (my_cdie)((my_c),((unsigned char *)"not lexpr")); + } + (my_compile_expr)((my_c),(my_d),((my_n)->my_b),(1UL)); + (my_compile_expr)((my_c),(my_d),((my_n)->my_a),(1UL)); + (my_emit_sub)(((my_c)->my_as)); + (my_unify)((my_c),(((my_n)->my_a)->my_t),(((my_n)->my_b)->my_t)); + if ((unsigned long)(!((my_type_isint)((((my_n)->my_a)->my_t))))) { + (my_cdie)((my_c),((unsigned char *)"sub: not an int")); + } + ((my_n)->my_t)=(((my_n)->my_a)->my_t); + } else if ((unsigned long)(((long)(my_kind))==((long)(my_N_MUL)))) { + if ((unsigned long)(!(my_rhs))) { + (my_cdie)((my_c),((unsigned char *)"not lexpr")); + } + (my_compile_expr)((my_c),(my_d),((my_n)->my_b),(1UL)); + (my_compile_expr)((my_c),(my_d),((my_n)->my_a),(1UL)); + (my_emit_mul)(((my_c)->my_as)); + (my_unify)((my_c),(((my_n)->my_a)->my_t),(((my_n)->my_b)->my_t)); + if ((unsigned long)(!((my_type_isint)((((my_n)->my_a)->my_t))))) { + (my_cdie)((my_c),((unsigned char *)"mul: not an int")); + } + ((my_n)->my_t)=(((my_n)->my_a)->my_t); + } else if ((unsigned long)(((long)(my_kind))==((long)(my_N_DIV)))) { + if ((unsigned long)(!(my_rhs))) { + (my_cdie)((my_c),((unsigned char *)"not lexpr")); + } + (my_compile_expr)((my_c),(my_d),((my_n)->my_b),(1UL)); + (my_compile_expr)((my_c),(my_d),((my_n)->my_a),(1UL)); + (my_emit_div)(((my_c)->my_as)); + (my_unify)((my_c),(((my_n)->my_a)->my_t),(((my_n)->my_b)->my_t)); + if ((unsigned long)(!((my_type_isint)((((my_n)->my_a)->my_t))))) { + (my_cdie)((my_c),((unsigned char *)"div: not an int")); + } + ((my_n)->my_t)=(((my_n)->my_a)->my_t); + } else if ((unsigned long)(((long)(my_kind))==((long)(my_N_MOD)))) { + if ((unsigned long)(!(my_rhs))) { + (my_cdie)((my_c),((unsigned char *)"not lexpr")); + } + (my_compile_expr)((my_c),(my_d),((my_n)->my_b),(1UL)); + (my_compile_expr)((my_c),(my_d),((my_n)->my_a),(1UL)); + (my_emit_mod)(((my_c)->my_as)); + (my_unify)((my_c),(((my_n)->my_a)->my_t),(((my_n)->my_b)->my_t)); + if ((unsigned long)(!((my_type_isint)((((my_n)->my_a)->my_t))))) { + (my_cdie)((my_c),((unsigned char *)"mod: not an int")); + } + ((my_n)->my_t)=(((my_n)->my_a)->my_t); + } else if ((unsigned long)(((long)(my_kind))==((long)(my_N_LSH)))) { + if ((unsigned long)(!(my_rhs))) { + (my_cdie)((my_c),((unsigned char *)"not lexpr")); + } + (my_compile_expr)((my_c),(my_d),((my_n)->my_b),(1UL)); + (my_compile_expr)((my_c),(my_d),((my_n)->my_a),(1UL)); + (my_emit_lsh)(((my_c)->my_as)); + (my_unify)((my_c),(((my_n)->my_a)->my_t),(((my_n)->my_b)->my_t)); + if ((unsigned long)(!((my_type_isint)((((my_n)->my_a)->my_t))))) { + (my_cdie)((my_c),((unsigned char *)"lsh: not an int")); + } + ((my_n)->my_t)=(((my_n)->my_a)->my_t); + } else if ((unsigned long)(((long)(my_kind))==((long)(my_N_RSH)))) { + if ((unsigned long)(!(my_rhs))) { + (my_cdie)((my_c),((unsigned char *)"not lexpr")); + } + (my_compile_expr)((my_c),(my_d),((my_n)->my_b),(1UL)); + (my_compile_expr)((my_c),(my_d),((my_n)->my_a),(1UL)); + (my_emit_rsh)(((my_c)->my_as)); + (my_unify)((my_c),(((my_n)->my_a)->my_t),(((my_n)->my_b)->my_t)); + if ((unsigned long)(!((my_type_isint)((((my_n)->my_a)->my_t))))) { + (my_cdie)((my_c),((unsigned char *)"rsh: not an int")); + } + ((my_n)->my_t)=(((my_n)->my_a)->my_t); + } else if ((unsigned long)(((long)(my_kind))==((long)(my_N_AND)))) { + if ((unsigned long)(!(my_rhs))) { + (my_cdie)((my_c),((unsigned char *)"not lexpr")); + } + (my_compile_expr)((my_c),(my_d),((my_n)->my_b),(1UL)); + (my_compile_expr)((my_c),(my_d),((my_n)->my_a),(1UL)); + (my_emit_and)(((my_c)->my_as)); + (my_unify)((my_c),(((my_n)->my_a)->my_t),(((my_n)->my_b)->my_t)); + if ((unsigned long)(!((my_type_isint)((((my_n)->my_a)->my_t))))) { + (my_cdie)((my_c),((unsigned char *)"and: not an int")); + } + ((my_n)->my_t)=(((my_n)->my_a)->my_t); + } else if ((unsigned long)(((long)(my_kind))==((long)(my_N_OR)))) { + if ((unsigned long)(!(my_rhs))) { + (my_cdie)((my_c),((unsigned char *)"not lexpr")); + } + (my_compile_expr)((my_c),(my_d),((my_n)->my_b),(1UL)); + (my_compile_expr)((my_c),(my_d),((my_n)->my_a),(1UL)); + (my_emit_or)(((my_c)->my_as)); + (my_unify)((my_c),(((my_n)->my_a)->my_t),(((my_n)->my_b)->my_t)); + if ((unsigned long)(!((my_type_isint)((((my_n)->my_a)->my_t))))) { + (my_cdie)((my_c),((unsigned char *)"or: not an int")); + } + ((my_n)->my_t)=(((my_n)->my_a)->my_t); + } else if ((unsigned long)(((long)(my_kind))==((long)(my_N_XOR)))) { + if ((unsigned long)(!(my_rhs))) { + (my_cdie)((my_c),((unsigned char *)"not lexpr")); + } + (my_compile_expr)((my_c),(my_d),((my_n)->my_b),(1UL)); + (my_compile_expr)((my_c),(my_d),((my_n)->my_a),(1UL)); + (my_emit_xor)(((my_c)->my_as)); + (my_unify)((my_c),(((my_n)->my_a)->my_t),(((my_n)->my_b)->my_t)); + if ((unsigned long)(!((my_type_isint)((((my_n)->my_a)->my_t))))) { + (my_cdie)((my_c),((unsigned char *)"xor: not an int")); + } + ((my_n)->my_t)=(((my_n)->my_a)->my_t); + } else if ((unsigned long)(((long)(my_kind))==((long)(my_N_CAST)))) { + if ((unsigned long)(!(my_rhs))) { + (my_cdie)((my_c),((unsigned char *)"not lexpr")); + } + (my_compile_expr)((my_c),(my_d),((my_n)->my_a),(1UL)); + if ((unsigned long)(!((my_type_isprim)((((my_n)->my_a)->my_t))))) { + (my_cdie)((my_c),((unsigned char *)"not a primitive")); + } + ((my_n)->my_t)=((my_prototype)((my_c),((my_n)->my_b))); + } else { + (my_cdie)((my_c),((unsigned char *)"not an expression")); + } +} +void( my_compile_func)(struct my_compiler* my_c,struct my_decl* my_d){ + unsigned char* my_name = 0; + struct my_decl* my_v = 0; + struct my_type* my_t = 0; + unsigned long my_offset = 0; + struct my_node* my_n = 0; + unsigned long my_pragma = 0; + if ((unsigned long)(!((my_d)->my_func_def))) { + return; + } + (my_n)=(((((my_d)->my_func_def)->my_a)->my_b)->my_a); + (my_offset)=(16UL); + while (1) { + if ((unsigned long)(!(my_n))) { + break; + } + ((my_c)->my_filename)=(((my_n)->my_a)->my_filename); + ((my_c)->my_lineno)=(((my_n)->my_a)->my_lineno); + ((my_c)->my_colno)=(((my_n)->my_a)->my_colno); + (my_name)=((((my_n)->my_a)->my_a)->my_s); + (my_t)=((my_prototype)((my_c),(((my_n)->my_a)->my_b))); + (my_v)=((my_find)((my_c),((my_d)->my_name),(my_name),(1UL))); + if ((my_v)->my_var_defined) { + (my_cdie)((my_c),((unsigned char *)"duplicate argument")); + } + ((my_v)->my_var_defined)=(1UL); + ((my_v)->my_var_type)=(my_t); + ((my_v)->my_var_offset)=(my_offset); + ((my_v)->my_var_def)=((my_n)->my_a); + (my_offset)=((unsigned long)(((unsigned long)(my_offset))+((unsigned long)(8UL)))); + (my_n)=((my_n)->my_b); + } + (my_offset)=((my_hoist_locals)((my_c),(my_d),(((my_d)->my_func_def)->my_b),(0UL))); + if ((unsigned long)(!((my_strcmp)(((my_d)->my_name),((unsigned char *)"_start"))))) { + (my_pragma)=(1UL); + } else if ((unsigned long)(!((my_strcmp)(((my_d)->my_name),((unsigned char *)"_kstart"))))) { + (my_pragma)=(2UL); + } else { + (my_pragma)=(0UL); + } + (my_emit_str)(((my_c)->my_as),((my_d)->my_name)); + (my_fixup_label)(((my_c)->my_as),((my_d)->my_func_label)); + (my_emit_preamble)(((my_c)->my_as),(my_offset),(my_pragma)); + (my_compile_stmt)((my_c),(my_d),(((my_d)->my_func_def)->my_b),((struct my_label*)0UL),((struct my_label*)0UL)); + (my_emit_num)(((my_c)->my_as),(0UL)); + if (my_pragma) { + (my_emit_ud)(((my_c)->my_as)); + } + (my_emit_ret)(((my_c)->my_as)); +} +void( my_compile_include)(struct my_compiler* my_c,struct my_node* my_n){ + unsigned char* my_filename = 0; + unsigned long my_fd = 0; + unsigned char* my_blob = 0; + unsigned long my_len = 0; + if ((unsigned long)(((long)((((my_n)->my_b)->my_a)->my_kind))!=((long)(my_N_STR)))) { + (my_die)(((unsigned char *)"non literal include")); + } + (my_filename)=((((my_n)->my_b)->my_a)->my_s); + (my_fd)=((my_open)((my_filename),(my_O_RDONLY),(0UL))); + if ((unsigned long)(((long)(my_fd))<((long)(0UL)))) { + (my_die)(((unsigned char *)"failed to open include")); + } + (my_blob)=((my_readall)((my_fd),(&(my_len)),((my_c)->my_a))); + (my_close)((my_fd)); + (my_as_opr)(((my_c)->my_as),(my_OP_POPR),(my_R_RAX)); + (my_as_opr)(((my_c)->my_as),(my_OP_POPR),(my_R_RDI)); + (my_as_opri64)(((my_c)->my_as),(my_OP_MOVABS),(my_R_RAX),(my_len)); + (my_as_modrm)(((my_c)->my_as),(my_OP_STORE),(my_R_RAX),(my_R_RDI),(0UL),(0UL),(0UL)); + (my_emit_blob)(((my_c)->my_as),(my_blob),(my_len)); + (my_free)(((my_c)->my_a),(my_blob)); +} +void( my_compile_stmt)(struct my_compiler* my_c,struct my_decl* my_d,struct my_node* my_n,struct my_label* my_top,struct my_label* my_out){ + struct my_label* my_no = 0; + struct my_label* my_ifout = 0; + struct my_decl* my_v = 0; + unsigned long my_kind = 0; + if ((unsigned long)(!(my_n))) { + return; + } + ((my_c)->my_filename)=((my_n)->my_filename); + ((my_c)->my_lineno)=((my_n)->my_lineno); + ((my_c)->my_colno)=((my_n)->my_colno); + (my_kind)=((my_n)->my_kind); + if ((unsigned long)(((long)(my_kind))==((long)(my_N_CONDLIST)))) { + (my_ifout)=((my_mklabel)(((my_c)->my_as))); + (my_no)=((struct my_label*)0UL); + while (1) { + if (my_no) { + (my_fixup_label)(((my_c)->my_as),(my_no)); + } + if ((unsigned long)(!(my_n))) { + break; + } + (my_no)=((my_mklabel)(((my_c)->my_as))); + if (((my_n)->my_a)->my_a) { + (my_compile_expr)((my_c),(my_d),(((my_n)->my_a)->my_a),(1UL)); + (my_emit_jz)(((my_c)->my_as),(my_no)); + } + (my_compile_stmt)((my_c),(my_d),(((my_n)->my_a)->my_b),(my_top),(my_out)); + (my_emit_jmp)(((my_c)->my_as),(my_ifout)); + (my_n)=((my_n)->my_b); + } + (my_fixup_label)(((my_c)->my_as),(my_ifout)); + } else if ((unsigned long)(((long)(my_kind))==((long)(my_N_STMTLIST)))) { + while (1) { + if ((unsigned long)(!(my_n))) { + break; + } + (my_compile_stmt)((my_c),(my_d),((my_n)->my_a),(my_top),(my_out)); + (my_n)=((my_n)->my_b); + } + } else if ((unsigned long)(((long)(my_kind))==((long)(my_N_LOOP)))) { + (my_top)=((my_mklabel)(((my_c)->my_as))); + (my_out)=((my_mklabel)(((my_c)->my_as))); + (my_fixup_label)(((my_c)->my_as),(my_top)); + (my_compile_stmt)((my_c),(my_d),((my_n)->my_a),(my_top),(my_out)); + (my_emit_jmp)(((my_c)->my_as),(my_top)); + (my_fixup_label)(((my_c)->my_as),(my_out)); + } else if ((unsigned long)(((long)(my_kind))==((long)(my_N_BREAK)))) { + if ((unsigned long)(!(my_out))) { + (my_cdie)((my_c),((unsigned char *)"break outside loop")); + } + (my_emit_jmp)(((my_c)->my_as),(my_out)); + } else if ((unsigned long)(((long)(my_kind))==((long)(my_N_CONTINUE)))) { + if ((unsigned long)(!(my_top))) { + (my_cdie)((my_c),((unsigned char *)"continue outside loop")); + } + (my_emit_jmp)(((my_c)->my_as),(my_top)); + } else if ((unsigned long)(((long)(my_kind))==((long)(my_N_RETURN)))) { + if ((my_n)->my_a) { + if ((unsigned long)(((long)((((my_d)->my_func_type)->my_val)->my_kind))==((long)(my_TY_VOID)))) { + (my_cdie)((my_c),((unsigned char *)"returning a value in a void function")); + } + (my_compile_expr)((my_c),(my_d),((my_n)->my_a),(1UL)); + (my_unify)((my_c),(((my_n)->my_a)->my_t),(((my_d)->my_func_type)->my_val)); + } else { + if ((unsigned long)(((long)((((my_d)->my_func_type)->my_val)->my_kind))!=((long)(my_TY_VOID)))) { + (my_cdie)((my_c),((unsigned char *)"returning void in a non void function")); + } + (my_emit_num)(((my_c)->my_as),(0UL)); + } + (my_emit_ret)(((my_c)->my_as)); + } else if ((unsigned long)(((long)(my_kind))==((long)(my_N_LABEL)))) { + (my_v)=((my_find)((my_c),((my_d)->my_name),(((my_n)->my_a)->my_s),(0UL))); + (my_fixup_label)(((my_c)->my_as),((my_v)->my_goto_label)); + } else if ((unsigned long)(((long)(my_kind))==((long)(my_N_GOTO)))) { + (my_v)=((my_find)((my_c),((my_d)->my_name),(((my_n)->my_a)->my_s),(0UL))); + if ((unsigned long)(((unsigned long)(!(my_v)))||((unsigned long)(!((my_v)->my_goto_defined))))) { + (my_cdie)((my_c),((unsigned char *)"label not defined")); + } + (my_emit_jmp)(((my_c)->my_as),((my_v)->my_goto_label)); + } else if ((unsigned long)(((long)(my_kind))!=((long)(my_N_VARDECL)))) { + (my_compile_expr)((my_c),(my_d),(my_n),(1UL)); + (my_emit_pop)(((my_c)->my_as),(1UL)); + } +} +struct my_node*( my_concat_program)(struct my_node* my_a,struct my_node* my_b){ + struct my_node* my_ret = 0; + if ((unsigned long)(!(my_a))) { + return my_b; + } + if ((unsigned long)(!(my_b))) { + return my_a; + } + (my_ret)=(my_a); + while (1) { + if ((unsigned long)(!((my_a)->my_b))) { + break; + } + (my_a)=((my_a)->my_b); + } + ((my_a)->my_b)=(my_b); + return my_ret; +} +struct my_peg_node*( my_construct)(struct my_peg* my_c,unsigned long my_sp){ + unsigned long my_i = 0; + unsigned long my_j = 0; + unsigned long my_nargs = 0; + struct my_peg_node* my_n = 0; + struct my_peg_node** my_link = 0; + (((my_c)->my_nstack)[0UL])=((struct my_peg_node*)0UL); + (my_i)=(0UL); + while (1) { + if ((unsigned long)(((long)(my_i))==((long)((my_c)->my_op)))) { + return ((my_c)->my_nstack)[0UL]; + } + if ((unsigned long)(((long)((((my_c)->my_out)[my_i]).my_tag))!=((long)(my_sp)))) { + (my_n)=((struct my_peg_node*)(my_alloc)(((my_c)->my_a),(64UL))); + ((my_n)->my_tag)=((((my_c)->my_out)[my_i]).my_tag); + ((my_n)->my_next)=((struct my_peg_node*)0UL); + ((my_n)->my_child)=((struct my_peg_node*)0UL); + ((my_n)->my_str)=(&(((my_c)->my_src)[(((my_c)->my_out)[my_i]).my_start])); + ((my_n)->my_len)=((unsigned long)(((unsigned long)((((my_c)->my_out)[my_i]).my_end))-((unsigned long)((((my_c)->my_out)[my_i]).my_start)))); + ((my_n)->my_filename)=((my_c)->my_filename); + ((my_n)->my_line)=((((my_c)->my_out)[my_i]).my_line); + ((my_n)->my_col)=((((my_c)->my_out)[my_i]).my_col); + (my_nargs)=((((my_c)->my_out)[my_i]).my_nargs); + if ((unsigned long)(((long)(my_nargs))>((long)((my_c)->my_np)))) { + (my_die)(((unsigned char *)"node underflow")); + } + (my_link)=(&((my_n)->my_child)); + (my_j)=((unsigned long)(((unsigned long)((my_c)->my_np))-((unsigned long)(my_nargs)))); + while (1) { + if ((unsigned long)(((long)(my_j))==((long)((my_c)->my_np)))) { + break; + } + if (((my_c)->my_nstack)[my_j]) { + (*(my_link))=(((my_c)->my_nstack)[my_j]); + (my_link)=(&((((my_c)->my_nstack)[my_j])->my_next)); + } + (my_j)=((unsigned long)(((unsigned long)(my_j))+((unsigned long)(1UL)))); + } + ((my_c)->my_np)=((unsigned long)(((unsigned long)((my_c)->my_np))-((unsigned long)(my_nargs)))); + if ((unsigned long)(((long)((my_c)->my_np))==((long)((my_c)->my_ncap)))) { + (my_die)(((unsigned char *)"node overflow")); + } + } else { + (my_n)=((struct my_peg_node*)0UL); + } + (((my_c)->my_nstack)[(my_c)->my_np])=(my_n); + ((my_c)->my_np)=((unsigned long)(((unsigned long)((my_c)->my_np))+((unsigned long)(1UL)))); + (my_i)=((unsigned long)(((unsigned long)(my_i))+((unsigned long)(1UL)))); + } +} +void( my_copypos)(struct my_node* my_n,struct my_peg_node* my_pn){ + ((my_n)->my_filename)=((my_pn)->my_filename); + ((my_n)->my_lineno)=((my_pn)->my_line); + ((my_n)->my_colno)=((my_pn)->my_col); +} +unsigned long( my_count_args)(struct my_compiler* my_c,struct my_type* my_t){ + unsigned long my_nargs = 0; + (my_nargs)=(0UL); + while (1) { + if ((unsigned long)(!(my_t))) { + break; + } + (my_t)=((my_t)->my_arg); + (my_nargs)=((unsigned long)(((unsigned long)(my_nargs))+((unsigned long)(1UL)))); + } + return my_nargs; +} +void( my_cshow_context)(struct my_compiler* my_c){ + (my_fdputs)((2UL),((unsigned char *)"on ")); + if ((my_c)->my_filename) { + (my_fdputs)((2UL),((my_c)->my_filename)); + } + (my_fdputs)((2UL),((unsigned char *)":")); + (my_fdputd)((2UL),((my_c)->my_lineno)); + (my_fdputs)((2UL),((unsigned char *)":")); + (my_fdputd)((2UL),((my_c)->my_colno)); + (my_fdputs)((2UL),((unsigned char *)"\012")); +} +void( my_ctranslate)(struct my_compiler* my_c){ + struct my_decl* my_d = 0; + unsigned long my_seen = 0; + unsigned long my_has_enum = 0; + (my_fputs)(((my_c)->my_cout),((unsigned char *)"#ifndef my__start\012")); + (my_fputs)(((my_c)->my_cout),((unsigned char *)"#define my__start main\012")); + (my_fputs)(((my_c)->my_cout),((unsigned char *)"#endif\012")); + (my_fputs)(((my_c)->my_cout),((unsigned char *)"#ifndef my_syscall\012")); + (my_fputs)(((my_c)->my_cout),((unsigned char *)"#define my_syscall syscall\012")); + (my_fputs)(((my_c)->my_cout),((unsigned char *)"#endif\012")); + (my_d)=((my_first_decl)((my_c))); + while (1) { + if ((unsigned long)(!(my_d))) { + break; + } + if ((my_d)->my_struct_defined) { + (my_fputs)(((my_c)->my_cout),((unsigned char *)"struct my_")); + (my_fputs)(((my_c)->my_cout),((my_d)->my_name)); + (my_fputs)(((my_c)->my_cout),((unsigned char *)";\012")); + } + (my_d)=((my_next_decl)((my_c),(my_d))); + } + (my_d)=((my_first_decl)((my_c))); + while (1) { + if ((unsigned long)(!(my_d))) { + break; + } + if ((my_d)->my_struct_defined) { + (my_ctranslate_struct)((my_c),(my_d)); + } + (my_d)=((my_next_decl)((my_c),(my_d))); + } + (my_d)=((my_first_decl)((my_c))); + (my_has_enum)=(0UL); + (my_seen)=(0UL); + while (1) { + if ((unsigned long)(!(my_d))) { + break; + } + if ((my_d)->my_enum_defined) { + if ((unsigned long)(!(my_has_enum))) { + (my_fputs)(((my_c)->my_cout),((unsigned char *)"enum {\012")); + (my_has_enum)=(1UL); + } + if (my_seen) { + (my_fputs)(((my_c)->my_cout),((unsigned char *)",\012")); + } + (my_fputs)(((my_c)->my_cout),((unsigned char *)"\011my_")); + (my_fputs)(((my_c)->my_cout),((my_d)->my_name)); + (my_fputs)(((my_c)->my_cout),((unsigned char *)" = ")); + (my_fputd)(((my_c)->my_cout),((my_d)->my_enum_value)); + (my_seen)=(1UL); + } + (my_d)=((my_next_decl)((my_c),(my_d))); + } + if (my_has_enum) { + (my_fputs)(((my_c)->my_cout),((unsigned char *)"\012};\012")); + } + (my_d)=((my_first_decl)((my_c))); + while (1) { + if ((unsigned long)(!(my_d))) { + break; + } + if ((my_d)->my_func_defined) { + (my_ctranslate_type)((my_c),((my_d)->my_func_type),((my_d)->my_name),(1UL),((((my_d)->my_func_decl)->my_b)->my_a)); + (my_fputs)(((my_c)->my_cout),((unsigned char *)";\012")); + } + (my_d)=((my_next_decl)((my_c),(my_d))); + } + (my_d)=((my_first_decl)((my_c))); + while (1) { + if ((unsigned long)(!(my_d))) { + break; + } + if ((my_d)->my_func_defined) { + (my_ctranslate_func)((my_c),(my_d)); + } + (my_d)=((my_next_decl)((my_c),(my_d))); + } + (my_flush_coutput)((my_c)); +} +void( my_ctranslate_expr)(struct my_compiler* my_c,struct my_node* my_n){ + if ((unsigned long)(((long)((my_n)->my_kind))==((long)(my_N_STR)))) { + (my_ctranslate_str)((my_c),((my_n)->my_s)); + } else if ((unsigned long)(((long)((my_n)->my_kind))==((long)(my_N_NUM)))) { + (my_fputd)(((my_c)->my_cout),((my_n)->my_n)); (my_fputs)(((my_c)->my_cout),((unsigned char *)"UL")); } else if ((unsigned long)(((long)((my_n)->my_kind))==((long)(my_N_CHAR)))) { (my_fputd)(((my_c)->my_cout),((my_n)->my_n)); @@ -2502,8 +2872,52 @@ unsigned long( my_dec2int)(unsigned char* my_s,unsigned long my_len,unsigned lon return 0UL; } } - (*(my_ok))=(1UL); - return my_x; + (*(my_ok))=(1UL); + return my_x; +} +unsigned long( my_decode_count)(struct my_peg_node* my_n){ + unsigned long my_ret = 0; + (my_ret)=(my_EXACTLY_ONE); + (my_n)=((my_n)->my_child); + while (1) { + if ((unsigned long)(!(my_n))) { + return my_ret; + } + if ((unsigned long)(((long)((my_n)->my_tag))==((long)(my_PEG_countop)))) { + if ((unsigned long)(((long)(((my_n)->my_str)[0UL]))==((long)((unsigned char)63)))) { + if ((unsigned long)(((long)(my_ret))==((long)(my_EXACTLY_ONE)))) { + (my_ret)=(my_ZERO_OR_ONE); + } else if ((unsigned long)(((long)(my_ret))==((long)(my_ONE_OR_MORE)))) { + (my_ret)=(my_ZERO_OR_MORE); + } + } else if ((unsigned long)(((long)(((my_n)->my_str)[0UL]))==((long)((unsigned char)42)))) { + (my_ret)=(my_ZERO_OR_MORE); + } else if ((unsigned long)(((long)(((my_n)->my_str)[0UL]))==((long)((unsigned char)43)))) { + if ((unsigned long)(((long)(my_ret))==((long)(my_ZERO_OR_ONE)))) { + (my_ret)=(my_ZERO_OR_MORE); + } else if ((unsigned long)(((long)(my_ret))==((long)(my_EXACTLY_ONE)))) { + (my_ret)=(my_ONE_OR_MORE); + } else if ((unsigned long)(((long)(my_ret))==((long)(my_ZERO_OR_MORE)))) { + (my_ret)=(my_ZERO_OR_MORE); + } + } else { + (my_die)(((unsigned char *)"invalid countop")); + } + } + (my_n)=((my_n)->my_next); + } +} +unsigned long( my_decode_look)(struct my_peg_node* my_n){ + unsigned long my_ret = 0; + (my_ret)=(my_LOOK_NORMAL); + if ((unsigned long)(((long)(((my_n)->my_child)->my_tag))==((long)(my_PEG_lookop)))) { + if ((unsigned long)(((long)((((my_n)->my_child)->my_str)[0UL]))==((long)((unsigned char)33)))) { + (my_ret)=(my_LOOK_NOT); + } else if ((unsigned long)(((long)((((my_n)->my_child)->my_str)[0UL]))==((long)((unsigned char)38)))) { + (my_ret)=(my_LOOK_AND); + } + } + return my_ret; } void( my_defenum)(struct my_compiler* my_c,struct my_node* my_n){ struct my_decl* my_d = 0; @@ -2515,6 +2929,9 @@ void( my_defenum)(struct my_compiler* my_c,struct my_node* my_n){ if ((unsigned long)(!(my_n))) { break; } + ((my_c)->my_filename)=(((my_n)->my_a)->my_filename); + ((my_c)->my_lineno)=(((my_n)->my_a)->my_lineno); + ((my_c)->my_colno)=(((my_n)->my_a)->my_colno); (my_name)=((((my_n)->my_a)->my_a)->my_s); (my_d)=((my_find)((my_c),(my_name),((unsigned char*)0UL),(1UL))); if ((my_d)->my_enum_defined) { @@ -2534,6 +2951,9 @@ struct my_decl*( my_defextern)(struct my_compiler* my_c,struct my_node* my_n){ struct my_decl* my_d = 0; unsigned char* my_name = 0; struct my_type* my_t = 0; + ((my_c)->my_filename)=((my_n)->my_filename); + ((my_c)->my_lineno)=((my_n)->my_lineno); + ((my_c)->my_colno)=((my_n)->my_colno); (my_name)=(((my_n)->my_a)->my_s); (my_t)=((my_prototype)((my_c),((my_n)->my_b))); (my_d)=((my_find)((my_c),(my_name),((unsigned char*)0UL),(1UL))); @@ -2549,6 +2969,9 @@ void( my_defstruct)(struct my_compiler* my_c,struct my_node* my_n){ unsigned char* my_name = 0; struct my_decl* my_d = 0; (my_name)=(((my_n)->my_a)->my_s); + ((my_c)->my_filename)=((my_n)->my_filename); + ((my_c)->my_lineno)=((my_n)->my_lineno); + ((my_c)->my_colno)=((my_n)->my_colno); if ((unsigned long)(((unsigned long)(!((my_strcmp)((my_name),((unsigned char *)"int")))))||((unsigned long)(((unsigned long)(!((my_strcmp)((my_name),((unsigned char *)"byte")))))||((unsigned long)(!((my_strcmp)((my_name),((unsigned char *)"func"))))))))) { (my_cdie)((my_c),((unsigned char *)"reserved word")); } @@ -3095,13 +3518,304 @@ void( my_emit_builtin)(struct my_compiler* my_c){ (my_as_op)(((my_c)->my_as),(my_OP_IRETQ)); } } -void( my_emit_call)(struct my_assembler* my_c,unsigned long my_n){ +void( my_emit_call)(struct my_assembler* my_c,unsigned long my_n){ + (my_as_opr)((my_c),(my_OP_POPR),(my_R_RAX)); + (my_as_modr)((my_c),(my_OP_ICALLM),(my_R_RAX)); + (my_emit_pop)((my_c),(my_n)); + (my_as_opr)((my_c),(my_OP_PUSHR),(my_R_RAX)); +} +void( my_emit_div)(struct my_assembler* my_c){ + (my_as_opr)((my_c),(my_OP_POPR),(my_R_RAX)); + (my_as_opr)((my_c),(my_OP_POPR),(my_R_RCX)); + (my_as_modrr)((my_c),(my_OP_XORRM),(my_R_RDX),(my_R_RDX)); + (my_as_modrr)((my_c),(my_OP_TESTRM),(my_R_RAX),(my_R_RAX)); + (my_as_modrr)((my_c),((unsigned long)(((unsigned long)(my_OP_SETCC))+((unsigned long)(my_CC_S)))),(0UL),(my_R_RDX)); + (my_as_modr)((my_c),(my_OP_NEGM),(my_R_RDX)); + (my_as_modr)((my_c),(my_OP_IDIVM),(my_R_RCX)); + (my_as_opr)((my_c),(my_OP_PUSHR),(my_R_RAX)); +} +void( my_emit_eq)(struct my_assembler* my_c){ + (my_as_opr)((my_c),(my_OP_POPR),(my_R_RDX)); + (my_as_opr)((my_c),(my_OP_POPR),(my_R_RCX)); + (my_as_modrr)((my_c),(my_OP_XORRM),(my_R_RAX),(my_R_RAX)); + (my_as_modrr)((my_c),(my_OP_CMPRM),(my_R_RDX),(my_R_RCX)); + (my_as_modrr)((my_c),((unsigned long)(((unsigned long)(my_OP_SETCC))+((unsigned long)(my_CC_E)))),(0UL),(my_R_RAX)); + (my_as_opr)((my_c),(my_OP_PUSHR),(my_R_RAX)); +} +void( my_emit_ge)(struct my_assembler* my_c){ + (my_as_opr)((my_c),(my_OP_POPR),(my_R_RDX)); + (my_as_opr)((my_c),(my_OP_POPR),(my_R_RCX)); + (my_as_modrr)((my_c),(my_OP_XORRM),(my_R_RAX),(my_R_RAX)); + (my_as_modrr)((my_c),(my_OP_CMPRM),(my_R_RDX),(my_R_RCX)); + (my_as_modrr)((my_c),((unsigned long)(((unsigned long)(my_OP_SETCC))+((unsigned long)(my_CC_GE)))),(0UL),(my_R_RAX)); + (my_as_opr)((my_c),(my_OP_PUSHR),(my_R_RAX)); +} +void( my_emit_gt)(struct my_assembler* my_c){ + (my_as_opr)((my_c),(my_OP_POPR),(my_R_RDX)); + (my_as_opr)((my_c),(my_OP_POPR),(my_R_RCX)); + (my_as_modrr)((my_c),(my_OP_XORRM),(my_R_RAX),(my_R_RAX)); + (my_as_modrr)((my_c),(my_OP_CMPRM),(my_R_RDX),(my_R_RCX)); + (my_as_modrr)((my_c),((unsigned long)(((unsigned long)(my_OP_SETCC))+((unsigned long)(my_CC_G)))),(0UL),(my_R_RAX)); + (my_as_opr)((my_c),(my_OP_PUSHR),(my_R_RAX)); +} +void( my_emit_isr)(struct my_compiler* my_c){ + struct my_decl* my_d = 0; + struct my_label* my_out = 0; + unsigned long my_i = 0; + (my_out)=((my_mklabel)(((my_c)->my_as))); + (my_i)=(0UL); + while (1) { + if ((unsigned long)(((long)(my_i))==((long)(256UL)))) { + break; + } + (my_reserve)(((my_c)->my_as),(16UL)); + if ((unsigned long)(((unsigned long)(((long)(my_i))==((long)(8UL))))||((unsigned long)(((unsigned long)(((long)(my_i))==((long)(10UL))))||((unsigned long)(((unsigned long)(((long)(my_i))==((long)(11UL))))||((unsigned long)(((unsigned long)(((long)(my_i))==((long)(12UL))))||((unsigned long)(((unsigned long)(((long)(my_i))==((long)(13UL))))||((unsigned long)(((unsigned long)(((long)(my_i))==((long)(14UL))))||((unsigned long)(((unsigned long)(((long)(my_i))==((long)(17UL))))||((unsigned long)(((unsigned long)(((long)(my_i))==((long)(21UL))))||((unsigned long)(((unsigned long)(((long)(my_i))==((long)(29UL))))||((unsigned long)(((long)(my_i))==((long)(30UL)))))))))))))))))))))) { + (my_as_emit)(((my_c)->my_as),(144UL)); + (my_as_emit)(((my_c)->my_as),(144UL)); + } else { + (my_as_emit)(((my_c)->my_as),(106UL)); + (my_as_emit)(((my_c)->my_as),(0UL)); + } + (my_as_emit)(((my_c)->my_as),(104UL)); + (my_as_emit)(((my_c)->my_as),(my_i)); + (my_as_emit)(((my_c)->my_as),(0UL)); + (my_as_emit)(((my_c)->my_as),(0UL)); + (my_as_emit)(((my_c)->my_as),(0UL)); + (my_as_emit)(((my_c)->my_as),(233UL)); + (my_as_emit)(((my_c)->my_as),(0UL)); + (my_as_emit)(((my_c)->my_as),(0UL)); + (my_as_emit)(((my_c)->my_as),(0UL)); + (my_as_emit)(((my_c)->my_as),(0UL)); + (my_addfixup)(((my_c)->my_as),(my_out)); + (my_as_emit)(((my_c)->my_as),(144UL)); + (my_as_emit)(((my_c)->my_as),(144UL)); + (my_as_emit)(((my_c)->my_as),(144UL)); + (my_as_emit)(((my_c)->my_as),(144UL)); + (my_i)=((unsigned long)(((unsigned long)(my_i))+((unsigned long)(1UL)))); + } + (my_fixup_label)(((my_c)->my_as),(my_out)); + (my_as_modri)(((my_c)->my_as),(my_OP_SUBI),(my_R_RSP),(176UL)); + (my_as_modrm)(((my_c)->my_as),(my_OP_STORE),(my_R_RBP),(my_R_RSP),(0UL),(0UL),(40UL)); + (my_as_modrr)(((my_c)->my_as),(my_OP_MOVE),(my_R_RBP),(my_R_RSP)); + (my_as_opr)(((my_c)->my_as),(my_OP_PUSHR),(my_R_RBP)); + (my_as_modrm)(((my_c)->my_as),(my_OP_STORE),(my_R_RAX),(my_R_RBP),(0UL),(0UL),(0UL)); + (my_as_modrm)(((my_c)->my_as),(my_OP_STORE),(my_R_RCX),(my_R_RBP),(0UL),(0UL),(8UL)); + (my_as_modrm)(((my_c)->my_as),(my_OP_STORE),(my_R_RDX),(my_R_RBP),(0UL),(0UL),(16UL)); + (my_as_modrm)(((my_c)->my_as),(my_OP_STORE),(my_R_RBX),(my_R_RBP),(0UL),(0UL),(24UL)); + (my_as_modrm)(((my_c)->my_as),(my_OP_STORE),(my_R_RSI),(my_R_RBP),(0UL),(0UL),(48UL)); + (my_as_modrm)(((my_c)->my_as),(my_OP_STORE),(my_R_RDI),(my_R_RBP),(0UL),(0UL),(56UL)); + (my_as_modrm)(((my_c)->my_as),(my_OP_STORE),(my_R_R8),(my_R_RBP),(0UL),(0UL),(64UL)); + (my_as_modrm)(((my_c)->my_as),(my_OP_STORE),(my_R_R9),(my_R_RBP),(0UL),(0UL),(72UL)); + (my_as_modrm)(((my_c)->my_as),(my_OP_STORE),(my_R_R10),(my_R_RBP),(0UL),(0UL),(80UL)); + (my_as_modrm)(((my_c)->my_as),(my_OP_STORE),(my_R_R11),(my_R_RBP),(0UL),(0UL),(88UL)); + (my_as_modrm)(((my_c)->my_as),(my_OP_STORE),(my_R_R12),(my_R_RBP),(0UL),(0UL),(96UL)); + (my_as_modrm)(((my_c)->my_as),(my_OP_STORE),(my_R_R13),(my_R_RBP),(0UL),(0UL),(104UL)); + (my_as_modrm)(((my_c)->my_as),(my_OP_STORE),(my_R_R14),(my_R_RBP),(0UL),(0UL),(112UL)); + (my_as_modrm)(((my_c)->my_as),(my_OP_STORE),(my_R_R15),(my_R_RBP),(0UL),(0UL),(120UL)); + (my_as_modrm)(((my_c)->my_as),(my_OP_LOAD),(my_R_RAX),(my_R_RBP),(0UL),(0UL),((unsigned long)(((unsigned long)(176UL))+((unsigned long)(0UL))))); + (my_as_modrm)(((my_c)->my_as),(my_OP_STORE),(my_R_RAX),(my_R_RBP),(0UL),(0UL),(160UL)); + (my_as_modrm)(((my_c)->my_as),(my_OP_LOAD),(my_R_RAX),(my_R_RBP),(0UL),(0UL),((unsigned long)(((unsigned long)(176UL))+((unsigned long)(8UL))))); + (my_as_modrm)(((my_c)->my_as),(my_OP_STORE),(my_R_RAX),(my_R_RBP),(0UL),(0UL),(168UL)); + (my_as_modrm)(((my_c)->my_as),(my_OP_LOAD),(my_R_RAX),(my_R_RBP),(0UL),(0UL),((unsigned long)(((unsigned long)(176UL))+((unsigned long)(16UL))))); + (my_as_modrm)(((my_c)->my_as),(my_OP_STORE),(my_R_RAX),(my_R_RBP),(0UL),(0UL),(128UL)); + (my_as_modrm)(((my_c)->my_as),(my_OP_LOAD),(my_R_RAX),(my_R_RBP),(0UL),(0UL),((unsigned long)(((unsigned long)(176UL))+((unsigned long)(24UL))))); + (my_as_modrm)(((my_c)->my_as),(my_OP_STORE),(my_R_RAX),(my_R_RBP),(0UL),(0UL),(144UL)); + (my_as_modrm)(((my_c)->my_as),(my_OP_LOAD),(my_R_RAX),(my_R_RBP),(0UL),(0UL),((unsigned long)(((unsigned long)(176UL))+((unsigned long)(32UL))))); + (my_as_modrm)(((my_c)->my_as),(my_OP_STORE),(my_R_RAX),(my_R_RBP),(0UL),(0UL),(136UL)); + (my_as_modrm)(((my_c)->my_as),(my_OP_LOAD),(my_R_RAX),(my_R_RBP),(0UL),(0UL),((unsigned long)(((unsigned long)(176UL))+((unsigned long)(40UL))))); + (my_as_modrm)(((my_c)->my_as),(my_OP_STORE),(my_R_RAX),(my_R_RBP),(0UL),(0UL),(32UL)); + (my_as_modrm)(((my_c)->my_as),(my_OP_LOAD),(my_R_RAX),(my_R_RBP),(0UL),(0UL),((unsigned long)(((unsigned long)(176UL))+((unsigned long)(48UL))))); + (my_as_modrm)(((my_c)->my_as),(my_OP_STORE),(my_R_RAX),(my_R_RBP),(0UL),(0UL),(152UL)); + (my_d)=((my_find)((my_c),((unsigned char *)"_isr"),((unsigned char*)0UL),(1UL))); + if ((unsigned long)(((my_d)->my_func_defined)&&(((my_d)->my_func_label)->my_fixed))) { + (my_as_jmp)(((my_c)->my_as),(my_OP_CALL),((my_d)->my_func_label)); + } + (my_as_modrm)(((my_c)->my_as),(my_OP_LOAD),(my_R_RAX),(my_R_RBP),(0UL),(0UL),(128UL)); + (my_as_modrm)(((my_c)->my_as),(my_OP_STORE),(my_R_RAX),(my_R_RBP),(0UL),(0UL),((unsigned long)(((unsigned long)(176UL))+((unsigned long)(16UL))))); + (my_as_modrm)(((my_c)->my_as),(my_OP_LOAD),(my_R_RAX),(my_R_RBP),(0UL),(0UL),(144UL)); + (my_as_modrm)(((my_c)->my_as),(my_OP_STORE),(my_R_RAX),(my_R_RBP),(0UL),(0UL),((unsigned long)(((unsigned long)(176UL))+((unsigned long)(24UL))))); + (my_as_modrm)(((my_c)->my_as),(my_OP_LOAD),(my_R_RAX),(my_R_RBP),(0UL),(0UL),(136UL)); + (my_as_modrm)(((my_c)->my_as),(my_OP_STORE),(my_R_RAX),(my_R_RBP),(0UL),(0UL),((unsigned long)(((unsigned long)(176UL))+((unsigned long)(32UL))))); + (my_as_modrm)(((my_c)->my_as),(my_OP_LOAD),(my_R_RAX),(my_R_RBP),(0UL),(0UL),(32UL)); + (my_as_modrm)(((my_c)->my_as),(my_OP_STORE),(my_R_RAX),(my_R_RBP),(0UL),(0UL),((unsigned long)(((unsigned long)(176UL))+((unsigned long)(40UL))))); + (my_as_modrm)(((my_c)->my_as),(my_OP_LOAD),(my_R_RAX),(my_R_RBP),(0UL),(0UL),(152UL)); + (my_as_modrm)(((my_c)->my_as),(my_OP_STORE),(my_R_RAX),(my_R_RBP),(0UL),(0UL),((unsigned long)(((unsigned long)(176UL))+((unsigned long)(48UL))))); + (my_as_modrm)(((my_c)->my_as),(my_OP_LOAD),(my_R_RAX),(my_R_RBP),(0UL),(0UL),(0UL)); + (my_as_modrm)(((my_c)->my_as),(my_OP_LOAD),(my_R_RCX),(my_R_RBP),(0UL),(0UL),(8UL)); + (my_as_modrm)(((my_c)->my_as),(my_OP_LOAD),(my_R_RDX),(my_R_RBP),(0UL),(0UL),(16UL)); + (my_as_modrm)(((my_c)->my_as),(my_OP_LOAD),(my_R_RBX),(my_R_RBP),(0UL),(0UL),(24UL)); + (my_as_modrm)(((my_c)->my_as),(my_OP_LOAD),(my_R_RSI),(my_R_RBP),(0UL),(0UL),(48UL)); + (my_as_modrm)(((my_c)->my_as),(my_OP_LOAD),(my_R_RDI),(my_R_RBP),(0UL),(0UL),(56UL)); + (my_as_modrm)(((my_c)->my_as),(my_OP_LOAD),(my_R_R8),(my_R_RBP),(0UL),(0UL),(64UL)); + (my_as_modrm)(((my_c)->my_as),(my_OP_LOAD),(my_R_R9),(my_R_RBP),(0UL),(0UL),(72UL)); + (my_as_modrm)(((my_c)->my_as),(my_OP_LOAD),(my_R_R10),(my_R_RBP),(0UL),(0UL),(80UL)); + (my_as_modrm)(((my_c)->my_as),(my_OP_LOAD),(my_R_R11),(my_R_RBP),(0UL),(0UL),(88UL)); + (my_as_modrm)(((my_c)->my_as),(my_OP_LOAD),(my_R_R12),(my_R_RBP),(0UL),(0UL),(96UL)); + (my_as_modrm)(((my_c)->my_as),(my_OP_LOAD),(my_R_R13),(my_R_RBP),(0UL),(0UL),(104UL)); + (my_as_modrm)(((my_c)->my_as),(my_OP_LOAD),(my_R_R14),(my_R_RBP),(0UL),(0UL),(112UL)); + (my_as_modrm)(((my_c)->my_as),(my_OP_LOAD),(my_R_R15),(my_R_RBP),(0UL),(0UL),(120UL)); + (my_as_modrm)(((my_c)->my_as),(my_OP_LOAD),(my_R_RBP),(my_R_RBP),(0UL),(0UL),(40UL)); + (my_as_modri)(((my_c)->my_as),(my_OP_ADDI),(my_R_RSP),((unsigned long)(((unsigned long)(176UL))+((unsigned long)((unsigned long)(((long)(3UL))*((long)(8UL)))))))); + (my_as_op)(((my_c)->my_as),(my_OP_IRETQ)); +} +void( my_emit_jmp)(struct my_assembler* my_c,struct my_label* my_l){ + (my_as_jmp)((my_c),(my_OP_JMP),(my_l)); +} +void( my_emit_jz)(struct my_assembler* my_c,struct my_label* my_l){ + (my_as_opr)((my_c),(my_OP_POPR),(my_R_RAX)); + (my_as_modrr)((my_c),(my_OP_TESTRM),(my_R_RAX),(my_R_RAX)); + (my_as_jmp)((my_c),((unsigned long)(((unsigned long)(my_OP_JCC))+((unsigned long)(my_CC_E)))),(my_l)); +} +void( my_emit_kstart)(struct my_assembler* my_c){ + struct my_label* my_hang = 0; + struct my_label* my_do_iret = 0; + struct my_label* my_do_ret = 0; + struct my_label* my_done = 0; + ((my_c)->my_bits32)=(1UL); + (my_hang)=((my_mklabel)((my_c))); + (my_do_iret)=((my_mklabel)((my_c))); + (my_do_ret)=((my_mklabel)((my_c))); + (my_done)=((my_mklabel)((my_c))); + (my_as_modri)((my_c),(my_OP_MOVI),(my_R_RDX),(732803074UL)); + (my_as_modrr)((my_c),(my_OP_CMPRM),(my_R_RAX),(my_R_RDX)); + (my_as_jmp)((my_c),((unsigned long)(((unsigned long)(my_OP_JCC))+((unsigned long)(my_CC_NE)))),(my_hang)); + (my_as_modri)((my_c),(my_OP_MOVI),(my_R_RSP),(3145728UL)); + (my_as_modri)((my_c),(my_OP_ANDI),(my_R_RSP),((unsigned long)(-(unsigned long)(4096UL)))); + (my_as_modri)((my_c),(my_OP_SUBI),(my_R_RSP),(4096UL)); + (my_as_modri)((my_c),(my_OP_MOVI),(my_R_RAX),(131UL)); + (my_as_modri)((my_c),(my_OP_MOVI),(my_R_RDX),(0UL)); + (my_as_modrm)((my_c),(my_OP_STORE),(my_R_RAX),(my_R_RSP),(0UL),(0UL),(0UL)); + (my_as_modrm)((my_c),(my_OP_STORE),(my_R_RDX),(my_R_RSP),(0UL),(0UL),(4UL)); + (my_as_modrm)((my_c),(my_OP_STORE),(my_R_RAX),(my_R_RSP),(0UL),(0UL),((unsigned long)(((unsigned long)((unsigned long)(((long)(510UL))*((long)(8UL)))))+((unsigned long)(0UL))))); + (my_as_modrm)((my_c),(my_OP_STORE),(my_R_RDX),(my_R_RSP),(0UL),(0UL),((unsigned long)(((unsigned long)((unsigned long)(((long)(510UL))*((long)(8UL)))))+((unsigned long)(4UL))))); + (my_as_modrr)((my_c),(my_OP_MOVE),(my_R_RAX),(my_R_RSP)); + (my_as_modri)((my_c),(my_OP_SUBI),(my_R_RSP),(4096UL)); + (my_as_modri)((my_c),(my_OP_ORI),(my_R_RAX),(3UL)); + (my_as_modri)((my_c),(my_OP_MOVI),(my_R_RDX),(0UL)); + (my_as_modrm)((my_c),(my_OP_STORE),(my_R_RAX),(my_R_RSP),(0UL),(0UL),(0UL)); + (my_as_modrm)((my_c),(my_OP_STORE),(my_R_RDX),(my_R_RSP),(0UL),(0UL),(4UL)); + (my_as_modrm)((my_c),(my_OP_STORE),(my_R_RAX),(my_R_RSP),(0UL),(0UL),((unsigned long)(((unsigned long)((unsigned long)(((long)(511UL))*((long)(8UL)))))+((unsigned long)(0UL))))); + (my_as_modrm)((my_c),(my_OP_STORE),(my_R_RDX),(my_R_RSP),(0UL),(0UL),((unsigned long)(((unsigned long)((unsigned long)(((long)(511UL))*((long)(8UL)))))+((unsigned long)(4UL))))); + (my_as_modrr)((my_c),(my_OP_WRCRR),(my_R_CR3),(my_R_RSP)); + (my_as_modri)((my_c),(my_OP_SUBI),(my_R_RSP),(64UL)); + (my_as_modrr)((my_c),(my_OP_MOVE),(my_R_RBP),(my_R_RSP)); + (my_as_modri)((my_c),(my_OP_MOVI),(my_R_RAX),(0UL)); + (my_as_modrm)((my_c),(my_OP_STORE),(my_R_RAX),(my_R_RBP),(0UL),(0UL),(8UL)); + (my_as_modri)((my_c),(my_OP_MOVI),(my_R_RAX),(0UL)); + (my_as_modrm)((my_c),(my_OP_STORE),(my_R_RAX),(my_R_RBP),(0UL),(0UL),(12UL)); + (my_as_modri)((my_c),(my_OP_MOVI),(my_R_RAX),(0UL)); + (my_as_modrm)((my_c),(my_OP_STORE),(my_R_RAX),(my_R_RBP),(0UL),(0UL),(16UL)); + (my_as_modri)((my_c),(my_OP_MOVI),(my_R_RAX),(2136064UL)); + (my_as_modrm)((my_c),(my_OP_STORE),(my_R_RAX),(my_R_RBP),(0UL),(0UL),(20UL)); + (my_as_modri)((my_c),(my_OP_MOVI),(my_R_RAX),(0UL)); + (my_as_modrm)((my_c),(my_OP_STORE),(my_R_RAX),(my_R_RBP),(0UL),(0UL),(24UL)); + (my_as_modri)((my_c),(my_OP_MOVI),(my_R_RAX),(37376UL)); + (my_as_modrm)((my_c),(my_OP_STORE),(my_R_RAX),(my_R_RBP),(0UL),(0UL),(28UL)); + (my_as_modri)((my_c),(my_OP_MOVI),(my_R_RAX),(23UL)); + (my_as_modrm)((my_c),(my_OP_STORE),(my_R_RAX),(my_R_RBP),(0UL),(0UL),(0UL)); + (my_as_modrm)((my_c),(my_OP_LEA),(my_R_RAX),(my_R_RBP),(0UL),(0UL),(8UL)); + (my_as_modrm)((my_c),(my_OP_STORE),(my_R_RAX),(my_R_RBP),(0UL),(0UL),(2UL)); + (my_as_modm)((my_c),(my_OP_LGDTM),(my_R_RBP),(0UL),(0UL),(0UL)); + (my_as_modri)((my_c),(my_OP_MOVI),(my_R_RAX),(0UL)); + (my_as_modr)((my_c),(my_OP_LLDTM),(my_R_RAX)); + (my_as_modm)((my_c),(my_OP_LIDTM),(my_R_RBP),(0UL),(0UL),(8UL)); + (my_as_modri)((my_c),(my_OP_MOVI),(my_R_RAX),(160UL)); + (my_as_modrr)((my_c),(my_OP_WRCRR),(my_R_CR4),(my_R_RAX)); + (my_as_modri)((my_c),(my_OP_MOVI),(my_R_RCX),((unsigned long)(((unsigned long)((unsigned long)(((unsigned long)((unsigned long)(((unsigned long)((unsigned long)(-(unsigned long)(1UL))))<<((unsigned long)(32UL)))))+((unsigned long)((unsigned long)(((unsigned long)(192UL))<<((unsigned long)(24UL))))))))+((unsigned long)(128UL))))); + (my_as_op)((my_c),(my_OP_RDMSR)); + (my_as_modri)((my_c),(my_OP_ORI),(my_R_RAX),(256UL)); + (my_as_op)((my_c),(my_OP_WRMSR)); + (my_as_modrr)((my_c),(my_OP_RDCRR),(my_R_CR0),(my_R_RAX)); + (my_as_modri)((my_c),(my_OP_ORI),(my_R_RAX),((unsigned long)(((unsigned long)((unsigned long)(((unsigned long)((unsigned long)(-(unsigned long)(32768UL))))<<((unsigned long)(16UL)))))|((unsigned long)(1UL))))); + (my_as_modrr)((my_c),(my_OP_WRCRR),(my_R_CR0),(my_R_RAX)); + (my_as_modri)((my_c),(my_OP_MOVI),(my_R_RAX),(0UL)); + (my_as_opr)((my_c),(my_OP_PUSHR),(my_R_RAX)); + (my_as_modri)((my_c),(my_OP_MOVI),(my_R_RAX),(8UL)); + (my_as_opr)((my_c),(my_OP_PUSHR),(my_R_RAX)); + (my_as_jmp)((my_c),(my_OP_CALL),(my_do_iret)); + ((my_c)->my_bits32)=(0UL); + (my_as_jmp)((my_c),(my_OP_CALL),(my_do_ret)); + (my_as_modri)((my_c),(my_OP_ORI),(my_R_RBP),((unsigned long)(((unsigned long)((unsigned long)(-(unsigned long)(32768UL))))<<((unsigned long)(16UL))))); + (my_as_modri)((my_c),(my_OP_MOVI),(my_R_RAX),(23UL)); + (my_as_modrm)((my_c),(my_OP_STORE),(my_R_RAX),(my_R_RBP),(0UL),(0UL),(0UL)); + (my_as_modrm)((my_c),(my_OP_LEA),(my_R_RAX),(my_R_RBP),(0UL),(0UL),(8UL)); + (my_as_modrm)((my_c),(my_OP_STORE),(my_R_RAX),(my_R_RBP),(0UL),(0UL),(2UL)); + (my_as_modm)((my_c),(my_OP_LGDTM),(my_R_RBP),(0UL),(0UL),(0UL)); + (my_as_modri)((my_c),(my_OP_MOVI),(my_R_RAX),(16UL)); + (my_as_modrr)((my_c),(my_OP_WRSR),(my_R_ES),(my_R_RAX)); + (my_as_modrr)((my_c),(my_OP_WRSR),(my_R_DS),(my_R_RAX)); + (my_as_modrr)((my_c),(my_OP_WRSR),(my_R_FS),(my_R_RAX)); + (my_as_modrr)((my_c),(my_OP_WRSR),(my_R_GS),(my_R_RAX)); + (my_as_modrr)((my_c),(my_OP_WRSR),(my_R_SS),(my_R_RAX)); + (my_as_modrr)((my_c),(my_OP_MOVE),(my_R_RSP),(my_R_RSP)); + (my_as_modri)((my_c),(my_OP_ORI),(my_R_RSP),((unsigned long)(((unsigned long)((unsigned long)(-(unsigned long)(32768UL))))<<((unsigned long)(16UL))))); + (my_as_modri)((my_c),(my_OP_MOVI),(my_R_RAX),(0UL)); + (my_as_modrm)((my_c),(my_OP_LEA),(my_R_RDI),(my_R_RBP),(0UL),(0UL),(64UL)); + (my_as_modrm)((my_c),(my_OP_STORE),(my_R_RAX),(my_R_RDI),(0UL),(0UL),(4096UL)); + (my_as_modrm)((my_c),(my_OP_STORE),(my_R_RAX),(my_R_RDI),(0UL),(0UL),(0UL)); + (my_as_modri)((my_c),(my_OP_ANDI),(my_R_RDI),(2147483647UL)); + (my_as_modrr)((my_c),(my_OP_WRCRR),(my_R_CR3),(my_R_RDI)); + (my_as_jmp)((my_c),(my_OP_JMP),(my_done)); + (my_fixup_label)((my_c),(my_hang)); + (my_as_op)((my_c),(my_OP_CLI)); + (my_as_op)((my_c),(my_OP_HLT)); + (my_as_jmp)((my_c),(my_OP_JMP),(my_hang)); + (my_fixup_label)((my_c),(my_do_iret)); + (my_as_op)((my_c),(my_OP_IRET)); + (my_fixup_label)((my_c),(my_do_ret)); + (my_as_opr)((my_c),(my_OP_POPR),(my_R_RAX)); + (my_as_modri)((my_c),(my_OP_ORI),(my_R_RAX),((unsigned long)(((unsigned long)((unsigned long)(-(unsigned long)(32768UL))))<<((unsigned long)(16UL))))); + (my_as_opr)((my_c),(my_OP_PUSHR),(my_R_RAX)); + (my_as_op)((my_c),(my_OP_RET)); + (my_fixup_label)((my_c),(my_done)); + (my_as_modrr)((my_c),(my_OP_XORRM),(my_R_RBP),(my_R_RBP)); + (my_as_opr)((my_c),(my_OP_PUSHR),(my_R_RBX)); + (my_as_opr)((my_c),(my_OP_PUSHR),(my_R_RBP)); +} +void( my_emit_lcall)(struct my_assembler* my_c,struct my_label* my_l,unsigned long my_n){ + (my_as_jmp)((my_c),(my_OP_CALL),(my_l)); + (my_emit_pop)((my_c),(my_n)); + (my_as_opr)((my_c),(my_OP_PUSHR),(my_R_RAX)); +} +void( my_emit_le)(struct my_assembler* my_c){ + (my_as_opr)((my_c),(my_OP_POPR),(my_R_RDX)); + (my_as_opr)((my_c),(my_OP_POPR),(my_R_RCX)); + (my_as_modrr)((my_c),(my_OP_XORRM),(my_R_RAX),(my_R_RAX)); + (my_as_modrr)((my_c),(my_OP_CMPRM),(my_R_RDX),(my_R_RCX)); + (my_as_modrr)((my_c),((unsigned long)(((unsigned long)(my_OP_SETCC))+((unsigned long)(my_CC_LE)))),(0UL),(my_R_RAX)); + (my_as_opr)((my_c),(my_OP_PUSHR),(my_R_RAX)); +} +void( my_emit_lea)(struct my_assembler* my_c,unsigned long my_offset){ + (my_as_modrm)((my_c),(my_OP_LEA),(my_R_RAX),(my_R_RBP),(0UL),(0UL),(my_offset)); + (my_as_opr)((my_c),(my_OP_PUSHR),(my_R_RAX)); +} +void( my_emit_load)(struct my_assembler* my_c,struct my_type* my_t){ + (my_as_opr)((my_c),(my_OP_POPR),(my_R_RDI)); + if ((unsigned long)(((long)((my_t)->my_kind))==((long)(my_TY_BYTE)))) { + (my_as_modrr)((my_c),(my_OP_XORRM),(my_R_RAX),(my_R_RAX)); + (my_as_modrm)((my_c),(my_OP_LOADB),(my_R_RAX),(my_R_RDI),(0UL),(0UL),(0UL)); + } else if ((my_type_isprim)((my_t))) { + (my_as_modrm)((my_c),(my_OP_LOAD),(my_R_RAX),(my_R_RDI),(0UL),(0UL),(0UL)); + } else { + (my_die)(((unsigned char *)"invalid load")); + } + (my_as_opr)((my_c),(my_OP_PUSHR),(my_R_RAX)); +} +void( my_emit_lsh)(struct my_assembler* my_c){ (my_as_opr)((my_c),(my_OP_POPR),(my_R_RAX)); - (my_as_modr)((my_c),(my_OP_ICALLM),(my_R_RAX)); - (my_emit_pop)((my_c),(my_n)); + (my_as_opr)((my_c),(my_OP_POPR),(my_R_RCX)); + (my_as_modr)((my_c),(my_OP_SHLM),(my_R_RAX)); (my_as_opr)((my_c),(my_OP_PUSHR),(my_R_RAX)); } -void( my_emit_div)(struct my_assembler* my_c){ +void( my_emit_lt)(struct my_assembler* my_c){ + (my_as_opr)((my_c),(my_OP_POPR),(my_R_RDX)); + (my_as_opr)((my_c),(my_OP_POPR),(my_R_RCX)); + (my_as_modrr)((my_c),(my_OP_XORRM),(my_R_RAX),(my_R_RAX)); + (my_as_modrr)((my_c),(my_OP_CMPRM),(my_R_RDX),(my_R_RCX)); + (my_as_modrr)((my_c),((unsigned long)(((unsigned long)(my_OP_SETCC))+((unsigned long)(my_CC_L)))),(0UL),(my_R_RAX)); + (my_as_opr)((my_c),(my_OP_PUSHR),(my_R_RAX)); +} +void( my_emit_mod)(struct my_assembler* my_c){ (my_as_opr)((my_c),(my_OP_POPR),(my_R_RAX)); (my_as_opr)((my_c),(my_OP_POPR),(my_R_RCX)); (my_as_modrr)((my_c),(my_OP_XORRM),(my_R_RDX),(my_R_RDX)); @@ -3109,1640 +3823,1869 @@ void( my_emit_div)(struct my_assembler* my_c){ (my_as_modrr)((my_c),((unsigned long)(((unsigned long)(my_OP_SETCC))+((unsigned long)(my_CC_S)))),(0UL),(my_R_RDX)); (my_as_modr)((my_c),(my_OP_NEGM),(my_R_RDX)); (my_as_modr)((my_c),(my_OP_IDIVM),(my_R_RCX)); - (my_as_opr)((my_c),(my_OP_PUSHR),(my_R_RAX)); + (my_as_opr)((my_c),(my_OP_PUSHR),(my_R_RDX)); } -void( my_emit_eq)(struct my_assembler* my_c){ - (my_as_opr)((my_c),(my_OP_POPR),(my_R_RDX)); +void( my_emit_mul)(struct my_assembler* my_c){ + (my_as_opr)((my_c),(my_OP_POPR),(my_R_RAX)); (my_as_opr)((my_c),(my_OP_POPR),(my_R_RCX)); - (my_as_modrr)((my_c),(my_OP_XORRM),(my_R_RAX),(my_R_RAX)); - (my_as_modrr)((my_c),(my_OP_CMPRM),(my_R_RDX),(my_R_RCX)); - (my_as_modrr)((my_c),((unsigned long)(((unsigned long)(my_OP_SETCC))+((unsigned long)(my_CC_E)))),(0UL),(my_R_RAX)); + (my_as_modr)((my_c),(my_OP_IMULM),(my_R_RCX)); (my_as_opr)((my_c),(my_OP_PUSHR),(my_R_RAX)); } -void( my_emit_ge)(struct my_assembler* my_c){ +void( my_emit_ne)(struct my_assembler* my_c){ (my_as_opr)((my_c),(my_OP_POPR),(my_R_RDX)); (my_as_opr)((my_c),(my_OP_POPR),(my_R_RCX)); (my_as_modrr)((my_c),(my_OP_XORRM),(my_R_RAX),(my_R_RAX)); (my_as_modrr)((my_c),(my_OP_CMPRM),(my_R_RDX),(my_R_RCX)); - (my_as_modrr)((my_c),((unsigned long)(((unsigned long)(my_OP_SETCC))+((unsigned long)(my_CC_GE)))),(0UL),(my_R_RAX)); + (my_as_modrr)((my_c),((unsigned long)(((unsigned long)(my_OP_SETCC))+((unsigned long)(my_CC_NE)))),(0UL),(my_R_RAX)); (my_as_opr)((my_c),(my_OP_PUSHR),(my_R_RAX)); } -void( my_emit_gt)(struct my_assembler* my_c){ +void( my_emit_neg)(struct my_assembler* my_c){ + (my_as_opr)((my_c),(my_OP_POPR),(my_R_RAX)); + (my_as_modr)((my_c),(my_OP_NEGM),(my_R_RAX)); + (my_as_opr)((my_c),(my_OP_PUSHR),(my_R_RAX)); +} +void( my_emit_not)(struct my_assembler* my_c){ + (my_as_opr)((my_c),(my_OP_POPR),(my_R_RAX)); + (my_as_modr)((my_c),(my_OP_NOTM),(my_R_RAX)); + (my_as_opr)((my_c),(my_OP_PUSHR),(my_R_RAX)); +} +void( my_emit_num)(struct my_assembler* my_c,unsigned long my_x){ + (my_as_opri64)((my_c),(my_OP_MOVABS),(my_R_RDX),(my_x)); + (my_as_opr)((my_c),(my_OP_PUSHR),(my_R_RDX)); +} +void( my_emit_or)(struct my_assembler* my_c){ + (my_as_opr)((my_c),(my_OP_POPR),(my_R_RAX)); (my_as_opr)((my_c),(my_OP_POPR),(my_R_RDX)); - (my_as_opr)((my_c),(my_OP_POPR),(my_R_RCX)); - (my_as_modrr)((my_c),(my_OP_XORRM),(my_R_RAX),(my_R_RAX)); - (my_as_modrr)((my_c),(my_OP_CMPRM),(my_R_RDX),(my_R_RCX)); - (my_as_modrr)((my_c),((unsigned long)(((unsigned long)(my_OP_SETCC))+((unsigned long)(my_CC_G)))),(0UL),(my_R_RAX)); + (my_as_modrr)((my_c),(my_OP_ORRM),(my_R_RAX),(my_R_RDX)); (my_as_opr)((my_c),(my_OP_PUSHR),(my_R_RAX)); } -void( my_emit_isr)(struct my_compiler* my_c){ - struct my_decl* my_d = 0; - struct my_label* my_out = 0; +void( my_emit_pop)(struct my_assembler* my_c,unsigned long my_n){ + (my_as_modri)((my_c),(my_OP_ADDI),(my_R_RSP),((unsigned long)(((unsigned long)(my_n))<<((unsigned long)(3UL))))); +} +void( my_emit_preamble)(struct my_assembler* my_c,unsigned long my_n,unsigned long my_pragma){ unsigned long my_i = 0; - (my_out)=((my_mklabel)(((my_c)->my_as))); + if ((unsigned long)(((long)(my_pragma))==((long)(1UL)))) { + (my_as_modrr)((my_c),(my_OP_XORRM),(my_R_RBP),(my_R_RBP)); + (my_as_modrm)((my_c),(my_OP_LOAD),(my_R_RDI),(my_R_RSP),(0UL),(0UL),(0UL)); + (my_as_modrm)((my_c),(my_OP_LEA),(my_R_RSI),(my_R_RSP),(0UL),(0UL),(8UL)); + (my_as_modrm)((my_c),(my_OP_LEA),(my_R_RDX),(my_R_RSI),(my_R_RDI),(8UL),(8UL)); + (my_as_opr)((my_c),(my_OP_PUSHR),(my_R_RDX)); + (my_as_opr)((my_c),(my_OP_PUSHR),(my_R_RSI)); + (my_as_opr)((my_c),(my_OP_PUSHR),(my_R_RDI)); + (my_as_opr)((my_c),(my_OP_PUSHR),(my_R_RBP)); + } else if ((unsigned long)(((long)(my_pragma))>((long)(1UL)))) { + (my_emit_kstart)((my_c)); + } + (my_as_opr)((my_c),(my_OP_PUSHR),(my_R_RBP)); + (my_as_modrr)((my_c),(my_OP_MOVE),(my_R_RBP),(my_R_RSP)); (my_i)=(0UL); while (1) { - if ((unsigned long)(((long)(my_i))==((long)(256UL)))) { + if ((unsigned long)(((long)(my_i))>=((long)(my_n)))) { break; } - (my_reserve)(((my_c)->my_as),(16UL)); - if ((unsigned long)(((unsigned long)(((long)(my_i))==((long)(8UL))))||((unsigned long)(((unsigned long)(((long)(my_i))==((long)(10UL))))||((unsigned long)(((unsigned long)(((long)(my_i))==((long)(11UL))))||((unsigned long)(((unsigned long)(((long)(my_i))==((long)(12UL))))||((unsigned long)(((unsigned long)(((long)(my_i))==((long)(13UL))))||((unsigned long)(((unsigned long)(((long)(my_i))==((long)(14UL))))||((unsigned long)(((unsigned long)(((long)(my_i))==((long)(17UL))))||((unsigned long)(((unsigned long)(((long)(my_i))==((long)(21UL))))||((unsigned long)(((unsigned long)(((long)(my_i))==((long)(29UL))))||((unsigned long)(((long)(my_i))==((long)(30UL)))))))))))))))))))))) { - (my_as_emit)(((my_c)->my_as),(144UL)); - (my_as_emit)(((my_c)->my_as),(144UL)); - } else { - (my_as_emit)(((my_c)->my_as),(106UL)); - (my_as_emit)(((my_c)->my_as),(0UL)); + (my_emit_num)((my_c),(0UL)); + (my_i)=((unsigned long)(((unsigned long)(my_i))+((unsigned long)(8UL)))); } - (my_as_emit)(((my_c)->my_as),(104UL)); - (my_as_emit)(((my_c)->my_as),(my_i)); - (my_as_emit)(((my_c)->my_as),(0UL)); - (my_as_emit)(((my_c)->my_as),(0UL)); - (my_as_emit)(((my_c)->my_as),(0UL)); - (my_as_emit)(((my_c)->my_as),(233UL)); - (my_as_emit)(((my_c)->my_as),(0UL)); - (my_as_emit)(((my_c)->my_as),(0UL)); - (my_as_emit)(((my_c)->my_as),(0UL)); - (my_as_emit)(((my_c)->my_as),(0UL)); - (my_addfixup)(((my_c)->my_as),(my_out)); - (my_as_emit)(((my_c)->my_as),(144UL)); - (my_as_emit)(((my_c)->my_as),(144UL)); - (my_as_emit)(((my_c)->my_as),(144UL)); - (my_as_emit)(((my_c)->my_as),(144UL)); - (my_i)=((unsigned long)(((unsigned long)(my_i))+((unsigned long)(1UL)))); +} +void( my_emit_ptr)(struct my_assembler* my_c,struct my_label* my_l){ + (my_reserve)((my_c),(16UL)); + (my_as_modrm)((my_c),(my_OP_LEA),(my_R_RAX),(my_R_RIP),(0UL),(0UL),(128UL)); + (my_addfixup)((my_c),(my_l)); + (my_as_opr)((my_c),(my_OP_PUSHR),(my_R_RAX)); +} +void( my_emit_restorer)(struct my_assembler* my_c){ + (my_as_modri)((my_c),(my_OP_MOVI),(my_R_RAX),(15UL)); + (my_as_op)((my_c),(my_OP_SYSCALL)); +} +void( my_emit_ret)(struct my_assembler* my_c){ + (my_as_opr)((my_c),(my_OP_POPR),(my_R_RAX)); + (my_as_modrr)((my_c),(my_OP_MOVE),(my_R_RSP),(my_R_RBP)); + (my_as_opr)((my_c),(my_OP_POPR),(my_R_RBP)); + (my_as_op)((my_c),(my_OP_RET)); +} +void( my_emit_rsh)(struct my_assembler* my_c){ + (my_as_opr)((my_c),(my_OP_POPR),(my_R_RAX)); + (my_as_opr)((my_c),(my_OP_POPR),(my_R_RCX)); + (my_as_modr)((my_c),(my_OP_SHRM),(my_R_RAX)); + (my_as_opr)((my_c),(my_OP_PUSHR),(my_R_RAX)); +} +void( my_emit_ssr)(struct my_compiler* my_c){ + struct my_decl* my_d = 0; + struct my_decl* my_v = 0; + (my_v)=((my_find)((my_c),((unsigned char *)"global"),((unsigned char *)"_save"),(0UL))); + if ((unsigned long)(((unsigned long)(!(my_v)))||((unsigned long)(!((my_v)->my_member_defined))))) { + (my_cdie)((my_c),((unsigned char *)"no _save")); } - (my_fixup_label)(((my_c)->my_as),(my_out)); - (my_as_modri)(((my_c)->my_as),(my_OP_SUBI),(my_R_RSP),(176UL)); + (my_as_emit)(((my_c)->my_as),(my_OP_GS)); + (my_as_modra)(((my_c)->my_as),(my_OP_STORE),(my_R_RSP),((my_v)->my_member_offset)); + (my_v)=((my_find)((my_c),((unsigned char *)"global"),((unsigned char *)"curtask"),(0UL))); + if ((unsigned long)(((unsigned long)(!(my_v)))||((unsigned long)(!((my_v)->my_member_defined))))) { + (my_cdie)((my_c),((unsigned char *)"no global.curtask")); + } + (my_as_emit)(((my_c)->my_as),(my_OP_GS)); + (my_as_modra)(((my_c)->my_as),(my_OP_LOAD),(my_R_RSP),((my_v)->my_member_offset)); + (my_v)=((my_find)((my_c),((unsigned char *)"task"),((unsigned char *)"stack"),(0UL))); + if ((unsigned long)(((unsigned long)(!(my_v)))||((unsigned long)(!((my_v)->my_member_defined))))) { + (my_cdie)((my_c),((unsigned char *)"no task.stack")); + } + (my_as_modrm)(((my_c)->my_as),(my_OP_LOAD),(my_R_RSP),(my_R_RSP),(0UL),(0UL),((my_v)->my_member_offset)); + (my_as_modri)(((my_c)->my_as),(my_OP_ADDI),(my_R_RSP),((unsigned long)(((unsigned long)(4096UL))-((unsigned long)(176UL))))); + (my_as_modrm)(((my_c)->my_as),(my_OP_STORE),(my_R_RAX),(my_R_RSP),(0UL),(0UL),(0UL)); + (my_as_modrm)(((my_c)->my_as),(my_OP_STORE),(my_R_RDX),(my_R_RSP),(0UL),(0UL),(16UL)); + (my_as_modrm)(((my_c)->my_as),(my_OP_STORE),(my_R_RBX),(my_R_RSP),(0UL),(0UL),(24UL)); (my_as_modrm)(((my_c)->my_as),(my_OP_STORE),(my_R_RBP),(my_R_RSP),(0UL),(0UL),(40UL)); - (my_as_modrr)(((my_c)->my_as),(my_OP_MOVE),(my_R_RBP),(my_R_RSP)); + (my_as_modrm)(((my_c)->my_as),(my_OP_STORE),(my_R_RSI),(my_R_RSP),(0UL),(0UL),(48UL)); + (my_as_modrm)(((my_c)->my_as),(my_OP_STORE),(my_R_RDI),(my_R_RSP),(0UL),(0UL),(56UL)); + (my_as_modrm)(((my_c)->my_as),(my_OP_STORE),(my_R_R8),(my_R_RSP),(0UL),(0UL),(64UL)); + (my_as_modrm)(((my_c)->my_as),(my_OP_STORE),(my_R_R9),(my_R_RSP),(0UL),(0UL),(72UL)); + (my_as_modrm)(((my_c)->my_as),(my_OP_STORE),(my_R_R10),(my_R_RSP),(0UL),(0UL),(80UL)); + (my_as_modrm)(((my_c)->my_as),(my_OP_STORE),(my_R_R12),(my_R_RSP),(0UL),(0UL),(96UL)); + (my_as_modrm)(((my_c)->my_as),(my_OP_STORE),(my_R_R13),(my_R_RSP),(0UL),(0UL),(104UL)); + (my_as_modrm)(((my_c)->my_as),(my_OP_STORE),(my_R_R14),(my_R_RSP),(0UL),(0UL),(112UL)); + (my_as_modrm)(((my_c)->my_as),(my_OP_STORE),(my_R_R15),(my_R_RSP),(0UL),(0UL),(120UL)); + (my_as_modrm)(((my_c)->my_as),(my_OP_STORE),(my_R_RCX),(my_R_RSP),(0UL),(0UL),(128UL)); + (my_as_modrm)(((my_c)->my_as),(my_OP_STORE),(my_R_R11),(my_R_RSP),(0UL),(0UL),(136UL)); + (my_as_modrr)(((my_c)->my_as),(my_OP_XORRM),(my_R_RAX),(my_R_RAX)); + (my_as_modrm)(((my_c)->my_as),(my_OP_STORE),(my_R_RAX),(my_R_RSP),(0UL),(0UL),(8UL)); + (my_as_modrm)(((my_c)->my_as),(my_OP_STORE),(my_R_RAX),(my_R_RSP),(0UL),(0UL),(88UL)); + (my_as_modrm)(((my_c)->my_as),(my_OP_STORE),(my_R_RAX),(my_R_RSP),(0UL),(0UL),(160UL)); + (my_as_modrm)(((my_c)->my_as),(my_OP_STORE),(my_R_RAX),(my_R_RSP),(0UL),(0UL),(168UL)); + (my_as_modri)(((my_c)->my_as),(my_OP_MOVI),(my_R_RAX),(43UL)); + (my_as_modrm)(((my_c)->my_as),(my_OP_STORE),(my_R_RAX),(my_R_RSP),(0UL),(0UL),(144UL)); + (my_as_modri)(((my_c)->my_as),(my_OP_MOVI),(my_R_RAX),(35UL)); + (my_as_modrm)(((my_c)->my_as),(my_OP_STORE),(my_R_RAX),(my_R_RSP),(0UL),(0UL),(152UL)); + (my_v)=((my_find)((my_c),((unsigned char *)"global"),((unsigned char *)"_save"),(0UL))); + if ((unsigned long)(((unsigned long)(!(my_v)))||((unsigned long)(!((my_v)->my_member_defined))))) { + (my_cdie)((my_c),((unsigned char *)"no _save")); + } + (my_as_emit)(((my_c)->my_as),(my_OP_GS)); + (my_as_modra)(((my_c)->my_as),(my_OP_LOAD),(my_R_RAX),((my_v)->my_member_offset)); + (my_as_modrm)(((my_c)->my_as),(my_OP_STORE),(my_R_RAX),(my_R_RSP),(0UL),(0UL),(32UL)); + (my_as_modrr)(((my_c)->my_as),(my_OP_MOVE),(my_R_RAX),(my_R_RSP)); + (my_as_modrr)(((my_c)->my_as),(my_OP_XORRM),(my_R_RBP),(my_R_RBP)); (my_as_opr)(((my_c)->my_as),(my_OP_PUSHR),(my_R_RBP)); - (my_as_modrm)(((my_c)->my_as),(my_OP_STORE),(my_R_RAX),(my_R_RBP),(0UL),(0UL),(0UL)); - (my_as_modrm)(((my_c)->my_as),(my_OP_STORE),(my_R_RCX),(my_R_RBP),(0UL),(0UL),(8UL)); - (my_as_modrm)(((my_c)->my_as),(my_OP_STORE),(my_R_RDX),(my_R_RBP),(0UL),(0UL),(16UL)); - (my_as_modrm)(((my_c)->my_as),(my_OP_STORE),(my_R_RBX),(my_R_RBP),(0UL),(0UL),(24UL)); - (my_as_modrm)(((my_c)->my_as),(my_OP_STORE),(my_R_RSI),(my_R_RBP),(0UL),(0UL),(48UL)); - (my_as_modrm)(((my_c)->my_as),(my_OP_STORE),(my_R_RDI),(my_R_RBP),(0UL),(0UL),(56UL)); - (my_as_modrm)(((my_c)->my_as),(my_OP_STORE),(my_R_R8),(my_R_RBP),(0UL),(0UL),(64UL)); - (my_as_modrm)(((my_c)->my_as),(my_OP_STORE),(my_R_R9),(my_R_RBP),(0UL),(0UL),(72UL)); - (my_as_modrm)(((my_c)->my_as),(my_OP_STORE),(my_R_R10),(my_R_RBP),(0UL),(0UL),(80UL)); - (my_as_modrm)(((my_c)->my_as),(my_OP_STORE),(my_R_R11),(my_R_RBP),(0UL),(0UL),(88UL)); - (my_as_modrm)(((my_c)->my_as),(my_OP_STORE),(my_R_R12),(my_R_RBP),(0UL),(0UL),(96UL)); - (my_as_modrm)(((my_c)->my_as),(my_OP_STORE),(my_R_R13),(my_R_RBP),(0UL),(0UL),(104UL)); - (my_as_modrm)(((my_c)->my_as),(my_OP_STORE),(my_R_R14),(my_R_RBP),(0UL),(0UL),(112UL)); - (my_as_modrm)(((my_c)->my_as),(my_OP_STORE),(my_R_R15),(my_R_RBP),(0UL),(0UL),(120UL)); - (my_as_modrm)(((my_c)->my_as),(my_OP_LOAD),(my_R_RAX),(my_R_RBP),(0UL),(0UL),((unsigned long)(((unsigned long)(176UL))+((unsigned long)(0UL))))); - (my_as_modrm)(((my_c)->my_as),(my_OP_STORE),(my_R_RAX),(my_R_RBP),(0UL),(0UL),(160UL)); - (my_as_modrm)(((my_c)->my_as),(my_OP_LOAD),(my_R_RAX),(my_R_RBP),(0UL),(0UL),((unsigned long)(((unsigned long)(176UL))+((unsigned long)(8UL))))); - (my_as_modrm)(((my_c)->my_as),(my_OP_STORE),(my_R_RAX),(my_R_RBP),(0UL),(0UL),(168UL)); - (my_as_modrm)(((my_c)->my_as),(my_OP_LOAD),(my_R_RAX),(my_R_RBP),(0UL),(0UL),((unsigned long)(((unsigned long)(176UL))+((unsigned long)(16UL))))); - (my_as_modrm)(((my_c)->my_as),(my_OP_STORE),(my_R_RAX),(my_R_RBP),(0UL),(0UL),(128UL)); - (my_as_modrm)(((my_c)->my_as),(my_OP_LOAD),(my_R_RAX),(my_R_RBP),(0UL),(0UL),((unsigned long)(((unsigned long)(176UL))+((unsigned long)(24UL))))); - (my_as_modrm)(((my_c)->my_as),(my_OP_STORE),(my_R_RAX),(my_R_RBP),(0UL),(0UL),(144UL)); - (my_as_modrm)(((my_c)->my_as),(my_OP_LOAD),(my_R_RAX),(my_R_RBP),(0UL),(0UL),((unsigned long)(((unsigned long)(176UL))+((unsigned long)(32UL))))); - (my_as_modrm)(((my_c)->my_as),(my_OP_STORE),(my_R_RAX),(my_R_RBP),(0UL),(0UL),(136UL)); - (my_as_modrm)(((my_c)->my_as),(my_OP_LOAD),(my_R_RAX),(my_R_RBP),(0UL),(0UL),((unsigned long)(((unsigned long)(176UL))+((unsigned long)(40UL))))); - (my_as_modrm)(((my_c)->my_as),(my_OP_STORE),(my_R_RAX),(my_R_RBP),(0UL),(0UL),(32UL)); - (my_as_modrm)(((my_c)->my_as),(my_OP_LOAD),(my_R_RAX),(my_R_RBP),(0UL),(0UL),((unsigned long)(((unsigned long)(176UL))+((unsigned long)(48UL))))); - (my_as_modrm)(((my_c)->my_as),(my_OP_STORE),(my_R_RAX),(my_R_RBP),(0UL),(0UL),(152UL)); - (my_d)=((my_find)((my_c),((unsigned char *)"_isr"),((unsigned char*)0UL),(1UL))); + (my_as_opr)(((my_c)->my_as),(my_OP_PUSHR),(my_R_RBP)); + (my_as_modrr)(((my_c)->my_as),(my_OP_MOVE),(my_R_RBP),(my_R_RSP)); + (my_as_opr)(((my_c)->my_as),(my_OP_PUSHR),(my_R_RAX)); + (my_d)=((my_find)((my_c),((unsigned char *)"_ssr"),((unsigned char*)0UL),(1UL))); if ((unsigned long)(((my_d)->my_func_defined)&&(((my_d)->my_func_label)->my_fixed))) { (my_as_jmp)(((my_c)->my_as),(my_OP_CALL),((my_d)->my_func_label)); } - (my_as_modrm)(((my_c)->my_as),(my_OP_LOAD),(my_R_RAX),(my_R_RBP),(0UL),(0UL),(128UL)); - (my_as_modrm)(((my_c)->my_as),(my_OP_STORE),(my_R_RAX),(my_R_RBP),(0UL),(0UL),((unsigned long)(((unsigned long)(176UL))+((unsigned long)(16UL))))); - (my_as_modrm)(((my_c)->my_as),(my_OP_LOAD),(my_R_RAX),(my_R_RBP),(0UL),(0UL),(144UL)); - (my_as_modrm)(((my_c)->my_as),(my_OP_STORE),(my_R_RAX),(my_R_RBP),(0UL),(0UL),((unsigned long)(((unsigned long)(176UL))+((unsigned long)(24UL))))); - (my_as_modrm)(((my_c)->my_as),(my_OP_LOAD),(my_R_RAX),(my_R_RBP),(0UL),(0UL),(136UL)); - (my_as_modrm)(((my_c)->my_as),(my_OP_STORE),(my_R_RAX),(my_R_RBP),(0UL),(0UL),((unsigned long)(((unsigned long)(176UL))+((unsigned long)(32UL))))); - (my_as_modrm)(((my_c)->my_as),(my_OP_LOAD),(my_R_RAX),(my_R_RBP),(0UL),(0UL),(32UL)); - (my_as_modrm)(((my_c)->my_as),(my_OP_STORE),(my_R_RAX),(my_R_RBP),(0UL),(0UL),((unsigned long)(((unsigned long)(176UL))+((unsigned long)(40UL))))); - (my_as_modrm)(((my_c)->my_as),(my_OP_LOAD),(my_R_RAX),(my_R_RBP),(0UL),(0UL),(152UL)); - (my_as_modrm)(((my_c)->my_as),(my_OP_STORE),(my_R_RAX),(my_R_RBP),(0UL),(0UL),((unsigned long)(((unsigned long)(176UL))+((unsigned long)(48UL))))); - (my_as_modrm)(((my_c)->my_as),(my_OP_LOAD),(my_R_RAX),(my_R_RBP),(0UL),(0UL),(0UL)); - (my_as_modrm)(((my_c)->my_as),(my_OP_LOAD),(my_R_RCX),(my_R_RBP),(0UL),(0UL),(8UL)); - (my_as_modrm)(((my_c)->my_as),(my_OP_LOAD),(my_R_RDX),(my_R_RBP),(0UL),(0UL),(16UL)); - (my_as_modrm)(((my_c)->my_as),(my_OP_LOAD),(my_R_RBX),(my_R_RBP),(0UL),(0UL),(24UL)); - (my_as_modrm)(((my_c)->my_as),(my_OP_LOAD),(my_R_RSI),(my_R_RBP),(0UL),(0UL),(48UL)); - (my_as_modrm)(((my_c)->my_as),(my_OP_LOAD),(my_R_RDI),(my_R_RBP),(0UL),(0UL),(56UL)); - (my_as_modrm)(((my_c)->my_as),(my_OP_LOAD),(my_R_R8),(my_R_RBP),(0UL),(0UL),(64UL)); - (my_as_modrm)(((my_c)->my_as),(my_OP_LOAD),(my_R_R9),(my_R_RBP),(0UL),(0UL),(72UL)); - (my_as_modrm)(((my_c)->my_as),(my_OP_LOAD),(my_R_R10),(my_R_RBP),(0UL),(0UL),(80UL)); - (my_as_modrm)(((my_c)->my_as),(my_OP_LOAD),(my_R_R11),(my_R_RBP),(0UL),(0UL),(88UL)); - (my_as_modrm)(((my_c)->my_as),(my_OP_LOAD),(my_R_R12),(my_R_RBP),(0UL),(0UL),(96UL)); - (my_as_modrm)(((my_c)->my_as),(my_OP_LOAD),(my_R_R13),(my_R_RBP),(0UL),(0UL),(104UL)); - (my_as_modrm)(((my_c)->my_as),(my_OP_LOAD),(my_R_R14),(my_R_RBP),(0UL),(0UL),(112UL)); - (my_as_modrm)(((my_c)->my_as),(my_OP_LOAD),(my_R_R15),(my_R_RBP),(0UL),(0UL),(120UL)); - (my_as_modrm)(((my_c)->my_as),(my_OP_LOAD),(my_R_RBP),(my_R_RBP),(0UL),(0UL),(40UL)); - (my_as_modri)(((my_c)->my_as),(my_OP_ADDI),(my_R_RSP),((unsigned long)(((unsigned long)(176UL))+((unsigned long)((unsigned long)(((long)(3UL))*((long)(8UL)))))))); - (my_as_op)(((my_c)->my_as),(my_OP_IRETQ)); + (my_as_op)(((my_c)->my_as),(my_OP_CLI)); + (my_as_modri)(((my_c)->my_as),(my_OP_ADDI),(my_R_RSP),((unsigned long)(((long)(3UL))*((long)(8UL))))); + (my_as_modrm)(((my_c)->my_as),(my_OP_LOAD),(my_R_RAX),(my_R_RSP),(0UL),(0UL),(0UL)); + (my_as_modrm)(((my_c)->my_as),(my_OP_LOAD),(my_R_RDX),(my_R_RSP),(0UL),(0UL),(16UL)); + (my_as_modrm)(((my_c)->my_as),(my_OP_LOAD),(my_R_RBX),(my_R_RSP),(0UL),(0UL),(24UL)); + (my_as_modrm)(((my_c)->my_as),(my_OP_LOAD),(my_R_RBP),(my_R_RSP),(0UL),(0UL),(40UL)); + (my_as_modrm)(((my_c)->my_as),(my_OP_LOAD),(my_R_RSI),(my_R_RSP),(0UL),(0UL),(48UL)); + (my_as_modrm)(((my_c)->my_as),(my_OP_LOAD),(my_R_RDI),(my_R_RSP),(0UL),(0UL),(56UL)); + (my_as_modrm)(((my_c)->my_as),(my_OP_LOAD),(my_R_R8),(my_R_RSP),(0UL),(0UL),(64UL)); + (my_as_modrm)(((my_c)->my_as),(my_OP_LOAD),(my_R_R9),(my_R_RSP),(0UL),(0UL),(72UL)); + (my_as_modrm)(((my_c)->my_as),(my_OP_LOAD),(my_R_R10),(my_R_RSP),(0UL),(0UL),(80UL)); + (my_as_modrm)(((my_c)->my_as),(my_OP_LOAD),(my_R_R12),(my_R_RSP),(0UL),(0UL),(96UL)); + (my_as_modrm)(((my_c)->my_as),(my_OP_LOAD),(my_R_R13),(my_R_RSP),(0UL),(0UL),(104UL)); + (my_as_modrm)(((my_c)->my_as),(my_OP_LOAD),(my_R_R14),(my_R_RSP),(0UL),(0UL),(112UL)); + (my_as_modrm)(((my_c)->my_as),(my_OP_LOAD),(my_R_R15),(my_R_RSP),(0UL),(0UL),(120UL)); + (my_as_modrm)(((my_c)->my_as),(my_OP_LOAD),(my_R_RCX),(my_R_RSP),(0UL),(0UL),(128UL)); + (my_as_modrm)(((my_c)->my_as),(my_OP_LOAD),(my_R_R11),(my_R_RSP),(0UL),(0UL),(136UL)); + (my_as_modrm)(((my_c)->my_as),(my_OP_LOAD),(my_R_RSP),(my_R_RSP),(0UL),(0UL),(32UL)); + (my_as_rex)(((my_c)->my_as),(my_OP_SYSRET),(0UL),(0UL),(0UL)); + (my_as_op)(((my_c)->my_as),(my_OP_SYSRET)); +} +void( my_emit_store)(struct my_assembler* my_c,struct my_type* my_t){ + (my_as_opr)((my_c),(my_OP_POPR),(my_R_RDI)); + (my_as_opr)((my_c),(my_OP_POPR),(my_R_RAX)); + if ((unsigned long)(((long)((my_t)->my_kind))==((long)(my_TY_BYTE)))) { + (my_as_modrm)((my_c),(my_OP_STOREB),(my_R_RAX),(my_R_RDI),(0UL),(0UL),(0UL)); + } else if ((my_type_isprim)((my_t))) { + (my_as_modrm)((my_c),(my_OP_STORE),(my_R_RAX),(my_R_RDI),(0UL),(0UL),(0UL)); + } else { + (my_die)(((unsigned char *)"invalid store")); + } + (my_as_opr)((my_c),(my_OP_PUSHR),(my_R_RAX)); } -void( my_emit_jmp)(struct my_assembler* my_c,struct my_label* my_l){ - (my_as_jmp)((my_c),(my_OP_JMP),(my_l)); +void( my_emit_str)(struct my_assembler* my_c,unsigned char* my_s){ + struct my_label* my_a = 0; + struct my_label* my_b = 0; + unsigned long my_i = 0; + (my_a)=((my_mklabel)((my_c))); + (my_b)=((my_mklabel)((my_c))); + (my_as_jmp)((my_c),(my_OP_JMP),(my_b)); + (my_fixup_label)((my_c),(my_a)); + (my_i)=(0UL); + while (1) { + if ((unsigned long)(!((my_s)[my_i]))) { + break; + } + (my_as_emit)((my_c),((unsigned long)(my_s)[my_i])); + (my_i)=((unsigned long)(((unsigned long)(my_i))+((unsigned long)(1UL)))); + } + (my_as_emit)((my_c),(0UL)); + (my_as_op)((my_c),(my_OP_NOP)); + (my_as_op)((my_c),(my_OP_NOP)); + (my_as_op)((my_c),(my_OP_NOP)); + (my_as_op)((my_c),(my_OP_NOP)); + (my_as_op)((my_c),(my_OP_NOP)); + (my_as_op)((my_c),(my_OP_NOP)); + (my_as_op)((my_c),(my_OP_NOP)); + (my_as_op)((my_c),(my_OP_NOP)); + (my_fixup_label)((my_c),(my_b)); + (my_emit_ptr)((my_c),(my_a)); } -void( my_emit_jz)(struct my_assembler* my_c,struct my_label* my_l){ +void( my_emit_sub)(struct my_assembler* my_c){ (my_as_opr)((my_c),(my_OP_POPR),(my_R_RAX)); - (my_as_modrr)((my_c),(my_OP_TESTRM),(my_R_RAX),(my_R_RAX)); - (my_as_jmp)((my_c),((unsigned long)(((unsigned long)(my_OP_JCC))+((unsigned long)(my_CC_E)))),(my_l)); -} -void( my_emit_kstart)(struct my_assembler* my_c){ - struct my_label* my_hang = 0; - struct my_label* my_do_iret = 0; - struct my_label* my_do_ret = 0; - struct my_label* my_done = 0; - ((my_c)->my_bits32)=(1UL); - (my_hang)=((my_mklabel)((my_c))); - (my_do_iret)=((my_mklabel)((my_c))); - (my_do_ret)=((my_mklabel)((my_c))); - (my_done)=((my_mklabel)((my_c))); - (my_as_modri)((my_c),(my_OP_MOVI),(my_R_RDX),(732803074UL)); - (my_as_modrr)((my_c),(my_OP_CMPRM),(my_R_RAX),(my_R_RDX)); - (my_as_jmp)((my_c),((unsigned long)(((unsigned long)(my_OP_JCC))+((unsigned long)(my_CC_NE)))),(my_hang)); - (my_as_modri)((my_c),(my_OP_MOVI),(my_R_RSP),(3145728UL)); - (my_as_modri)((my_c),(my_OP_ANDI),(my_R_RSP),((unsigned long)(-(unsigned long)(4096UL)))); - (my_as_modri)((my_c),(my_OP_SUBI),(my_R_RSP),(4096UL)); - (my_as_modri)((my_c),(my_OP_MOVI),(my_R_RAX),(131UL)); - (my_as_modri)((my_c),(my_OP_MOVI),(my_R_RDX),(0UL)); - (my_as_modrm)((my_c),(my_OP_STORE),(my_R_RAX),(my_R_RSP),(0UL),(0UL),(0UL)); - (my_as_modrm)((my_c),(my_OP_STORE),(my_R_RDX),(my_R_RSP),(0UL),(0UL),(4UL)); - (my_as_modrm)((my_c),(my_OP_STORE),(my_R_RAX),(my_R_RSP),(0UL),(0UL),((unsigned long)(((unsigned long)((unsigned long)(((long)(510UL))*((long)(8UL)))))+((unsigned long)(0UL))))); - (my_as_modrm)((my_c),(my_OP_STORE),(my_R_RDX),(my_R_RSP),(0UL),(0UL),((unsigned long)(((unsigned long)((unsigned long)(((long)(510UL))*((long)(8UL)))))+((unsigned long)(4UL))))); - (my_as_modrr)((my_c),(my_OP_MOVE),(my_R_RAX),(my_R_RSP)); - (my_as_modri)((my_c),(my_OP_SUBI),(my_R_RSP),(4096UL)); - (my_as_modri)((my_c),(my_OP_ORI),(my_R_RAX),(3UL)); - (my_as_modri)((my_c),(my_OP_MOVI),(my_R_RDX),(0UL)); - (my_as_modrm)((my_c),(my_OP_STORE),(my_R_RAX),(my_R_RSP),(0UL),(0UL),(0UL)); - (my_as_modrm)((my_c),(my_OP_STORE),(my_R_RDX),(my_R_RSP),(0UL),(0UL),(4UL)); - (my_as_modrm)((my_c),(my_OP_STORE),(my_R_RAX),(my_R_RSP),(0UL),(0UL),((unsigned long)(((unsigned long)((unsigned long)(((long)(511UL))*((long)(8UL)))))+((unsigned long)(0UL))))); - (my_as_modrm)((my_c),(my_OP_STORE),(my_R_RDX),(my_R_RSP),(0UL),(0UL),((unsigned long)(((unsigned long)((unsigned long)(((long)(511UL))*((long)(8UL)))))+((unsigned long)(4UL))))); - (my_as_modrr)((my_c),(my_OP_WRCRR),(my_R_CR3),(my_R_RSP)); - (my_as_modri)((my_c),(my_OP_SUBI),(my_R_RSP),(64UL)); - (my_as_modrr)((my_c),(my_OP_MOVE),(my_R_RBP),(my_R_RSP)); - (my_as_modri)((my_c),(my_OP_MOVI),(my_R_RAX),(0UL)); - (my_as_modrm)((my_c),(my_OP_STORE),(my_R_RAX),(my_R_RBP),(0UL),(0UL),(8UL)); - (my_as_modri)((my_c),(my_OP_MOVI),(my_R_RAX),(0UL)); - (my_as_modrm)((my_c),(my_OP_STORE),(my_R_RAX),(my_R_RBP),(0UL),(0UL),(12UL)); - (my_as_modri)((my_c),(my_OP_MOVI),(my_R_RAX),(0UL)); - (my_as_modrm)((my_c),(my_OP_STORE),(my_R_RAX),(my_R_RBP),(0UL),(0UL),(16UL)); - (my_as_modri)((my_c),(my_OP_MOVI),(my_R_RAX),(2136064UL)); - (my_as_modrm)((my_c),(my_OP_STORE),(my_R_RAX),(my_R_RBP),(0UL),(0UL),(20UL)); - (my_as_modri)((my_c),(my_OP_MOVI),(my_R_RAX),(0UL)); - (my_as_modrm)((my_c),(my_OP_STORE),(my_R_RAX),(my_R_RBP),(0UL),(0UL),(24UL)); - (my_as_modri)((my_c),(my_OP_MOVI),(my_R_RAX),(37376UL)); - (my_as_modrm)((my_c),(my_OP_STORE),(my_R_RAX),(my_R_RBP),(0UL),(0UL),(28UL)); - (my_as_modri)((my_c),(my_OP_MOVI),(my_R_RAX),(23UL)); - (my_as_modrm)((my_c),(my_OP_STORE),(my_R_RAX),(my_R_RBP),(0UL),(0UL),(0UL)); - (my_as_modrm)((my_c),(my_OP_LEA),(my_R_RAX),(my_R_RBP),(0UL),(0UL),(8UL)); - (my_as_modrm)((my_c),(my_OP_STORE),(my_R_RAX),(my_R_RBP),(0UL),(0UL),(2UL)); - (my_as_modm)((my_c),(my_OP_LGDTM),(my_R_RBP),(0UL),(0UL),(0UL)); - (my_as_modri)((my_c),(my_OP_MOVI),(my_R_RAX),(0UL)); - (my_as_modr)((my_c),(my_OP_LLDTM),(my_R_RAX)); - (my_as_modm)((my_c),(my_OP_LIDTM),(my_R_RBP),(0UL),(0UL),(8UL)); - (my_as_modri)((my_c),(my_OP_MOVI),(my_R_RAX),(160UL)); - (my_as_modrr)((my_c),(my_OP_WRCRR),(my_R_CR4),(my_R_RAX)); - (my_as_modri)((my_c),(my_OP_MOVI),(my_R_RCX),((unsigned long)(((unsigned long)((unsigned long)(((unsigned long)((unsigned long)(((unsigned long)((unsigned long)(-(unsigned long)(1UL))))<<((unsigned long)(32UL)))))+((unsigned long)((unsigned long)(((unsigned long)(192UL))<<((unsigned long)(24UL))))))))+((unsigned long)(128UL))))); - (my_as_op)((my_c),(my_OP_RDMSR)); - (my_as_modri)((my_c),(my_OP_ORI),(my_R_RAX),(256UL)); - (my_as_op)((my_c),(my_OP_WRMSR)); - (my_as_modrr)((my_c),(my_OP_RDCRR),(my_R_CR0),(my_R_RAX)); - (my_as_modri)((my_c),(my_OP_ORI),(my_R_RAX),((unsigned long)(((unsigned long)((unsigned long)(((unsigned long)((unsigned long)(-(unsigned long)(32768UL))))<<((unsigned long)(16UL)))))|((unsigned long)(1UL))))); - (my_as_modrr)((my_c),(my_OP_WRCRR),(my_R_CR0),(my_R_RAX)); - (my_as_modri)((my_c),(my_OP_MOVI),(my_R_RAX),(0UL)); + (my_as_opr)((my_c),(my_OP_POPR),(my_R_RDX)); + (my_as_modrr)((my_c),(my_OP_SUBRM),(my_R_RAX),(my_R_RDX)); (my_as_opr)((my_c),(my_OP_PUSHR),(my_R_RAX)); - (my_as_modri)((my_c),(my_OP_MOVI),(my_R_RAX),(8UL)); +} +void( my_emit_syscall)(struct my_assembler* my_c){ + (my_as_modrm)((my_c),(my_OP_LOAD),(my_R_RAX),(my_R_RBP),(0UL),(0UL),(16UL)); + (my_as_modrm)((my_c),(my_OP_LOAD),(my_R_RDI),(my_R_RBP),(0UL),(0UL),(24UL)); + (my_as_modrm)((my_c),(my_OP_LOAD),(my_R_RSI),(my_R_RBP),(0UL),(0UL),(32UL)); + (my_as_modrm)((my_c),(my_OP_LOAD),(my_R_RDX),(my_R_RBP),(0UL),(0UL),(40UL)); + (my_as_modrm)((my_c),(my_OP_LOAD),(my_R_R10),(my_R_RBP),(0UL),(0UL),(48UL)); + (my_as_modrm)((my_c),(my_OP_LOAD),(my_R_R8),(my_R_RBP),(0UL),(0UL),(56UL)); + (my_as_modrm)((my_c),(my_OP_LOAD),(my_R_R9),(my_R_RBP),(0UL),(0UL),(64UL)); + (my_as_op)((my_c),(my_OP_SYSCALL)); (my_as_opr)((my_c),(my_OP_PUSHR),(my_R_RAX)); - (my_as_jmp)((my_c),(my_OP_CALL),(my_do_iret)); - ((my_c)->my_bits32)=(0UL); - (my_as_jmp)((my_c),(my_OP_CALL),(my_do_ret)); - (my_as_modri)((my_c),(my_OP_ORI),(my_R_RBP),((unsigned long)(((unsigned long)((unsigned long)(-(unsigned long)(32768UL))))<<((unsigned long)(16UL))))); - (my_as_modri)((my_c),(my_OP_MOVI),(my_R_RAX),(23UL)); - (my_as_modrm)((my_c),(my_OP_STORE),(my_R_RAX),(my_R_RBP),(0UL),(0UL),(0UL)); - (my_as_modrm)((my_c),(my_OP_LEA),(my_R_RAX),(my_R_RBP),(0UL),(0UL),(8UL)); - (my_as_modrm)((my_c),(my_OP_STORE),(my_R_RAX),(my_R_RBP),(0UL),(0UL),(2UL)); - (my_as_modm)((my_c),(my_OP_LGDTM),(my_R_RBP),(0UL),(0UL),(0UL)); - (my_as_modri)((my_c),(my_OP_MOVI),(my_R_RAX),(16UL)); - (my_as_modrr)((my_c),(my_OP_WRSR),(my_R_ES),(my_R_RAX)); - (my_as_modrr)((my_c),(my_OP_WRSR),(my_R_DS),(my_R_RAX)); - (my_as_modrr)((my_c),(my_OP_WRSR),(my_R_FS),(my_R_RAX)); - (my_as_modrr)((my_c),(my_OP_WRSR),(my_R_GS),(my_R_RAX)); - (my_as_modrr)((my_c),(my_OP_WRSR),(my_R_SS),(my_R_RAX)); - (my_as_modrr)((my_c),(my_OP_MOVE),(my_R_RSP),(my_R_RSP)); - (my_as_modri)((my_c),(my_OP_ORI),(my_R_RSP),((unsigned long)(((unsigned long)((unsigned long)(-(unsigned long)(32768UL))))<<((unsigned long)(16UL))))); - (my_as_modri)((my_c),(my_OP_MOVI),(my_R_RAX),(0UL)); - (my_as_modrm)((my_c),(my_OP_LEA),(my_R_RDI),(my_R_RBP),(0UL),(0UL),(64UL)); - (my_as_modrm)((my_c),(my_OP_STORE),(my_R_RAX),(my_R_RDI),(0UL),(0UL),(4096UL)); - (my_as_modrm)((my_c),(my_OP_STORE),(my_R_RAX),(my_R_RDI),(0UL),(0UL),(0UL)); - (my_as_modri)((my_c),(my_OP_ANDI),(my_R_RDI),(2147483647UL)); - (my_as_modrr)((my_c),(my_OP_WRCRR),(my_R_CR3),(my_R_RDI)); - (my_as_jmp)((my_c),(my_OP_JMP),(my_done)); - (my_fixup_label)((my_c),(my_hang)); - (my_as_op)((my_c),(my_OP_CLI)); - (my_as_op)((my_c),(my_OP_HLT)); - (my_as_jmp)((my_c),(my_OP_JMP),(my_hang)); - (my_fixup_label)((my_c),(my_do_iret)); - (my_as_op)((my_c),(my_OP_IRET)); - (my_fixup_label)((my_c),(my_do_ret)); +} +void( my_emit_ud)(struct my_assembler* my_c){ + (my_as_op)((my_c),(my_OP_UD2)); +} +void( my_emit_xor)(struct my_assembler* my_c){ (my_as_opr)((my_c),(my_OP_POPR),(my_R_RAX)); - (my_as_modri)((my_c),(my_OP_ORI),(my_R_RAX),((unsigned long)(((unsigned long)((unsigned long)(-(unsigned long)(32768UL))))<<((unsigned long)(16UL))))); + (my_as_opr)((my_c),(my_OP_POPR),(my_R_RDX)); + (my_as_modrr)((my_c),(my_OP_XORRM),(my_R_RAX),(my_R_RDX)); (my_as_opr)((my_c),(my_OP_PUSHR),(my_R_RAX)); - (my_as_op)((my_c),(my_OP_RET)); - (my_fixup_label)((my_c),(my_done)); - (my_as_modrr)((my_c),(my_OP_XORRM),(my_R_RBP),(my_R_RBP)); - (my_as_opr)((my_c),(my_OP_PUSHR),(my_R_RBX)); - (my_as_opr)((my_c),(my_OP_PUSHR),(my_R_RBP)); } -void( my_emit_lcall)(struct my_assembler* my_c,struct my_label* my_l,unsigned long my_n){ - (my_as_jmp)((my_c),(my_OP_CALL),(my_l)); - (my_emit_pop)((my_c),(my_n)); - (my_as_opr)((my_c),(my_OP_PUSHR),(my_R_RAX)); +void( my_enter)(struct my_peg* my_c,unsigned long my_tag){ + (my_choice)((my_c)); + ((my_c)->my_tag)=(my_tag); +} +unsigned long( my_exec)(unsigned char* my_cmd,unsigned char** my_argv,unsigned char** my_envp){ + return (my_syscall)((59UL),((unsigned long)my_cmd),((unsigned long)my_argv),((unsigned long)my_envp),(0UL),(0UL),(0UL)); +} +void( my_exit)(unsigned long my_n){ + (my_syscall)((60UL),(my_n),(0UL),(0UL),(0UL),(0UL),(0UL)); +} +void( my_fail)(struct my_peg* my_c){ + if ((unsigned long)(((long)((my_c)->my_sp))==((long)(0UL)))) { + (my_die)(((unsigned char *)"fail underflow")); + } + if ((unsigned long)(((long)((my_c)->my_depth))>((long)((my_c)->my_fail_depth)))) { + ((my_c)->my_fail_depth)=((my_c)->my_depth); + ((my_c)->my_fail_tag)=((my_c)->my_tag); + ((my_c)->my_fail_line)=((my_c)->my_line); + ((my_c)->my_fail_col)=((my_c)->my_col); + ((my_c)->my_fail_literal)=((unsigned char*)0UL); + } + ((my_c)->my_sp)=((unsigned long)(((unsigned long)((my_c)->my_sp))-((unsigned long)(1UL)))); + ((my_c)->my_pos)=((((my_c)->my_stack)[(my_c)->my_sp]).my_pos); + ((my_c)->my_depth)=((((my_c)->my_stack)[(my_c)->my_sp]).my_depth); + ((my_c)->my_op)=((((my_c)->my_stack)[(my_c)->my_sp]).my_op); + ((my_c)->my_tag)=((((my_c)->my_stack)[(my_c)->my_sp]).my_tag); + ((my_c)->my_line)=((((my_c)->my_stack)[(my_c)->my_sp]).my_line); + ((my_c)->my_col)=((((my_c)->my_stack)[(my_c)->my_sp]).my_col); +} +void( my_fclose)(struct my_file* my_f){ + (my_fflush)((my_f)); + if ((unsigned long)(((long)((my_close)(((my_f)->my_fd))))!=((long)(0UL)))) { + (my_die)(((unsigned char *)"write failed")); + } + (my_free)(((my_f)->my_a),((my_f)->my_buf)); + (my_free)(((my_f)->my_a),((unsigned char*)my_f)); +} +unsigned long( my_fdgetc)(unsigned long my_fd){ + unsigned char my_b = 0; + unsigned long my_ret = 0; + (my_ret)=((my_read)((my_fd),(&(my_b)),(1UL))); + if ((unsigned long)(((long)(my_ret))==((long)(1UL)))) { + return (unsigned long)my_b; + } else if ((unsigned long)(((long)(my_ret))==((long)(0UL)))) { + return (unsigned long)(-(unsigned long)(1UL)); + } else { + (my_exit)((3UL)); + } } -void( my_emit_le)(struct my_assembler* my_c){ - (my_as_opr)((my_c),(my_OP_POPR),(my_R_RDX)); - (my_as_opr)((my_c),(my_OP_POPR),(my_R_RCX)); - (my_as_modrr)((my_c),(my_OP_XORRM),(my_R_RAX),(my_R_RAX)); - (my_as_modrr)((my_c),(my_OP_CMPRM),(my_R_RDX),(my_R_RCX)); - (my_as_modrr)((my_c),((unsigned long)(((unsigned long)(my_OP_SETCC))+((unsigned long)(my_CC_LE)))),(0UL),(my_R_RAX)); - (my_as_opr)((my_c),(my_OP_PUSHR),(my_R_RAX)); +void( my_fdputc)(unsigned long my_fd,unsigned long my_ch){ + unsigned char my_b = 0; + unsigned long my_ret = 0; + (my_b)=((unsigned char)my_ch); + (my_ret)=((my_write)((my_fd),(&(my_b)),(1UL))); + if ((unsigned long)(((long)(my_ret))!=((long)(1UL)))) { + (my_exit)((3UL)); + } } -void( my_emit_lea)(struct my_assembler* my_c,unsigned long my_offset){ - (my_as_modrm)((my_c),(my_OP_LEA),(my_R_RAX),(my_R_RBP),(0UL),(0UL),(my_offset)); - (my_as_opr)((my_c),(my_OP_PUSHR),(my_R_RAX)); +void( my_fdputd)(unsigned long my_fd,unsigned long my_n){ + unsigned long my_a = 0; + if ((unsigned long)(((long)(my_n))<((long)(0UL)))) { + (my_fdputc)((my_fd),(45)); + (my_a)=((unsigned long)(-(unsigned long)((unsigned long)(((long)(my_n))%((long)(10UL)))))); + (my_n)=((unsigned long)(((long)(my_n))/((long)((unsigned long)(-(unsigned long)(10UL)))))); + } else { + (my_a)=((unsigned long)(((long)(my_n))%((long)(10UL)))); + (my_n)=((unsigned long)(((long)(my_n))/((long)(10UL)))); + } + if ((unsigned long)(((long)(my_n))!=((long)(0UL)))) { + (my_fdputd)((my_fd),(my_n)); + } + (my_fdputc)((my_fd),((unsigned long)(((unsigned long)(48))+((unsigned long)(my_a))))); } -void( my_emit_load)(struct my_assembler* my_c,struct my_type* my_t){ - (my_as_opr)((my_c),(my_OP_POPR),(my_R_RDI)); - if ((unsigned long)(((long)((my_t)->my_kind))==((long)(my_TY_BYTE)))) { - (my_as_modrr)((my_c),(my_OP_XORRM),(my_R_RAX),(my_R_RAX)); - (my_as_modrm)((my_c),(my_OP_LOADB),(my_R_RAX),(my_R_RDI),(0UL),(0UL),(0UL)); - } else if ((my_type_isprim)((my_t))) { - (my_as_modrm)((my_c),(my_OP_LOAD),(my_R_RAX),(my_R_RDI),(0UL),(0UL),(0UL)); +void( my_fdputh)(unsigned long my_fd,unsigned long my_n){ + unsigned long my_c = 0; + unsigned long my_r = 0; + (my_r)=(0UL); + while (1) { + if ((unsigned long)(((long)(my_n))==((long)(0UL)))) { + break; + } + (my_r)=((unsigned long)(((unsigned long)((unsigned long)(((unsigned long)(my_r))<<((unsigned long)(4UL)))))+((unsigned long)((unsigned long)(((unsigned long)(my_n))&((unsigned long)(15UL))))))); + (my_n)=((unsigned long)(((unsigned long)(my_n))>>((unsigned long)(4UL)))); + } + (my_n)=(my_r); + while (1) { + (my_c)=((unsigned long)(((unsigned long)(my_n))&((unsigned long)(15UL)))); + (my_n)=((unsigned long)(((unsigned long)(my_n))>>((unsigned long)(4UL)))); + if ((unsigned long)(((long)(my_c))<((long)(10UL)))) { + (my_fdputc)((my_fd),((unsigned long)(((unsigned long)(my_c))+((unsigned long)(48))))); } else { - (my_die)(((unsigned char *)"invalid load")); + (my_fdputc)((my_fd),((unsigned long)(((unsigned long)(my_c))+((unsigned long)((unsigned long)(((unsigned long)(97))-((unsigned long)(10UL)))))))); + } + if ((unsigned long)(((long)(my_n))==((long)(0UL)))) { + break; + } } - (my_as_opr)((my_c),(my_OP_PUSHR),(my_R_RAX)); } -void( my_emit_lsh)(struct my_assembler* my_c){ - (my_as_opr)((my_c),(my_OP_POPR),(my_R_RAX)); - (my_as_opr)((my_c),(my_OP_POPR),(my_R_RCX)); - (my_as_modr)((my_c),(my_OP_SHLM),(my_R_RAX)); - (my_as_opr)((my_c),(my_OP_PUSHR),(my_R_RAX)); +void( my_fdputh16)(unsigned long my_fd,unsigned long my_x){ + (my_fdputhn)((my_fd),(my_x),(16UL)); } -void( my_emit_lt)(struct my_assembler* my_c){ - (my_as_opr)((my_c),(my_OP_POPR),(my_R_RDX)); - (my_as_opr)((my_c),(my_OP_POPR),(my_R_RCX)); - (my_as_modrr)((my_c),(my_OP_XORRM),(my_R_RAX),(my_R_RAX)); - (my_as_modrr)((my_c),(my_OP_CMPRM),(my_R_RDX),(my_R_RCX)); - (my_as_modrr)((my_c),((unsigned long)(((unsigned long)(my_OP_SETCC))+((unsigned long)(my_CC_L)))),(0UL),(my_R_RAX)); - (my_as_opr)((my_c),(my_OP_PUSHR),(my_R_RAX)); +void( my_fdputh32)(unsigned long my_fd,unsigned long my_x){ + (my_fdputhn)((my_fd),(my_x),(32UL)); } -void( my_emit_mod)(struct my_assembler* my_c){ - (my_as_opr)((my_c),(my_OP_POPR),(my_R_RAX)); - (my_as_opr)((my_c),(my_OP_POPR),(my_R_RCX)); - (my_as_modrr)((my_c),(my_OP_XORRM),(my_R_RDX),(my_R_RDX)); - (my_as_modrr)((my_c),(my_OP_TESTRM),(my_R_RAX),(my_R_RAX)); - (my_as_modrr)((my_c),((unsigned long)(((unsigned long)(my_OP_SETCC))+((unsigned long)(my_CC_S)))),(0UL),(my_R_RDX)); - (my_as_modr)((my_c),(my_OP_NEGM),(my_R_RDX)); - (my_as_modr)((my_c),(my_OP_IDIVM),(my_R_RCX)); - (my_as_opr)((my_c),(my_OP_PUSHR),(my_R_RDX)); +void( my_fdputh64)(unsigned long my_fd,unsigned long my_x){ + (my_fdputhn)((my_fd),(my_x),(64UL)); } -void( my_emit_mul)(struct my_assembler* my_c){ - (my_as_opr)((my_c),(my_OP_POPR),(my_R_RAX)); - (my_as_opr)((my_c),(my_OP_POPR),(my_R_RCX)); - (my_as_modr)((my_c),(my_OP_IMULM),(my_R_RCX)); - (my_as_opr)((my_c),(my_OP_PUSHR),(my_R_RAX)); +void( my_fdputh8)(unsigned long my_fd,unsigned long my_x){ + (my_fdputhn)((my_fd),(my_x),(8UL)); } -void( my_emit_ne)(struct my_assembler* my_c){ - (my_as_opr)((my_c),(my_OP_POPR),(my_R_RDX)); - (my_as_opr)((my_c),(my_OP_POPR),(my_R_RCX)); - (my_as_modrr)((my_c),(my_OP_XORRM),(my_R_RAX),(my_R_RAX)); - (my_as_modrr)((my_c),(my_OP_CMPRM),(my_R_RDX),(my_R_RCX)); - (my_as_modrr)((my_c),((unsigned long)(((unsigned long)(my_OP_SETCC))+((unsigned long)(my_CC_NE)))),(0UL),(my_R_RAX)); - (my_as_opr)((my_c),(my_OP_PUSHR),(my_R_RAX)); +void( my_fdputhn)(unsigned long my_fd,unsigned long my_x,unsigned long my_d){ + while (1) { + if ((unsigned long)(((long)(my_d))==((long)(0UL)))) { + break; + } + (my_d)=((unsigned long)(((unsigned long)(my_d))-((unsigned long)(4UL)))); + (my_fdputc)((my_fd),((unsigned long)((unsigned char *)"0123456789abcdef")[(unsigned long)(((unsigned long)((unsigned long)(((unsigned long)(my_x))>>((unsigned long)(my_d)))))&((unsigned long)(15UL)))])); + } } -void( my_emit_neg)(struct my_assembler* my_c){ - (my_as_opr)((my_c),(my_OP_POPR),(my_R_RAX)); - (my_as_modr)((my_c),(my_OP_NEGM),(my_R_RAX)); - (my_as_opr)((my_c),(my_OP_PUSHR),(my_R_RAX)); +void( my_fdputs)(unsigned long my_fd,unsigned char* my_msg){ + unsigned long my_len = 0; + unsigned long my_ret = 0; + unsigned long my_off = 0; + (my_len)=((my_strlen)((my_msg))); + (my_off)=(0UL); + while (1) { + if ((unsigned long)(((long)(my_off))==((long)(my_len)))) { + break; + } + (my_ret)=((my_write)((my_fd),(my_msg),((unsigned long)(((unsigned long)(my_len))-((unsigned long)(my_off)))))); + if ((unsigned long)(((long)(my_ret))<((long)(0UL)))) { + (my_exit)((3UL)); + } + (my_off)=((unsigned long)(((unsigned long)(my_off))+((unsigned long)(my_ret)))); + } +} +void( my_fdxxd)(unsigned long my_fd,unsigned char* my_data,unsigned long my_len){ + unsigned long my_i = 0; + unsigned long my_j = 0; + while (1) { + if ((unsigned long)(((long)(my_i))>=((long)(my_len)))) { + break; + } + (my_fdputh32)((my_fd),(my_i)); + (my_fdputc)((my_fd),(58)); + (my_fdputc)((my_fd),(32)); + (my_j)=(0UL); + while (1) { + if ((unsigned long)(((long)(my_j))==((long)(16UL)))) { + break; + } + if ((unsigned long)(((long)((unsigned long)(((unsigned long)(my_i))+((unsigned long)(my_j)))))<((long)(my_len)))) { + (my_fdputh8)((my_fd),((unsigned long)(my_data)[(unsigned long)(((unsigned long)(my_i))+((unsigned long)(my_j)))])); + } else { + (my_fdputc)((my_fd),(32)); + (my_fdputc)((my_fd),(32)); + } + if ((unsigned long)(((long)((unsigned long)(((unsigned long)((unsigned long)(((unsigned long)(my_i))+((unsigned long)(my_j)))))+((unsigned long)(1UL)))))<((long)(my_len)))) { + (my_fdputh8)((my_fd),((unsigned long)(my_data)[(unsigned long)(((unsigned long)((unsigned long)(((unsigned long)(my_i))+((unsigned long)(my_j)))))+((unsigned long)(1UL)))])); + } else { + (my_fdputc)((my_fd),(32)); + (my_fdputc)((my_fd),(32)); + } + (my_fdputc)((my_fd),(32)); + (my_j)=((unsigned long)(((unsigned long)(my_j))+((unsigned long)(2UL)))); + } + (my_fdputc)((my_fd),(32)); + (my_j)=(0UL); + while (1) { + if ((unsigned long)(((unsigned long)(((long)(my_j))==((long)(16UL))))||((unsigned long)(((long)((unsigned long)(((unsigned long)(my_i))+((unsigned long)(my_j)))))>=((long)(my_len)))))) { + break; + } + if ((unsigned long)(((unsigned long)(((long)((unsigned long)(my_data)[(unsigned long)(((unsigned long)(my_i))+((unsigned long)(my_j)))]))>=((long)(32UL))))&&((unsigned long)(((long)((unsigned long)(my_data)[(unsigned long)(((unsigned long)(my_i))+((unsigned long)(my_j)))]))<((long)(128UL)))))) { + (my_fdputc)((my_fd),((unsigned long)(my_data)[(unsigned long)(((unsigned long)(my_i))+((unsigned long)(my_j)))])); + } else { + (my_fdputc)((my_fd),(46)); + } + (my_j)=((unsigned long)(((unsigned long)(my_j))+((unsigned long)(1UL)))); + } + (my_fdputc)((my_fd),(10)); + (my_i)=((unsigned long)(((unsigned long)(my_i))+((unsigned long)(16UL)))); + } +} +void( my_ffill)(struct my_file* my_f){ + unsigned long my_ret = 0; + if ((my_f)->my_eof) { + return; + } + if ((unsigned long)(((long)((my_f)->my_r))==((long)((my_f)->my_w)))) { + ((my_f)->my_r)=(0UL); + ((my_f)->my_w)=(0UL); + } + if ((unsigned long)(((long)((my_f)->my_w))==((long)((my_f)->my_cap)))) { + (my_die)(((unsigned char *)"out of space")); + } + (my_ret)=((my_read)(((my_f)->my_fd),(&(((my_f)->my_buf)[(my_f)->my_w])),((unsigned long)(((unsigned long)((my_f)->my_cap))-((unsigned long)((my_f)->my_w)))))); + if ((unsigned long)(((long)(my_ret))<((long)(0UL)))) { + (my_die)(((unsigned char *)"read failed")); + } + if ((unsigned long)(((long)(my_ret))==((long)(0UL)))) { + ((my_f)->my_eof)=(1UL); + } + ((my_f)->my_w)=((unsigned long)(((unsigned long)((my_f)->my_w))+((unsigned long)(my_ret)))); +} +void( my_fflush)(struct my_file* my_f){ + unsigned long my_ret = 0; + while (1) { + if ((unsigned long)(((long)((my_f)->my_r))==((long)((my_f)->my_w)))) { + ((my_f)->my_r)=(0UL); + ((my_f)->my_w)=(0UL); + return; + } + (my_ret)=((my_write)(((my_f)->my_fd),(&(((my_f)->my_buf)[(my_f)->my_r])),((unsigned long)(((unsigned long)((my_f)->my_w))-((unsigned long)((my_f)->my_r)))))); + if ((unsigned long)(((long)(my_ret))<((long)(0UL)))) { + (my_die)(((unsigned char *)"write failed")); + } + ((my_f)->my_r)=((unsigned long)(((unsigned long)((my_f)->my_r))+((unsigned long)(my_ret)))); + } +} +unsigned long( my_fgetc)(struct my_file* my_f){ + unsigned long my_ch = 0; + if ((unsigned long)(((long)((my_f)->my_r))==((long)((my_f)->my_w)))) { + (my_ffill)((my_f)); + } + if ((my_f)->my_eof) { + return (unsigned long)(-(unsigned long)(1UL)); + } + (my_ch)=((unsigned long)((my_f)->my_buf)[(my_f)->my_r]); + ((my_f)->my_r)=((unsigned long)(((unsigned long)((my_f)->my_r))+((unsigned long)(1UL)))); + return my_ch; +} +unsigned long( my_fgets)(struct my_file* my_f,unsigned char* my_buf,unsigned long my_len){ + unsigned long my_i = 0; + unsigned long my_c = 0; + if ((unsigned long)(((long)(my_len))==((long)(1UL)))) { + ((my_buf)[0UL])=((unsigned char)0UL); + return 0UL; + } + (my_i)=(0UL); + while (1) { + if ((unsigned long)(((long)((unsigned long)(((unsigned long)(my_i))+((unsigned long)(1UL)))))==((long)(my_len)))) { + ((my_buf)[my_i])=((unsigned char)0UL); + return my_i; + } + (my_c)=((my_fgetc)((my_f))); + if ((unsigned long)(((unsigned long)(((long)(my_c))==((long)((unsigned long)(-(unsigned long)(1UL))))))||((unsigned long)(((long)(my_c))==((long)(10)))))) { + ((my_buf)[my_i])=((unsigned char)0UL); + return my_i; + } + ((my_buf)[my_i])=((unsigned char)my_c); + (my_i)=((unsigned long)(((unsigned long)(my_i))+((unsigned long)(1UL)))); + } } -void( my_emit_not)(struct my_assembler* my_c){ - (my_as_opr)((my_c),(my_OP_POPR),(my_R_RAX)); - (my_as_modr)((my_c),(my_OP_NOTM),(my_R_RAX)); - (my_as_opr)((my_c),(my_OP_PUSHR),(my_R_RAX)); +void( my_fillpos)(struct my_parser* my_c,struct my_node* my_n){ } -void( my_emit_num)(struct my_assembler* my_c,unsigned long my_x){ - (my_as_opri64)((my_c),(my_OP_MOVABS),(my_R_RDX),(my_x)); - (my_as_opr)((my_c),(my_OP_PUSHR),(my_R_RDX)); +struct my_decl*( my_find)(struct my_compiler* my_c,unsigned char* my_name,unsigned char* my_member_name,unsigned long my_make){ + struct my_decl* my_p = 0; + struct my_decl* my_d = 0; + struct my_decl** my_link = 0; + unsigned long my_dir = 0; + (my_p)=((struct my_decl*)0UL); + (my_link)=(&((my_c)->my_decls)); + while (1) { + (my_d)=(*(my_link)); + if ((unsigned long)(!(my_d))) { + break; + } + (my_dir)=((my_strcmp)((my_name),((my_d)->my_name))); + if ((unsigned long)(((long)(my_dir))==((long)(0UL)))) { + if ((unsigned long)(((unsigned long)(!(my_member_name)))&&((unsigned long)(!((my_d)->my_member_name))))) { + (my_dir)=(0UL); + } else if ((unsigned long)(!(my_member_name))) { + (my_dir)=((unsigned long)(-(unsigned long)(1UL))); + } else if ((unsigned long)(!((my_d)->my_member_name))) { + (my_dir)=(1UL); + } else { + (my_dir)=((my_strcmp)((my_member_name),((my_d)->my_member_name))); + } + } + if ((unsigned long)(((long)(my_dir))<((long)(0UL)))) { + (my_p)=(my_d); + (my_link)=(&((my_d)->my_l)); + } else if ((unsigned long)(((long)(my_dir))>((long)(0UL)))) { + (my_p)=(my_d); + (my_link)=(&((my_d)->my_r)); + } else { + return my_d; + } + } + if ((unsigned long)(!(my_make))) { + return (struct my_decl*)0UL; + } + (my_d)=((struct my_decl*)(my_alloc)(((my_c)->my_a),(216UL))); + ((my_d)->my_name)=(my_name); + ((my_d)->my_member_name)=(my_member_name); + ((my_d)->my_p)=(my_p); + ((my_d)->my_l)=((struct my_decl*)0UL); + ((my_d)->my_r)=((struct my_decl*)0UL); + ((my_d)->my_func_defined)=(0UL); + ((my_d)->my_func_type)=((struct my_type*)0UL); + ((my_d)->my_func_label)=((my_mklabel)(((my_c)->my_as))); + ((my_d)->my_func_def)=((struct my_node*)0UL); + ((my_d)->my_struct_defined)=(0UL); + ((my_d)->my_struct_size)=(0UL); + ((my_d)->my_struct_layout_done)=(0UL); + ((my_d)->my_struct_def)=((struct my_node*)0UL); + ((my_d)->my_member_defined)=(0UL); + ((my_d)->my_member_type)=((struct my_type*)0UL); + ((my_d)->my_member_offset)=(0UL); + ((my_d)->my_member_def)=((struct my_node*)0UL); + ((my_d)->my_enum_defined)=(0UL); + ((my_d)->my_enum_value)=(0UL); + ((my_d)->my_enum_def)=((struct my_node*)0UL); + ((my_d)->my_var_defined)=(0UL); + ((my_d)->my_var_type)=((struct my_type*)0UL); + ((my_d)->my_var_offset)=(0UL); + ((my_d)->my_var_def)=((struct my_node*)0UL); + ((my_d)->my_goto_defined)=(0UL); + ((my_d)->my_goto_label)=((my_mklabel)(((my_c)->my_as))); + (*(my_link))=(my_d); + return my_d; } -void( my_emit_or)(struct my_assembler* my_c){ - (my_as_opr)((my_c),(my_OP_POPR),(my_R_RAX)); - (my_as_opr)((my_c),(my_OP_POPR),(my_R_RDX)); - (my_as_modrr)((my_c),(my_OP_ORRM),(my_R_RAX),(my_R_RDX)); - (my_as_opr)((my_c),(my_OP_PUSHR),(my_R_RAX)); +struct my_decl*( my_first_decl)(struct my_compiler* my_c){ + struct my_decl* my_d = 0; + (my_d)=((my_c)->my_decls); + if ((unsigned long)(!(my_d))) { + return (struct my_decl*)0UL; + } + while (1) { + if ((unsigned long)(!((my_d)->my_l))) { + return my_d; + } + (my_d)=((my_d)->my_l); + } } -void( my_emit_pop)(struct my_assembler* my_c,unsigned long my_n){ - (my_as_modri)((my_c),(my_OP_ADDI),(my_R_RSP),((unsigned long)(((unsigned long)(my_n))<<((unsigned long)(3UL))))); +void( my_fixup)(struct my_assembler* my_c,unsigned char* my_here,unsigned long my_delta){ + ((my_here)[0UL])=((unsigned char)my_delta); + ((my_here)[1UL])=((unsigned char)(unsigned long)(((unsigned long)(my_delta))>>((unsigned long)(8UL)))); + ((my_here)[2UL])=((unsigned char)(unsigned long)(((unsigned long)(my_delta))>>((unsigned long)(16UL)))); + ((my_here)[3UL])=((unsigned char)(unsigned long)(((unsigned long)(my_delta))>>((unsigned long)(24UL)))); } -void( my_emit_preamble)(struct my_assembler* my_c,unsigned long my_n,unsigned long my_pragma){ - unsigned long my_i = 0; - if ((unsigned long)(((long)(my_pragma))==((long)(1UL)))) { - (my_as_modrr)((my_c),(my_OP_XORRM),(my_R_RBP),(my_R_RBP)); - (my_as_modrm)((my_c),(my_OP_LOAD),(my_R_RDI),(my_R_RSP),(0UL),(0UL),(0UL)); - (my_as_modrm)((my_c),(my_OP_LEA),(my_R_RSI),(my_R_RSP),(0UL),(0UL),(8UL)); - (my_as_modrm)((my_c),(my_OP_LEA),(my_R_RDX),(my_R_RSI),(my_R_RDI),(8UL),(8UL)); - (my_as_opr)((my_c),(my_OP_PUSHR),(my_R_RDX)); - (my_as_opr)((my_c),(my_OP_PUSHR),(my_R_RSI)); - (my_as_opr)((my_c),(my_OP_PUSHR),(my_R_RDI)); - (my_as_opr)((my_c),(my_OP_PUSHR),(my_R_RBP)); - } else if ((unsigned long)(((long)(my_pragma))>((long)(1UL)))) { - (my_emit_kstart)((my_c)); +void( my_fixup_label)(struct my_assembler* my_c,struct my_label* my_l){ + struct my_fixup* my_f = 0; + if ((my_l)->my_fixed) { + (my_die)(((unsigned char *)"already fixed")); } - (my_as_opr)((my_c),(my_OP_PUSHR),(my_R_RBP)); - (my_as_modrr)((my_c),(my_OP_MOVE),(my_R_RBP),(my_R_RSP)); - (my_i)=(0UL); + ((my_l)->my_at)=((my_c)->my_at); + ((my_l)->my_fixed)=(1UL); + (my_f)=((my_l)->my_fix); while (1) { - if ((unsigned long)(((long)(my_i))>=((long)(my_n)))) { + if ((unsigned long)(!(my_f))) { break; } - (my_emit_num)((my_c),(0UL)); - (my_i)=((unsigned long)(((unsigned long)(my_i))+((unsigned long)(8UL)))); + (my_fixup)((my_c),((my_f)->my_ptr),((unsigned long)(((unsigned long)((my_l)->my_at))-((unsigned long)((my_f)->my_at))))); + (my_f)=((my_f)->my_next); } } -void( my_emit_ptr)(struct my_assembler* my_c,struct my_label* my_l){ - (my_reserve)((my_c),(16UL)); - (my_as_modrm)((my_c),(my_OP_LEA),(my_R_RAX),(my_R_RIP),(0UL),(0UL),(128UL)); - (my_addfixup)((my_c),(my_l)); - (my_as_opr)((my_c),(my_OP_PUSHR),(my_R_RAX)); -} -void( my_emit_restorer)(struct my_assembler* my_c){ - (my_as_modri)((my_c),(my_OP_MOVI),(my_R_RAX),(15UL)); - (my_as_op)((my_c),(my_OP_SYSCALL)); +void( my_flush_coutput)(struct my_compiler* my_c){ + (my_fflush)(((my_c)->my_cout)); } -void( my_emit_ret)(struct my_assembler* my_c){ - (my_as_opr)((my_c),(my_OP_POPR),(my_R_RAX)); - (my_as_modrr)((my_c),(my_OP_MOVE),(my_R_RSP),(my_R_RBP)); - (my_as_opr)((my_c),(my_OP_POPR),(my_R_RBP)); - (my_as_op)((my_c),(my_OP_RET)); +struct my_file*( my_fopen)(unsigned long my_fd,struct my_alloc* my_a){ + struct my_file* my_f = 0; + (my_f)=((struct my_file*)(my_alloc)((my_a),(56UL))); + ((my_f)->my_fd)=(my_fd); + ((my_f)->my_a)=(my_a); + ((my_f)->my_r)=(0UL); + ((my_f)->my_w)=(0UL); + ((my_f)->my_cap)=(4096UL); + ((my_f)->my_eof)=(0UL); + ((my_f)->my_buf)=((my_alloc)((my_a),((my_f)->my_cap))); + return my_f; } -void( my_emit_rsh)(struct my_assembler* my_c){ - (my_as_opr)((my_c),(my_OP_POPR),(my_R_RAX)); - (my_as_opr)((my_c),(my_OP_POPR),(my_R_RCX)); - (my_as_modr)((my_c),(my_OP_SHRM),(my_R_RAX)); - (my_as_opr)((my_c),(my_OP_PUSHR),(my_R_RAX)); +unsigned long( my_fork)(void){ + return (my_syscall)((57UL),(0UL),(0UL),(0UL),(0UL),(0UL),(0UL)); } -void( my_emit_ssr)(struct my_compiler* my_c){ - struct my_decl* my_d = 0; - struct my_decl* my_v = 0; - (my_v)=((my_find)((my_c),((unsigned char *)"global"),((unsigned char *)"_save"),(0UL))); - if ((unsigned long)(((unsigned long)(!(my_v)))||((unsigned long)(!((my_v)->my_member_defined))))) { - (my_cdie)((my_c),((unsigned char *)"no _save")); - } - (my_as_emit)(((my_c)->my_as),(my_OP_GS)); - (my_as_modra)(((my_c)->my_as),(my_OP_STORE),(my_R_RSP),((my_v)->my_member_offset)); - (my_v)=((my_find)((my_c),((unsigned char *)"global"),((unsigned char *)"curtask"),(0UL))); - if ((unsigned long)(((unsigned long)(!(my_v)))||((unsigned long)(!((my_v)->my_member_defined))))) { - (my_cdie)((my_c),((unsigned char *)"no global.curtask")); - } - (my_as_emit)(((my_c)->my_as),(my_OP_GS)); - (my_as_modra)(((my_c)->my_as),(my_OP_LOAD),(my_R_RSP),((my_v)->my_member_offset)); - (my_v)=((my_find)((my_c),((unsigned char *)"task"),((unsigned char *)"stack"),(0UL))); - if ((unsigned long)(((unsigned long)(!(my_v)))||((unsigned long)(!((my_v)->my_member_defined))))) { - (my_cdie)((my_c),((unsigned char *)"no task.stack")); +void( my_fputb)(struct my_file* my_f,unsigned char* my_s,unsigned long my_n){ + unsigned long my_i = 0; + (my_i)=(0UL); + while (1) { + if ((unsigned long)(((long)(my_i))>=((long)(my_n)))) { + break; } - (my_as_modrm)(((my_c)->my_as),(my_OP_LOAD),(my_R_RSP),(my_R_RSP),(0UL),(0UL),((my_v)->my_member_offset)); - (my_as_modri)(((my_c)->my_as),(my_OP_ADDI),(my_R_RSP),((unsigned long)(((unsigned long)(4096UL))-((unsigned long)(176UL))))); - (my_as_modrm)(((my_c)->my_as),(my_OP_STORE),(my_R_RAX),(my_R_RSP),(0UL),(0UL),(0UL)); - (my_as_modrm)(((my_c)->my_as),(my_OP_STORE),(my_R_RDX),(my_R_RSP),(0UL),(0UL),(16UL)); - (my_as_modrm)(((my_c)->my_as),(my_OP_STORE),(my_R_RBX),(my_R_RSP),(0UL),(0UL),(24UL)); - (my_as_modrm)(((my_c)->my_as),(my_OP_STORE),(my_R_RBP),(my_R_RSP),(0UL),(0UL),(40UL)); - (my_as_modrm)(((my_c)->my_as),(my_OP_STORE),(my_R_RSI),(my_R_RSP),(0UL),(0UL),(48UL)); - (my_as_modrm)(((my_c)->my_as),(my_OP_STORE),(my_R_RDI),(my_R_RSP),(0UL),(0UL),(56UL)); - (my_as_modrm)(((my_c)->my_as),(my_OP_STORE),(my_R_R8),(my_R_RSP),(0UL),(0UL),(64UL)); - (my_as_modrm)(((my_c)->my_as),(my_OP_STORE),(my_R_R9),(my_R_RSP),(0UL),(0UL),(72UL)); - (my_as_modrm)(((my_c)->my_as),(my_OP_STORE),(my_R_R10),(my_R_RSP),(0UL),(0UL),(80UL)); - (my_as_modrm)(((my_c)->my_as),(my_OP_STORE),(my_R_R12),(my_R_RSP),(0UL),(0UL),(96UL)); - (my_as_modrm)(((my_c)->my_as),(my_OP_STORE),(my_R_R13),(my_R_RSP),(0UL),(0UL),(104UL)); - (my_as_modrm)(((my_c)->my_as),(my_OP_STORE),(my_R_R14),(my_R_RSP),(0UL),(0UL),(112UL)); - (my_as_modrm)(((my_c)->my_as),(my_OP_STORE),(my_R_R15),(my_R_RSP),(0UL),(0UL),(120UL)); - (my_as_modrm)(((my_c)->my_as),(my_OP_STORE),(my_R_RCX),(my_R_RSP),(0UL),(0UL),(128UL)); - (my_as_modrm)(((my_c)->my_as),(my_OP_STORE),(my_R_R11),(my_R_RSP),(0UL),(0UL),(136UL)); - (my_as_modrr)(((my_c)->my_as),(my_OP_XORRM),(my_R_RAX),(my_R_RAX)); - (my_as_modrm)(((my_c)->my_as),(my_OP_STORE),(my_R_RAX),(my_R_RSP),(0UL),(0UL),(8UL)); - (my_as_modrm)(((my_c)->my_as),(my_OP_STORE),(my_R_RAX),(my_R_RSP),(0UL),(0UL),(88UL)); - (my_as_modrm)(((my_c)->my_as),(my_OP_STORE),(my_R_RAX),(my_R_RSP),(0UL),(0UL),(160UL)); - (my_as_modrm)(((my_c)->my_as),(my_OP_STORE),(my_R_RAX),(my_R_RSP),(0UL),(0UL),(168UL)); - (my_as_modri)(((my_c)->my_as),(my_OP_MOVI),(my_R_RAX),(43UL)); - (my_as_modrm)(((my_c)->my_as),(my_OP_STORE),(my_R_RAX),(my_R_RSP),(0UL),(0UL),(144UL)); - (my_as_modri)(((my_c)->my_as),(my_OP_MOVI),(my_R_RAX),(35UL)); - (my_as_modrm)(((my_c)->my_as),(my_OP_STORE),(my_R_RAX),(my_R_RSP),(0UL),(0UL),(152UL)); - (my_v)=((my_find)((my_c),((unsigned char *)"global"),((unsigned char *)"_save"),(0UL))); - if ((unsigned long)(((unsigned long)(!(my_v)))||((unsigned long)(!((my_v)->my_member_defined))))) { - (my_cdie)((my_c),((unsigned char *)"no _save")); + (my_fputc)((my_f),((unsigned long)(my_s)[my_i])); + (my_i)=((unsigned long)(((unsigned long)(my_i))+((unsigned long)(1UL)))); } - (my_as_emit)(((my_c)->my_as),(my_OP_GS)); - (my_as_modra)(((my_c)->my_as),(my_OP_LOAD),(my_R_RAX),((my_v)->my_member_offset)); - (my_as_modrm)(((my_c)->my_as),(my_OP_STORE),(my_R_RAX),(my_R_RSP),(0UL),(0UL),(32UL)); - (my_as_modrr)(((my_c)->my_as),(my_OP_MOVE),(my_R_RAX),(my_R_RSP)); - (my_as_modrr)(((my_c)->my_as),(my_OP_XORRM),(my_R_RBP),(my_R_RBP)); - (my_as_opr)(((my_c)->my_as),(my_OP_PUSHR),(my_R_RBP)); - (my_as_opr)(((my_c)->my_as),(my_OP_PUSHR),(my_R_RBP)); - (my_as_modrr)(((my_c)->my_as),(my_OP_MOVE),(my_R_RBP),(my_R_RSP)); - (my_as_opr)(((my_c)->my_as),(my_OP_PUSHR),(my_R_RAX)); - (my_d)=((my_find)((my_c),((unsigned char *)"_ssr"),((unsigned char*)0UL),(1UL))); - if ((unsigned long)(((my_d)->my_func_defined)&&(((my_d)->my_func_label)->my_fixed))) { - (my_as_jmp)(((my_c)->my_as),(my_OP_CALL),((my_d)->my_func_label)); +} +void( my_fputc)(struct my_file* my_f,unsigned long my_ch){ + if ((unsigned long)(((long)((my_f)->my_w))==((long)((my_f)->my_cap)))) { + (my_fflush)((my_f)); + } + (((my_f)->my_buf)[(my_f)->my_w])=((unsigned char)my_ch); + ((my_f)->my_w)=((unsigned long)(((unsigned long)((my_f)->my_w))+((unsigned long)(1UL)))); + if ((unsigned long)(((long)(my_ch))==((long)(10)))) { + (my_fflush)((my_f)); } - (my_as_op)(((my_c)->my_as),(my_OP_CLI)); - (my_as_modri)(((my_c)->my_as),(my_OP_ADDI),(my_R_RSP),((unsigned long)(((long)(3UL))*((long)(8UL))))); - (my_as_modrm)(((my_c)->my_as),(my_OP_LOAD),(my_R_RAX),(my_R_RSP),(0UL),(0UL),(0UL)); - (my_as_modrm)(((my_c)->my_as),(my_OP_LOAD),(my_R_RDX),(my_R_RSP),(0UL),(0UL),(16UL)); - (my_as_modrm)(((my_c)->my_as),(my_OP_LOAD),(my_R_RBX),(my_R_RSP),(0UL),(0UL),(24UL)); - (my_as_modrm)(((my_c)->my_as),(my_OP_LOAD),(my_R_RBP),(my_R_RSP),(0UL),(0UL),(40UL)); - (my_as_modrm)(((my_c)->my_as),(my_OP_LOAD),(my_R_RSI),(my_R_RSP),(0UL),(0UL),(48UL)); - (my_as_modrm)(((my_c)->my_as),(my_OP_LOAD),(my_R_RDI),(my_R_RSP),(0UL),(0UL),(56UL)); - (my_as_modrm)(((my_c)->my_as),(my_OP_LOAD),(my_R_R8),(my_R_RSP),(0UL),(0UL),(64UL)); - (my_as_modrm)(((my_c)->my_as),(my_OP_LOAD),(my_R_R9),(my_R_RSP),(0UL),(0UL),(72UL)); - (my_as_modrm)(((my_c)->my_as),(my_OP_LOAD),(my_R_R10),(my_R_RSP),(0UL),(0UL),(80UL)); - (my_as_modrm)(((my_c)->my_as),(my_OP_LOAD),(my_R_R12),(my_R_RSP),(0UL),(0UL),(96UL)); - (my_as_modrm)(((my_c)->my_as),(my_OP_LOAD),(my_R_R13),(my_R_RSP),(0UL),(0UL),(104UL)); - (my_as_modrm)(((my_c)->my_as),(my_OP_LOAD),(my_R_R14),(my_R_RSP),(0UL),(0UL),(112UL)); - (my_as_modrm)(((my_c)->my_as),(my_OP_LOAD),(my_R_R15),(my_R_RSP),(0UL),(0UL),(120UL)); - (my_as_modrm)(((my_c)->my_as),(my_OP_LOAD),(my_R_RCX),(my_R_RSP),(0UL),(0UL),(128UL)); - (my_as_modrm)(((my_c)->my_as),(my_OP_LOAD),(my_R_R11),(my_R_RSP),(0UL),(0UL),(136UL)); - (my_as_modrm)(((my_c)->my_as),(my_OP_LOAD),(my_R_RSP),(my_R_RSP),(0UL),(0UL),(32UL)); - (my_as_rex)(((my_c)->my_as),(my_OP_SYSRET),(0UL),(0UL),(0UL)); - (my_as_op)(((my_c)->my_as),(my_OP_SYSRET)); } -void( my_emit_store)(struct my_assembler* my_c,struct my_type* my_t){ - (my_as_opr)((my_c),(my_OP_POPR),(my_R_RDI)); - (my_as_opr)((my_c),(my_OP_POPR),(my_R_RAX)); - if ((unsigned long)(((long)((my_t)->my_kind))==((long)(my_TY_BYTE)))) { - (my_as_modrm)((my_c),(my_OP_STOREB),(my_R_RAX),(my_R_RDI),(0UL),(0UL),(0UL)); - } else if ((my_type_isprim)((my_t))) { - (my_as_modrm)((my_c),(my_OP_STORE),(my_R_RAX),(my_R_RDI),(0UL),(0UL),(0UL)); +void( my_fputd)(struct my_file* my_out,unsigned long my_n){ + unsigned long my_a = 0; + if ((unsigned long)(((long)(my_n))<((long)(0UL)))) { + (my_fputc)((my_out),(45)); + (my_a)=((unsigned long)(-(unsigned long)((unsigned long)(((long)(my_n))%((long)(10UL)))))); + (my_n)=((unsigned long)(((long)(my_n))/((long)((unsigned long)(-(unsigned long)(10UL)))))); } else { - (my_die)(((unsigned char *)"invalid store")); + (my_a)=((unsigned long)(((long)(my_n))%((long)(10UL)))); + (my_n)=((unsigned long)(((long)(my_n))/((long)(10UL)))); } - (my_as_opr)((my_c),(my_OP_PUSHR),(my_R_RAX)); + if ((unsigned long)(((long)(my_n))!=((long)(0UL)))) { + (my_fputd)((my_out),(my_n)); + } + (my_fputc)((my_out),((unsigned long)(((unsigned long)(48))+((unsigned long)(my_a))))); } -void( my_emit_str)(struct my_assembler* my_c,unsigned char* my_s){ - struct my_label* my_a = 0; - struct my_label* my_b = 0; +void( my_fputs)(struct my_file* my_f,unsigned char* my_s){ unsigned long my_i = 0; - (my_a)=((my_mklabel)((my_c))); - (my_b)=((my_mklabel)((my_c))); - (my_as_jmp)((my_c),(my_OP_JMP),(my_b)); - (my_fixup_label)((my_c),(my_a)); (my_i)=(0UL); while (1) { if ((unsigned long)(!((my_s)[my_i]))) { break; } - (my_as_emit)((my_c),((unsigned long)(my_s)[my_i])); + (my_fputc)((my_f),((unsigned long)(my_s)[my_i])); (my_i)=((unsigned long)(((unsigned long)(my_i))+((unsigned long)(1UL)))); } - (my_as_emit)((my_c),(0UL)); - (my_as_op)((my_c),(my_OP_NOP)); - (my_as_op)((my_c),(my_OP_NOP)); - (my_as_op)((my_c),(my_OP_NOP)); - (my_as_op)((my_c),(my_OP_NOP)); - (my_as_op)((my_c),(my_OP_NOP)); - (my_as_op)((my_c),(my_OP_NOP)); - (my_as_op)((my_c),(my_OP_NOP)); - (my_as_op)((my_c),(my_OP_NOP)); - (my_fixup_label)((my_c),(my_b)); - (my_emit_ptr)((my_c),(my_a)); -} -void( my_emit_sub)(struct my_assembler* my_c){ - (my_as_opr)((my_c),(my_OP_POPR),(my_R_RAX)); - (my_as_opr)((my_c),(my_OP_POPR),(my_R_RDX)); - (my_as_modrr)((my_c),(my_OP_SUBRM),(my_R_RAX),(my_R_RDX)); - (my_as_opr)((my_c),(my_OP_PUSHR),(my_R_RAX)); } -void( my_emit_syscall)(struct my_assembler* my_c){ - (my_as_modrm)((my_c),(my_OP_LOAD),(my_R_RAX),(my_R_RBP),(0UL),(0UL),(16UL)); - (my_as_modrm)((my_c),(my_OP_LOAD),(my_R_RDI),(my_R_RBP),(0UL),(0UL),(24UL)); - (my_as_modrm)((my_c),(my_OP_LOAD),(my_R_RSI),(my_R_RBP),(0UL),(0UL),(32UL)); - (my_as_modrm)((my_c),(my_OP_LOAD),(my_R_RDX),(my_R_RBP),(0UL),(0UL),(40UL)); - (my_as_modrm)((my_c),(my_OP_LOAD),(my_R_R10),(my_R_RBP),(0UL),(0UL),(48UL)); - (my_as_modrm)((my_c),(my_OP_LOAD),(my_R_R8),(my_R_RBP),(0UL),(0UL),(56UL)); - (my_as_modrm)((my_c),(my_OP_LOAD),(my_R_R9),(my_R_RBP),(0UL),(0UL),(64UL)); - (my_as_op)((my_c),(my_OP_SYSCALL)); - (my_as_opr)((my_c),(my_OP_PUSHR),(my_R_RAX)); +unsigned char*( my_freadall)(struct my_file* my_f,unsigned long* my_size){ + unsigned long my_i = 0; + unsigned long my_cap = 0; + unsigned char* my_ret = 0; + unsigned char* my_tmp = 0; + unsigned long my_ch = 0; + (my_i)=(0UL); + (my_cap)=(0UL); + while (1) { + (my_ch)=((my_fgetc)((my_f))); + if ((unsigned long)(((long)(my_ch))==((long)((unsigned long)(-(unsigned long)(1UL)))))) { + (*(my_size))=(my_i); + return my_ret; + } + if ((unsigned long)(((long)(my_i))==((long)(my_cap)))) { + if ((unsigned long)(((long)(my_cap))==((long)(0UL)))) { + (my_cap)=(4096UL); + (my_ret)=((my_alloc)(((my_f)->my_a),(my_cap))); + } else { + (my_cap)=((unsigned long)(((long)(my_cap))*((long)(2UL)))); + (my_tmp)=((my_alloc)(((my_f)->my_a),(my_cap))); + (my_memcpy)((my_tmp),(my_ret),(my_i)); + (my_free)(((my_f)->my_a),(my_ret)); + (my_ret)=(my_tmp); + } + } + ((my_ret)[my_i])=((unsigned char)my_ch); + (my_i)=((unsigned long)(((unsigned long)(my_i))+((unsigned long)(1UL)))); + } } -void( my_emit_ud)(struct my_assembler* my_c){ - (my_as_op)((my_c),(my_OP_UD2)); +void( my_free)(struct my_alloc* my_a,unsigned char* my_p){ } -void( my_emit_xor)(struct my_assembler* my_c){ - (my_as_opr)((my_c),(my_OP_POPR),(my_R_RAX)); - (my_as_opr)((my_c),(my_OP_POPR),(my_R_RDX)); - (my_as_modrr)((my_c),(my_OP_XORRM),(my_R_RAX),(my_R_RDX)); - (my_as_opr)((my_c),(my_OP_PUSHR),(my_R_RAX)); +void( my_fseek)(struct my_file* my_f,unsigned long my_off){ + ((my_f)->my_r)=(0UL); + ((my_f)->my_w)=(0UL); + ((my_f)->my_eof)=(0UL); + if ((unsigned long)(((long)((my_lseek)(((my_f)->my_fd),(my_off),(0UL))))!=((long)(my_off)))) { + (my_die)(((unsigned char *)"invalid seek")); + } } -void( my_enter)(struct my_peg* my_c,unsigned long my_tag){ - (my_choice)((my_c)); - ((my_c)->my_tag)=(my_tag); +unsigned long( my_fstat)(unsigned long my_fd,unsigned char* my_buf){ + return (my_syscall)((5UL),(my_fd),((unsigned long)my_buf),(0UL),(0UL),(0UL),(0UL)); } -unsigned long( my_exec)(unsigned char* my_cmd,unsigned char** my_argv,unsigned char** my_envp){ - return (my_syscall)((59UL),((unsigned long)my_cmd),((unsigned long)my_argv),((unsigned long)my_envp),(0UL),(0UL),(0UL)); +unsigned long( my_get)(struct my_peg* my_c){ + unsigned long my_ch = 0; + if ((unsigned long)(((long)((my_c)->my_pos))==((long)((my_c)->my_size)))) { + return (unsigned long)(-(unsigned long)(1UL)); + } + (my_ch)=((unsigned long)((my_c)->my_src)[(my_c)->my_pos]); + ((my_c)->my_pos)=((unsigned long)(((unsigned long)((my_c)->my_pos))+((unsigned long)(1UL)))); + ((my_c)->my_col)=((unsigned long)(((unsigned long)((my_c)->my_col))+((unsigned long)(1UL)))); + if ((unsigned long)(((long)(my_ch))==((long)(10)))) { + ((my_c)->my_col)=(1UL); + ((my_c)->my_line)=((unsigned long)(((unsigned long)((my_c)->my_line))+((unsigned long)(1UL)))); + } + if ((unsigned long)(((long)(my_ch))==((long)(0UL)))) { + (my_die)(((unsigned char *)"invalid nul in source")); + } + return my_ch; } -void( my_exit)(unsigned long my_n){ - (my_syscall)((60UL),(my_n),(0UL),(0UL),(0UL),(0UL),(0UL)); +unsigned long( my_getdirents)(unsigned long my_fd,unsigned char* my_buf,unsigned long my_len){ + return (my_syscall)((217UL),(my_fd),((unsigned long)my_buf),(my_len),(0UL),(0UL),(0UL)); } -void( my_fail)(struct my_peg* my_c){ - if ((unsigned long)(((long)((my_c)->my_sp))==((long)(0UL)))) { - (my_die)(((unsigned char *)"fail underflow")); +unsigned long( my_hex2int)(unsigned char* my_s,unsigned long my_len,unsigned long* my_ok){ + unsigned long my_i = 0; + unsigned long my_x = 0; + unsigned long my_d = 0; + (my_x)=(0UL); + (my_i)=(0UL); + while (1) { + if ((unsigned long)(((long)(my_i))==((long)(my_len)))) { + break; } - if ((unsigned long)(((long)((my_c)->my_depth))>((long)((my_c)->my_fail_depth)))) { - ((my_c)->my_fail_depth)=((my_c)->my_depth); - ((my_c)->my_fail_tag)=((my_c)->my_tag); - ((my_c)->my_fail_line)=((my_c)->my_line); - ((my_c)->my_fail_col)=((my_c)->my_col); - ((my_c)->my_fail_literal)=((unsigned char*)0UL); + (my_d)=((unsigned long)(my_s)[my_i]); + if ((unsigned long)(((unsigned long)(((long)(my_d))>=((long)(48))))&&((unsigned long)(((long)(my_d))<=((long)(57)))))) { + (my_d)=((unsigned long)(((unsigned long)(my_d))-((unsigned long)(48)))); + } else if ((unsigned long)(((unsigned long)(((long)(my_d))>=((long)(97))))&&((unsigned long)(((long)(my_d))<=((long)(102)))))) { + (my_d)=((unsigned long)(((unsigned long)((unsigned long)(((unsigned long)(my_d))-((unsigned long)(97)))))+((unsigned long)(10UL)))); + } else if ((unsigned long)(((unsigned long)(((long)(my_d))>=((long)(65))))&&((unsigned long)(((long)(my_d))<=((long)(70)))))) { + (my_d)=((unsigned long)(((unsigned long)((unsigned long)(((unsigned long)(my_d))-((unsigned long)(65)))))+((unsigned long)(10UL)))); + } else { + (*(my_ok))=(0UL); + return 0UL; } - ((my_c)->my_sp)=((unsigned long)(((unsigned long)((my_c)->my_sp))-((unsigned long)(1UL)))); - ((my_c)->my_pos)=((((my_c)->my_stack)[(my_c)->my_sp]).my_pos); - ((my_c)->my_depth)=((((my_c)->my_stack)[(my_c)->my_sp]).my_depth); - ((my_c)->my_op)=((((my_c)->my_stack)[(my_c)->my_sp]).my_op); - ((my_c)->my_tag)=((((my_c)->my_stack)[(my_c)->my_sp]).my_tag); - ((my_c)->my_line)=((((my_c)->my_stack)[(my_c)->my_sp]).my_line); - ((my_c)->my_col)=((((my_c)->my_stack)[(my_c)->my_sp]).my_col); -} -void( my_fclose)(struct my_file* my_f){ - (my_fflush)((my_f)); - if ((unsigned long)(((long)((my_close)(((my_f)->my_fd))))!=((long)(0UL)))) { - (my_die)(((unsigned char *)"write failed")); + (my_x)=((unsigned long)(((long)(my_x))*((long)(16UL)))); + (my_x)=((unsigned long)(((unsigned long)(my_x))+((unsigned long)(my_d)))); + (my_i)=((unsigned long)(((unsigned long)(my_i))+((unsigned long)(1UL)))); + if ((unsigned long)(((long)(my_x))>((long)(2147483647UL)))) { + (*(my_ok))=(0UL); + return 0UL; } - (my_free)(((my_f)->my_a),((my_f)->my_buf)); - (my_free)(((my_f)->my_a),((unsigned char*)my_f)); + } + (*(my_ok))=(1UL); + return my_x; } -unsigned long( my_fdgetc)(unsigned long my_fd){ - unsigned char my_b = 0; - unsigned long my_ret = 0; - (my_ret)=((my_read)((my_fd),(&(my_b)),(1UL))); - if ((unsigned long)(((long)(my_ret))==((long)(1UL)))) { - return (unsigned long)my_b; - } else if ((unsigned long)(((long)(my_ret))==((long)(0UL)))) { - return (unsigned long)(-(unsigned long)(1UL)); +unsigned long( my_hexdig)(unsigned long my_ch,unsigned long* my_ok){ + if ((unsigned long)(((unsigned long)(((long)(my_ch))>=((long)(48))))&&((unsigned long)(((long)(my_ch))<=((long)(57)))))) { + (*(my_ok))=(1UL); + return (unsigned long)(((unsigned long)(my_ch))-((unsigned long)(48))); + } else if ((unsigned long)(((unsigned long)(((long)(my_ch))>=((long)(65))))&&((unsigned long)(((long)(my_ch))<=((long)(70)))))) { + (*(my_ok))=(1UL); + return (unsigned long)(((unsigned long)((unsigned long)(((unsigned long)(my_ch))-((unsigned long)(70)))))+((unsigned long)(10UL))); + } else if ((unsigned long)(((unsigned long)(((long)(my_ch))>=((long)(97))))&&((unsigned long)(((long)(my_ch))<=((long)(102)))))) { + (*(my_ok))=(1UL); + return (unsigned long)(((unsigned long)((unsigned long)(((unsigned long)(my_ch))-((unsigned long)(97)))))+((unsigned long)(10UL))); } else { - (my_exit)((3UL)); + (*(my_ok))=(0UL); + return 0UL; } } -void( my_fdputc)(unsigned long my_fd,unsigned long my_ch){ - unsigned char my_b = 0; - unsigned long my_ret = 0; - (my_b)=((unsigned char)my_ch); - (my_ret)=((my_write)((my_fd),(&(my_b)),(1UL))); - if ((unsigned long)(((long)(my_ret))!=((long)(1UL)))) { - (my_exit)((3UL)); +unsigned long( my_hoist_locals)(struct my_compiler* my_c,struct my_decl* my_d,struct my_node* my_n,unsigned long my_offset){ + unsigned long my_kind = 0; + unsigned char* my_name = 0; + struct my_type* my_t = 0; + struct my_decl* my_v = 0; + if ((unsigned long)(!(my_n))) { + return my_offset; + } + (my_kind)=((my_n)->my_kind); + if ((unsigned long)(((long)(my_kind))==((long)(my_N_CONDLIST)))) { + while (1) { + if ((unsigned long)(!(my_n))) { + return my_offset; + } + (my_hoist_locals)((my_c),(my_d),(((my_n)->my_a)->my_b),(my_offset)); + (my_n)=((my_n)->my_b); + } + } else if ((unsigned long)(((long)(my_kind))==((long)(my_N_STMTLIST)))) { + while (1) { + if ((unsigned long)(!(my_n))) { + return my_offset; + } + (my_offset)=((my_hoist_locals)((my_c),(my_d),((my_n)->my_a),(my_offset))); + (my_n)=((my_n)->my_b); + } + } else if ((unsigned long)(((long)(my_kind))==((long)(my_N_LOOP)))) { + return (my_hoist_locals)((my_c),(my_d),((my_n)->my_a),(my_offset)); + } else if ((unsigned long)(((long)(my_kind))==((long)(my_N_LABEL)))) { + (my_name)=(((my_n)->my_a)->my_s); + (my_v)=((my_find)((my_c),((my_d)->my_name),(my_name),(1UL))); + if ((my_v)->my_goto_defined) { + (my_cdie)((my_c),((unsigned char *)"duplicate goto")); + } + ((my_v)->my_goto_defined)=(1UL); + return my_offset; + } else if ((unsigned long)(((long)(my_kind))!=((long)(my_N_VARDECL)))) { + return my_offset; + } + (my_name)=(((my_n)->my_a)->my_s); + (my_t)=((my_prototype)((my_c),((my_n)->my_b))); + ((my_n)->my_t)=(my_t); + (my_v)=((my_find)((my_c),((my_d)->my_name),(my_name),(1UL))); + if ((my_v)->my_var_defined) { + (my_cdie)((my_c),((unsigned char *)"duplicate variable")); } + ((my_v)->my_var_type)=(my_t); + ((my_v)->my_var_defined)=(1UL); + (my_offset)=((unsigned long)(((unsigned long)(my_offset))+((unsigned long)((my_type_sizeof)((my_c),(my_t)))))); + ((my_v)->my_var_offset)=((unsigned long)(-(unsigned long)(my_offset))); + return my_offset; } -void( my_fdputd)(unsigned long my_fd,unsigned long my_n){ - unsigned long my_a = 0; - if ((unsigned long)(((long)(my_n))<((long)(0UL)))) { - (my_fdputc)((my_fd),(45)); - (my_a)=((unsigned long)(-(unsigned long)((unsigned long)(((long)(my_n))%((long)(10UL)))))); - (my_n)=((unsigned long)(((long)(my_n))/((long)((unsigned long)(-(unsigned long)(10UL)))))); - } else { - (my_a)=((unsigned long)(((long)(my_n))%((long)(10UL)))); - (my_n)=((unsigned long)(((long)(my_n))/((long)(10UL)))); +void( my_layout_struct)(struct my_compiler* my_c,struct my_decl* my_d){ + struct my_node* my_m = 0; + unsigned long my_offset = 0; + unsigned char* my_name = 0; + struct my_decl* my_md = 0; + struct my_type* my_t = 0; + if ((my_d)->my_struct_layout_done) { + if ((unsigned long)(((long)((my_d)->my_struct_layout_done))==((long)(2UL)))) { + (my_cdie)((my_c),((unsigned char *)"circular struct definition")); } - if ((unsigned long)(((long)(my_n))!=((long)(0UL)))) { - (my_fdputd)((my_fd),(my_n)); + return; } - (my_fdputc)((my_fd),((unsigned long)(((unsigned long)(48))+((unsigned long)(my_a))))); -} -void( my_fdputh)(unsigned long my_fd,unsigned long my_n){ - unsigned long my_c = 0; - unsigned long my_r = 0; - (my_r)=(0UL); + ((my_d)->my_struct_layout_done)=(2UL); + (my_m)=(((my_d)->my_struct_def)->my_b); + (my_offset)=(0UL); while (1) { - if ((unsigned long)(((long)(my_n))==((long)(0UL)))) { + if ((unsigned long)(!(my_m))) { break; } - (my_r)=((unsigned long)(((unsigned long)((unsigned long)(((unsigned long)(my_r))<<((unsigned long)(4UL)))))+((unsigned long)((unsigned long)(((unsigned long)(my_n))&((unsigned long)(15UL))))))); - (my_n)=((unsigned long)(((unsigned long)(my_n))>>((unsigned long)(4UL)))); + ((my_c)->my_filename)=(((my_m)->my_a)->my_filename); + ((my_c)->my_lineno)=(((my_m)->my_a)->my_lineno); + ((my_c)->my_colno)=(((my_m)->my_a)->my_colno); + (my_name)=((((my_m)->my_a)->my_a)->my_s); + (my_t)=((my_prototype)((my_c),(((my_m)->my_a)->my_b))); + (my_md)=((my_find)((my_c),((my_d)->my_name),(my_name),(1UL))); + if ((my_d)->my_member_defined) { + (my_cdie)((my_c),((unsigned char *)"duplicate member")); } - (my_n)=(my_r); - while (1) { - (my_c)=((unsigned long)(((unsigned long)(my_n))&((unsigned long)(15UL)))); - (my_n)=((unsigned long)(((unsigned long)(my_n))>>((unsigned long)(4UL)))); - if ((unsigned long)(((long)(my_c))<((long)(10UL)))) { - (my_fdputc)((my_fd),((unsigned long)(((unsigned long)(my_c))+((unsigned long)(48))))); - } else { - (my_fdputc)((my_fd),((unsigned long)(((unsigned long)(my_c))+((unsigned long)((unsigned long)(((unsigned long)(97))-((unsigned long)(10UL)))))))); + ((my_md)->my_member_defined)=(1UL); + ((my_md)->my_member_type)=(my_t); + ((my_md)->my_member_offset)=(my_offset); + ((my_md)->my_member_def)=(my_m); + (my_offset)=((unsigned long)(((unsigned long)(my_offset))+((unsigned long)((my_type_sizeof)((my_c),(my_t)))))); + (my_m)=((my_m)->my_b); } - if ((unsigned long)(((long)(my_n))==((long)(0UL)))) { - break; + ((my_d)->my_struct_size)=(my_offset); + ((my_d)->my_struct_layout_done)=(1UL); +} +void( my_leave)(struct my_peg* my_c,unsigned long my_tag){ + unsigned long my_nargs = 0; + unsigned long my_start = 0; + unsigned long my_line = 0; + unsigned long my_col = 0; + unsigned long my_end = 0; + unsigned char* my_tmp = 0; + (my_commit)((my_c)); + ((my_c)->my_fail_depth)=(0UL); + (my_nargs)=((unsigned long)(((unsigned long)((my_c)->my_depth))-((unsigned long)((((my_c)->my_stack)[(my_c)->my_sp]).my_depth)))); + (my_line)=((((my_c)->my_stack)[(my_c)->my_sp]).my_line); + (my_col)=((((my_c)->my_stack)[(my_c)->my_sp]).my_col); + (my_start)=((((my_c)->my_stack)[(my_c)->my_sp]).my_pos); + (my_end)=((my_c)->my_pos); + if ((unsigned long)(((long)((my_c)->my_op))==((long)((my_c)->my_cap)))) { + if ((unsigned long)(((long)((my_c)->my_cap))==((long)(0UL)))) { + ((my_c)->my_cap)=(1024UL); + ((my_c)->my_out)=((struct my_peg_op*)(my_alloc)(((my_c)->my_a),((unsigned long)(((long)((my_c)->my_cap))*((long)(48UL)))))); + } else { + ((my_c)->my_cap)=((unsigned long)(((long)((my_c)->my_cap))*((long)(2UL)))); + (my_tmp)=((my_alloc)(((my_c)->my_a),((unsigned long)(((long)((my_c)->my_cap))*((long)(48UL)))))); + (my_memcpy)((my_tmp),((unsigned char*)(my_c)->my_out),((unsigned long)(((long)((my_c)->my_op))*((long)(48UL))))); + (my_free)(((my_c)->my_a),((unsigned char*)(my_c)->my_out)); + ((my_c)->my_out)=((struct my_peg_op*)my_tmp); } } + ((((my_c)->my_out)[(my_c)->my_op]).my_tag)=(my_tag); + ((((my_c)->my_out)[(my_c)->my_op]).my_nargs)=(my_nargs); + ((((my_c)->my_out)[(my_c)->my_op]).my_start)=(my_start); + ((((my_c)->my_out)[(my_c)->my_op]).my_end)=(my_end); + ((((my_c)->my_out)[(my_c)->my_op]).my_line)=(my_line); + ((((my_c)->my_out)[(my_c)->my_op]).my_col)=(my_col); + ((my_c)->my_op)=((unsigned long)(((unsigned long)((my_c)->my_op))+((unsigned long)(1UL)))); + ((my_c)->my_depth)=((unsigned long)(((unsigned long)((unsigned long)(((unsigned long)((my_c)->my_depth))-((unsigned long)(my_nargs)))))+((unsigned long)(1UL)))); } -void( my_fdputh16)(unsigned long my_fd,unsigned long my_x){ - (my_fdputhn)((my_fd),(my_x),(16UL)); -} -void( my_fdputh32)(unsigned long my_fd,unsigned long my_x){ - (my_fdputhn)((my_fd),(my_x),(32UL)); -} -void( my_fdputh64)(unsigned long my_fd,unsigned long my_x){ - (my_fdputhn)((my_fd),(my_x),(64UL)); -} -void( my_fdputh8)(unsigned long my_fd,unsigned long my_x){ - (my_fdputhn)((my_fd),(my_x),(8UL)); +unsigned long( my_listen)(unsigned long my_fd,unsigned long my_backlog){ + return (my_syscall)((50UL),(my_fd),(my_backlog),(0UL),(0UL),(0UL),(0UL)); } -void( my_fdputhn)(unsigned long my_fd,unsigned long my_x,unsigned long my_d){ +unsigned long( my_literal)(struct my_peg* my_c,unsigned char* my_s){ + unsigned long my_i = 0; + unsigned long my_ch = 0; + (my_i)=(0UL); while (1) { - if ((unsigned long)(((long)(my_d))==((long)(0UL)))) { + if ((unsigned long)(!((my_s)[my_i]))) { break; } - (my_d)=((unsigned long)(((unsigned long)(my_d))-((unsigned long)(4UL)))); - (my_fdputc)((my_fd),((unsigned long)((unsigned char *)"0123456789abcdef")[(unsigned long)(((unsigned long)((unsigned long)(((unsigned long)(my_x))>>((unsigned long)(my_d)))))&((unsigned long)(15UL)))])); + (my_ch)=((my_get)((my_c))); + if ((unsigned long)(((long)(my_ch))!=((long)((unsigned long)(my_s)[my_i])))) { + (my_fail)((my_c)); + ((my_c)->my_fail_literal)=(my_s); + return 0UL; + } + (my_i)=((unsigned long)(((unsigned long)(my_i))+((unsigned long)(1UL)))); } + return 1UL; } -void( my_fdputs)(unsigned long my_fd,unsigned char* my_msg){ - unsigned long my_len = 0; - unsigned long my_ret = 0; - unsigned long my_off = 0; - (my_len)=((my_strlen)((my_msg))); - (my_off)=(0UL); +unsigned long( my_lseek)(unsigned long my_fd,unsigned long my_off,unsigned long my_whence){ + return (my_syscall)((8UL),(my_fd),(my_off),(my_whence),(0UL),(0UL),(0UL)); +} +void( my_main)(unsigned long my_argc,unsigned char** my_argv,unsigned char** my_envp){ + struct my_alloc my_a = {0}; + struct my_compiler* my_c = 0; + struct my_node* my_p = 0; + struct my_decl* my_d = 0; + struct my_label* my_start = 0; + struct my_label* my_kstart = 0; + unsigned long my_i = 0; + unsigned long my_show = 0; + unsigned char* my_filename = 0; + struct my_file* my_err = 0; + struct my_name_node* my_input = 0; + struct my_name_node* my_tmp = 0; + struct my_name_node** my_link = 0; + struct my_peg_compiler* my_peg = 0; + (my_link)=(&(my_input)); + (my_setup_alloc)((&(my_a))); + (my_c)=((my_comp_setup)((&(my_a)))); + (my_show)=(0UL); + (my_filename)=((unsigned char *)"a.out"); + (my_i)=(1UL); while (1) { - if ((unsigned long)(((long)(my_off))==((long)(my_len)))) { + if ((unsigned long)(((long)(my_i))>=((long)(my_argc)))) { break; } - (my_ret)=((my_write)((my_fd),(my_msg),((unsigned long)(((unsigned long)(my_len))-((unsigned long)(my_off)))))); - if ((unsigned long)(((long)(my_ret))<((long)(0UL)))) { - (my_exit)((3UL)); + if ((unsigned long)(!((my_strcmp)(((my_argv)[my_i]),((unsigned char *)"-o"))))) { + (my_i)=((unsigned long)(((unsigned long)(my_i))+((unsigned long)(1UL)))); + if ((unsigned long)(((long)(my_i))>=((long)(my_argc)))) { + (my_die)(((unsigned char *)"invalid -o at end of argument list")); } - (my_off)=((unsigned long)(((unsigned long)(my_off))+((unsigned long)(my_ret)))); + (my_filename)=((my_argv)[my_i]); + (my_i)=((unsigned long)(((unsigned long)(my_i))+((unsigned long)(1UL)))); + continue; } -} -void( my_fdxxd)(unsigned long my_fd,unsigned char* my_data,unsigned long my_len){ - unsigned long my_i = 0; - unsigned long my_j = 0; - while (1) { - if ((unsigned long)(((long)(my_i))>=((long)(my_len)))) { - break; + if ((unsigned long)(!((my_strcmp)(((my_argv)[my_i]),((unsigned char *)"-fdump"))))) { + (my_i)=((unsigned long)(((unsigned long)(my_i))+((unsigned long)(1UL)))); + (my_show)=(1UL); + continue; } - (my_fdputh32)((my_fd),(my_i)); - (my_fdputc)((my_fd),(58)); - (my_fdputc)((my_fd),(32)); - (my_j)=(0UL); - while (1) { - if ((unsigned long)(((long)(my_j))==((long)(16UL)))) { - break; + if ((unsigned long)(!((my_strcmp)(((my_argv)[my_i]),((unsigned char *)"-C"))))) { + ((my_c)->my_do_cout)=(1UL); + (my_i)=((unsigned long)(((unsigned long)(my_i))+((unsigned long)(1UL)))); + continue; } - if ((unsigned long)(((long)((unsigned long)(((unsigned long)(my_i))+((unsigned long)(my_j)))))<((long)(my_len)))) { - (my_fdputh8)((my_fd),((unsigned long)(my_data)[(unsigned long)(((unsigned long)(my_i))+((unsigned long)(my_j)))])); - } else { - (my_fdputc)((my_fd),(32)); - (my_fdputc)((my_fd),(32)); + if ((unsigned long)(!((my_strcmp)(((my_argv)[my_i]),((unsigned char *)"-P"))))) { + (my_i)=((unsigned long)(((unsigned long)(my_i))+((unsigned long)(1UL)))); + if ((unsigned long)(((long)(my_i))>=((long)(my_argc)))) { + (my_die)(((unsigned char *)"invalid -P at end of argument list")); } - if ((unsigned long)(((long)((unsigned long)(((unsigned long)((unsigned long)(((unsigned long)(my_i))+((unsigned long)(my_j)))))+((unsigned long)(1UL)))))<((long)(my_len)))) { - (my_fdputh8)((my_fd),((unsigned long)(my_data)[(unsigned long)(((unsigned long)((unsigned long)(((unsigned long)(my_i))+((unsigned long)(my_j)))))+((unsigned long)(1UL)))])); - } else { - (my_fdputc)((my_fd),(32)); - (my_fdputc)((my_fd),(32)); + (my_peg)=((my_setup_peg)((&(my_a)),((my_argv)[my_i]))); + (my_i)=((unsigned long)(((unsigned long)(my_i))+((unsigned long)(1UL)))); + continue; } - (my_fdputc)((my_fd),(32)); - (my_j)=((unsigned long)(((unsigned long)(my_j))+((unsigned long)(2UL)))); + if ((unsigned long)(((long)(((my_argv)[my_i])[0UL]))==((long)((unsigned char)45)))) { + (my_die)(((unsigned char *)"invalid argument")); } - (my_fdputc)((my_fd),(32)); - (my_j)=(0UL); - while (1) { - if ((unsigned long)(((unsigned long)(((long)(my_j))==((long)(16UL))))||((unsigned long)(((long)((unsigned long)(((unsigned long)(my_i))+((unsigned long)(my_j)))))>=((long)(my_len)))))) { - break; + (my_tmp)=((struct my_name_node*)(my_alloc)((&(my_a)),(16UL))); + ((my_tmp)->my_next)=((struct my_name_node*)0UL); + ((my_tmp)->my_name)=((my_argv)[my_i]); + (*(my_link))=(my_tmp); + (my_link)=(&((my_tmp)->my_next)); + (my_i)=((unsigned long)(((unsigned long)(my_i))+((unsigned long)(1UL)))); } - if ((unsigned long)(((unsigned long)(((long)((unsigned long)(my_data)[(unsigned long)(((unsigned long)(my_i))+((unsigned long)(my_j)))]))>=((long)(32UL))))&&((unsigned long)(((long)((unsigned long)(my_data)[(unsigned long)(((unsigned long)(my_i))+((unsigned long)(my_j)))]))<((long)(128UL)))))) { - (my_fdputc)((my_fd),((unsigned long)(my_data)[(unsigned long)(((unsigned long)(my_i))+((unsigned long)(my_j)))])); - } else { - (my_fdputc)((my_fd),(46)); + if (my_peg) { + if ((unsigned long)(!(my_input))) { + (my_die)(((unsigned char *)"expected input")); } - (my_j)=((unsigned long)(((unsigned long)(my_j))+((unsigned long)(1UL)))); + (my_peg_open_output)((my_peg),(my_filename)); + (my_tmp)=(my_input); + while (1) { + if ((unsigned long)(!(my_tmp))) { + break; } - (my_fdputc)((my_fd),(10)); - (my_i)=((unsigned long)(((unsigned long)(my_i))+((unsigned long)(16UL)))); + (my_peg_compile)((my_peg),((my_tmp)->my_name)); + (my_tmp)=((my_tmp)->my_next); } -} -void( my_ffill)(struct my_file* my_f){ - unsigned long my_ret = 0; - if ((my_f)->my_eof) { return; } - if ((unsigned long)(((long)((my_f)->my_r))==((long)((my_f)->my_w)))) { - ((my_f)->my_r)=(0UL); - ((my_f)->my_w)=(0UL); - } - if ((unsigned long)(((long)((my_f)->my_w))==((long)((my_f)->my_cap)))) { - (my_die)(((unsigned char *)"out of space")); + (my_tmp)=(my_input); + while (1) { + if ((unsigned long)(!(my_tmp))) { + break; } - (my_ret)=((my_read)(((my_f)->my_fd),(&(((my_f)->my_buf)[(my_f)->my_w])),((unsigned long)(((unsigned long)((my_f)->my_cap))-((unsigned long)((my_f)->my_w)))))); - if ((unsigned long)(((long)(my_ret))<((long)(0UL)))) { - (my_die)(((unsigned char *)"read failed")); + (my_p)=((my_concat_program)((my_p),((my_parse)(((my_c)->my_p),((my_tmp)->my_name))))); + (my_tmp)=((my_tmp)->my_next); } - if ((unsigned long)(((long)(my_ret))==((long)(0UL)))) { - ((my_f)->my_eof)=(1UL); + if (my_show) { + (my_err)=((my_fopen)((2UL),(&(my_a)))); + (my_show_node)((my_err),(my_p)); + (my_fflush)((my_err)); + return; } - ((my_f)->my_w)=((unsigned long)(((unsigned long)((my_f)->my_w))+((unsigned long)(my_ret)))); -} -void( my_fflush)(struct my_file* my_f){ - unsigned long my_ret = 0; - while (1) { - if ((unsigned long)(((long)((my_f)->my_r))==((long)((my_f)->my_w)))) { - ((my_f)->my_r)=(0UL); - ((my_f)->my_w)=(0UL); + (my_compile)((my_c),(my_p)); + if ((my_c)->my_do_cout) { + (my_open_coutput)((my_c),(my_filename)); + (my_ctranslate)((my_c)); return; } - (my_ret)=((my_write)(((my_f)->my_fd),(&(((my_f)->my_buf)[(my_f)->my_r])),((unsigned long)(((unsigned long)((my_f)->my_w))-((unsigned long)((my_f)->my_r)))))); - if ((unsigned long)(((long)(my_ret))<((long)(0UL)))) { - (my_die)(((unsigned char *)"write failed")); + (my_emit_builtin)((my_c)); + (my_start)=((struct my_label*)0UL); + (my_d)=((my_find)((my_c),((unsigned char *)"_start"),((unsigned char*)0UL),(0UL))); + if ((unsigned long)((my_d)&&((my_d)->my_func_defined))) { + (my_start)=((my_d)->my_func_label); } - ((my_f)->my_r)=((unsigned long)(((unsigned long)((my_f)->my_r))+((unsigned long)(my_ret)))); + (my_kstart)=((struct my_label*)0UL); + (my_d)=((my_find)((my_c),((unsigned char *)"_kstart"),((unsigned char*)0UL),(0UL))); + if ((unsigned long)((my_d)&&((my_d)->my_func_defined))) { + (my_kstart)=((my_d)->my_func_label); } + (my_open_output)(((my_c)->my_as),(my_filename)); + (my_writeout)(((my_c)->my_as),(my_start),(my_kstart)); } -unsigned long( my_fgetc)(struct my_file* my_f){ - unsigned long my_ch = 0; - if ((unsigned long)(((long)((my_f)->my_r))==((long)((my_f)->my_w)))) { - (my_ffill)((my_f)); +unsigned long( my_memcmp)(unsigned char* my_a,unsigned char* my_b,unsigned long my_n){ + unsigned long my_i = 0; + (my_i)=(0UL); + while (1) { + if ((unsigned long)(((long)(my_i))==((long)(my_n)))) { + return 0UL; } - if ((my_f)->my_eof) { + if ((unsigned long)(((long)((my_a)[my_i]))>((long)((my_b)[my_i])))) { + return 1UL; + } + if ((unsigned long)(((long)((my_a)[my_i]))<((long)((my_b)[my_i])))) { return (unsigned long)(-(unsigned long)(1UL)); } - (my_ch)=((unsigned long)((my_f)->my_buf)[(my_f)->my_r]); - ((my_f)->my_r)=((unsigned long)(((unsigned long)((my_f)->my_r))+((unsigned long)(1UL)))); - return my_ch; + (my_i)=((unsigned long)(((unsigned long)(my_i))+((unsigned long)(1UL)))); + } } -unsigned long( my_fgets)(struct my_file* my_f,unsigned char* my_buf,unsigned long my_len){ +void( my_memcpy)(unsigned char* my_dest,unsigned char* my_src,unsigned long my_size){ unsigned long my_i = 0; - unsigned long my_c = 0; - if ((unsigned long)(((long)(my_len))==((long)(1UL)))) { - ((my_buf)[0UL])=((unsigned char)0UL); - return 0UL; + if ((unsigned long)(((long)(my_size))<((long)(0UL)))) { + return; } + if ((unsigned long)(((long)(my_src))>((long)(my_dest)))) { (my_i)=(0UL); while (1) { - if ((unsigned long)(((long)((unsigned long)(((unsigned long)(my_i))+((unsigned long)(1UL)))))==((long)(my_len)))) { - ((my_buf)[my_i])=((unsigned char)0UL); - return my_i; - } - (my_c)=((my_fgetc)((my_f))); - if ((unsigned long)(((unsigned long)(((long)(my_c))==((long)((unsigned long)(-(unsigned long)(1UL))))))||((unsigned long)(((long)(my_c))==((long)(10)))))) { - ((my_buf)[my_i])=((unsigned char)0UL); - return my_i; + if ((unsigned long)(((long)(my_i))==((long)(my_size)))) { + break; } - ((my_buf)[my_i])=((unsigned char)my_c); + ((my_dest)[my_i])=((my_src)[my_i]); (my_i)=((unsigned long)(((unsigned long)(my_i))+((unsigned long)(1UL)))); } -} -void( my_fillpos)(struct my_parser* my_c,struct my_node* my_n){ -} -struct my_decl*( my_find)(struct my_compiler* my_c,unsigned char* my_name,unsigned char* my_member_name,unsigned long my_make){ - struct my_decl* my_p = 0; - struct my_decl* my_d = 0; - struct my_decl** my_link = 0; - unsigned long my_dir = 0; - (my_p)=((struct my_decl*)0UL); - (my_link)=(&((my_c)->my_decls)); + } else if ((unsigned long)(((long)(my_src))<((long)(my_dest)))) { + (my_i)=(my_size); while (1) { - (my_d)=(*(my_link)); - if ((unsigned long)(!(my_d))) { + if ((unsigned long)(((long)(my_i))==((long)(0UL)))) { break; } - (my_dir)=((my_strcmp)((my_name),((my_d)->my_name))); - if ((unsigned long)(((long)(my_dir))==((long)(0UL)))) { - if ((unsigned long)(((unsigned long)(!(my_member_name)))&&((unsigned long)(!((my_d)->my_member_name))))) { - (my_dir)=(0UL); - } else if ((unsigned long)(!(my_member_name))) { - (my_dir)=((unsigned long)(-(unsigned long)(1UL))); - } else if ((unsigned long)(!((my_d)->my_member_name))) { - (my_dir)=(1UL); - } else { - (my_dir)=((my_strcmp)((my_member_name),((my_d)->my_member_name))); + (my_i)=((unsigned long)(((unsigned long)(my_i))-((unsigned long)(1UL)))); + ((my_dest)[my_i])=((my_src)[my_i]); } } - if ((unsigned long)(((long)(my_dir))<((long)(0UL)))) { - (my_p)=(my_d); - (my_link)=(&((my_d)->my_l)); - } else if ((unsigned long)(((long)(my_dir))>((long)(0UL)))) { - (my_p)=(my_d); - (my_link)=(&((my_d)->my_r)); - } else { - return my_d; +} +void( my_memset)(unsigned char* my_dest,unsigned long my_c,unsigned long my_size){ + unsigned long my_i = 0; + if ((unsigned long)(((long)(my_size))<((long)(0UL)))) { + return; } + (my_i)=(0UL); + while (1) { + if ((unsigned long)(((long)(my_i))==((long)(my_size)))) { + break; } - if ((unsigned long)(!(my_make))) { - return (struct my_decl*)0UL; + ((my_dest)[my_i])=((unsigned char)my_c); + (my_i)=((unsigned long)(((unsigned long)(my_i))+((unsigned long)(1UL)))); } - (my_d)=((struct my_decl*)(my_alloc)(((my_c)->my_a),(216UL))); - ((my_d)->my_name)=(my_name); - ((my_d)->my_member_name)=(my_member_name); - ((my_d)->my_p)=(my_p); - ((my_d)->my_l)=((struct my_decl*)0UL); - ((my_d)->my_r)=((struct my_decl*)0UL); - ((my_d)->my_func_defined)=(0UL); - ((my_d)->my_func_type)=((struct my_type*)0UL); - ((my_d)->my_func_label)=((my_mklabel)(((my_c)->my_as))); - ((my_d)->my_func_def)=((struct my_node*)0UL); - ((my_d)->my_struct_defined)=(0UL); - ((my_d)->my_struct_size)=(0UL); - ((my_d)->my_struct_layout_done)=(0UL); - ((my_d)->my_struct_def)=((struct my_node*)0UL); - ((my_d)->my_member_defined)=(0UL); - ((my_d)->my_member_type)=((struct my_type*)0UL); - ((my_d)->my_member_offset)=(0UL); - ((my_d)->my_member_def)=((struct my_node*)0UL); - ((my_d)->my_enum_defined)=(0UL); - ((my_d)->my_enum_value)=(0UL); - ((my_d)->my_enum_def)=((struct my_node*)0UL); - ((my_d)->my_var_defined)=(0UL); - ((my_d)->my_var_type)=((struct my_type*)0UL); - ((my_d)->my_var_offset)=(0UL); - ((my_d)->my_var_def)=((struct my_node*)0UL); - ((my_d)->my_goto_defined)=(0UL); - ((my_d)->my_goto_label)=((my_mklabel)(((my_c)->my_as))); - (*(my_link))=(my_d); - return my_d; } -struct my_decl*( my_first_decl)(struct my_compiler* my_c){ - struct my_decl* my_d = 0; - (my_d)=((my_c)->my_decls); +unsigned long( my_mkdir)(unsigned char* my_name){ + return (my_syscall)((83UL),((unsigned long)my_name),(0UL),(0UL),(0UL),(0UL),(0UL)); +} +struct my_label*( my_mklabel)(struct my_assembler* my_c){ + struct my_label* my_l = 0; + (my_l)=((struct my_label*)(my_alloc)(((my_c)->my_a),(24UL))); + ((my_l)->my_fix)=((struct my_fixup*)0UL); + ((my_l)->my_at)=(0UL); + ((my_l)->my_fixed)=(0UL); + return my_l; +} +struct my_node*( my_mknode)(struct my_parser* my_c,unsigned long my_kind,struct my_node* my_a,struct my_node* my_b){ + struct my_node* my_ret = 0; + (my_ret)=((struct my_node*)(my_alloc)(((my_c)->my_a),(72UL))); + ((my_ret)->my_kind)=(my_kind); + ((my_ret)->my_a)=(my_a); + ((my_ret)->my_b)=(my_b); + ((my_ret)->my_filename)=((unsigned char*)0UL); + ((my_ret)->my_lineno)=(0UL); + ((my_ret)->my_colno)=(0UL); + ((my_ret)->my_n)=(0UL); + ((my_ret)->my_s)=((unsigned char*)0UL); + ((my_ret)->my_t)=((struct my_type*)0UL); + (my_fillpos)((my_c),(my_ret)); + return my_ret; +} +struct my_node*( my_mknode0)(struct my_parser* my_c,unsigned long my_kind){ + return (my_mknode)((my_c),(my_kind),((struct my_node*)0UL),((struct my_node*)0UL)); +} +struct my_node*( my_mknode1)(struct my_parser* my_c,unsigned long my_kind,struct my_node* my_a){ + return (my_mknode)((my_c),(my_kind),(my_a),((struct my_node*)0UL)); +} +struct my_type*( my_mktype)(struct my_compiler* my_c,unsigned long my_kind,struct my_type* my_a,struct my_type* my_b,struct my_decl* my_st){ + struct my_type* my_t = 0; + (my_t)=((struct my_type*)(my_alloc)(((my_c)->my_a),(32UL))); + ((my_t)->my_kind)=(my_kind); + ((my_t)->my_st)=(my_st); + ((my_t)->my_val)=(my_a); + ((my_t)->my_arg)=(my_b); + return my_t; +} +struct my_type*( my_mktype0)(struct my_compiler* my_c,unsigned long my_kind){ + return (my_mktype)((my_c),(my_kind),((struct my_type*)0UL),((struct my_type*)0UL),((struct my_decl*)0UL)); +} +struct my_type*( my_mktype1)(struct my_compiler* my_c,unsigned long my_kind,struct my_type* my_a){ + return (my_mktype)((my_c),(my_kind),(my_a),((struct my_type*)0UL),((struct my_decl*)0UL)); +} +struct my_type*( my_mktype2)(struct my_compiler* my_c,unsigned long my_kind,struct my_type* my_a,struct my_type* my_b){ + return (my_mktype)((my_c),(my_kind),(my_a),(my_b),((struct my_decl*)0UL)); +} +struct my_type*( my_mktype_struct)(struct my_compiler* my_c,struct my_decl* my_st){ + return (my_mktype)((my_c),(my_TY_STRUCT),((struct my_type*)0UL),((struct my_type*)0UL),(my_st)); +} +unsigned long( my_mmap)(unsigned long my_addr,unsigned long my_len,unsigned long my_prot,unsigned long my_flags,unsigned long my_fd,unsigned long my_off){ + return (my_syscall)((9UL),(my_addr),(my_len),(my_prot),(my_flags),(my_fd),(my_off)); +} +unsigned long( my_munmap)(unsigned long my_addr,unsigned long my_len){ + return (my_syscall)((11UL),(my_addr),(my_len),(0UL),(0UL),(0UL),(0UL)); +} +struct my_decl*( my_next_decl)(struct my_compiler* my_c,struct my_decl* my_d){ if ((unsigned long)(!(my_d))) { return (struct my_decl*)0UL; } + if ((my_d)->my_r) { + (my_d)=((my_d)->my_r); while (1) { if ((unsigned long)(!((my_d)->my_l))) { return my_d; } (my_d)=((my_d)->my_l); } -} -void( my_fixup)(struct my_assembler* my_c,unsigned char* my_here,unsigned long my_delta){ - ((my_here)[0UL])=((unsigned char)my_delta); - ((my_here)[1UL])=((unsigned char)(unsigned long)(((unsigned long)(my_delta))>>((unsigned long)(8UL)))); - ((my_here)[2UL])=((unsigned char)(unsigned long)(((unsigned long)(my_delta))>>((unsigned long)(16UL)))); - ((my_here)[3UL])=((unsigned char)(unsigned long)(((unsigned long)(my_delta))>>((unsigned long)(24UL)))); -} -void( my_fixup_label)(struct my_assembler* my_c,struct my_label* my_l){ - struct my_fixup* my_f = 0; - if ((my_l)->my_fixed) { - (my_die)(((unsigned char *)"already fixed")); } - ((my_l)->my_at)=((my_c)->my_at); - ((my_l)->my_fixed)=(1UL); - (my_f)=((my_l)->my_fix); while (1) { - if ((unsigned long)(!(my_f))) { - break; + if ((unsigned long)(!((my_d)->my_p))) { + return (struct my_decl*)0UL; } - (my_fixup)((my_c),((my_f)->my_ptr),((unsigned long)(((unsigned long)((my_l)->my_at))-((unsigned long)((my_f)->my_at))))); - (my_f)=((my_f)->my_next); + if ((unsigned long)(((long)(((my_d)->my_p)->my_l))==((long)(my_d)))) { + return (my_d)->my_p; + } + (my_d)=((my_d)->my_p); } } -void( my_flush_coutput)(struct my_compiler* my_c){ - (my_fflush)(((my_c)->my_cout)); -} -struct my_file*( my_fopen)(unsigned long my_fd,struct my_alloc* my_a){ - struct my_file* my_f = 0; - (my_f)=((struct my_file*)(my_alloc)((my_a),(56UL))); - ((my_f)->my_fd)=(my_fd); - ((my_f)->my_a)=(my_a); - ((my_f)->my_r)=(0UL); - ((my_f)->my_w)=(0UL); - ((my_f)->my_cap)=(4096UL); - ((my_f)->my_eof)=(0UL); - ((my_f)->my_buf)=((my_alloc)((my_a),((my_f)->my_cap))); - return my_f; -} -unsigned long( my_fork)(void){ - return (my_syscall)((57UL),(0UL),(0UL),(0UL),(0UL),(0UL),(0UL)); -} -void( my_fputb)(struct my_file* my_f,unsigned char* my_s,unsigned long my_n){ - unsigned long my_i = 0; - (my_i)=(0UL); - while (1) { - if ((unsigned long)(((long)(my_i))>=((long)(my_n)))) { - break; +unsigned char*( my_node_to_str)(unsigned long my_kind){ + if ((unsigned long)(((long)(my_kind))==((long)(my_N_IDENT)))) { + return (unsigned char *)"N_IDENT"; + } + if ((unsigned long)(((long)(my_kind))==((long)(my_N_NUM)))) { + return (unsigned char *)"N_NUM"; + } + if ((unsigned long)(((long)(my_kind))==((long)(my_N_CHAR)))) { + return (unsigned char *)"N_CHAR"; + } + if ((unsigned long)(((long)(my_kind))==((long)(my_N_STR)))) { + return (unsigned char *)"N_STR"; + } + if ((unsigned long)(((long)(my_kind))==((long)(my_N_STMTLIST)))) { + return (unsigned char *)"N_STMTLIST"; + } + if ((unsigned long)(((long)(my_kind))==((long)(my_N_EXPRLIST)))) { + return (unsigned char *)"N_EXPRLIST"; } - (my_fputc)((my_f),((unsigned long)(my_s)[my_i])); - (my_i)=((unsigned long)(((unsigned long)(my_i))+((unsigned long)(1UL)))); + if ((unsigned long)(((long)(my_kind))==((long)(my_N_CALL)))) { + return (unsigned char *)"N_CALL"; } -} -void( my_fputc)(struct my_file* my_f,unsigned long my_ch){ - if ((unsigned long)(((long)((my_f)->my_w))==((long)((my_f)->my_cap)))) { - (my_fflush)((my_f)); + if ((unsigned long)(((long)(my_kind))==((long)(my_N_DOT)))) { + return (unsigned char *)"N_DOT"; } - (((my_f)->my_buf)[(my_f)->my_w])=((unsigned char)my_ch); - ((my_f)->my_w)=((unsigned long)(((unsigned long)((my_f)->my_w))+((unsigned long)(1UL)))); - if ((unsigned long)(((long)(my_ch))==((long)(10)))) { - (my_fflush)((my_f)); + if ((unsigned long)(((long)(my_kind))==((long)(my_N_ARGLIST)))) { + return (unsigned char *)"N_ARGLIST"; } -} -void( my_fputd)(struct my_file* my_out,unsigned long my_n){ - unsigned long my_a = 0; - if ((unsigned long)(((long)(my_n))<((long)(0UL)))) { - (my_fputc)((my_out),(45)); - (my_a)=((unsigned long)(-(unsigned long)((unsigned long)(((long)(my_n))%((long)(10UL)))))); - (my_n)=((unsigned long)(((long)(my_n))/((long)((unsigned long)(-(unsigned long)(10UL)))))); - } else { - (my_a)=((unsigned long)(((long)(my_n))%((long)(10UL)))); - (my_n)=((unsigned long)(((long)(my_n))/((long)(10UL)))); + if ((unsigned long)(((long)(my_kind))==((long)(my_N_FUNC)))) { + return (unsigned char *)"N_FUNC"; } - if ((unsigned long)(((long)(my_n))!=((long)(0UL)))) { - (my_fputd)((my_out),(my_n)); + if ((unsigned long)(((long)(my_kind))==((long)(my_N_ARGDECL)))) { + return (unsigned char *)"N_ARGDECL"; } - (my_fputc)((my_out),((unsigned long)(((unsigned long)(48))+((unsigned long)(my_a))))); -} -void( my_fputs)(struct my_file* my_f,unsigned char* my_s){ - unsigned long my_i = 0; - (my_i)=(0UL); - while (1) { - if ((unsigned long)(!((my_s)[my_i]))) { - break; + if ((unsigned long)(((long)(my_kind))==((long)(my_N_FUNCDECL)))) { + return (unsigned char *)"N_FUNCDECL"; } - (my_fputc)((my_f),((unsigned long)(my_s)[my_i])); - (my_i)=((unsigned long)(((unsigned long)(my_i))+((unsigned long)(1UL)))); + if ((unsigned long)(((long)(my_kind))==((long)(my_N_PROGRAM)))) { + return (unsigned char *)"N_PROGRAM"; } -} -unsigned char*( my_freadall)(struct my_file* my_f,unsigned long* my_size){ - unsigned long my_i = 0; - unsigned long my_cap = 0; - unsigned char* my_ret = 0; - unsigned char* my_tmp = 0; - unsigned long my_ch = 0; - (my_i)=(0UL); - (my_cap)=(0UL); - while (1) { - (my_ch)=((my_fgetc)((my_f))); - if ((unsigned long)(((long)(my_ch))==((long)((unsigned long)(-(unsigned long)(1UL)))))) { - (*(my_size))=(my_i); - return my_ret; + if ((unsigned long)(((long)(my_kind))==((long)(my_N_FUNCTYPE)))) { + return (unsigned char *)"N_FUNCTYPE"; } - if ((unsigned long)(((long)(my_i))==((long)(my_cap)))) { - if ((unsigned long)(((long)(my_cap))==((long)(0UL)))) { - (my_cap)=(4096UL); - (my_ret)=((my_alloc)(((my_f)->my_a),(my_cap))); - } else { - (my_cap)=((unsigned long)(((long)(my_cap))*((long)(2UL)))); - (my_tmp)=((my_alloc)(((my_f)->my_a),(my_cap))); - (my_memcpy)((my_tmp),(my_ret),(my_i)); - (my_free)(((my_f)->my_a),(my_ret)); - (my_ret)=(my_tmp); + if ((unsigned long)(((long)(my_kind))==((long)(my_N_PTRTYPE)))) { + return (unsigned char *)"N_PTRTYPE"; } + if ((unsigned long)(((long)(my_kind))==((long)(my_N_STRUCT)))) { + return (unsigned char *)"N_STRUCT"; } - ((my_ret)[my_i])=((unsigned char)my_ch); - (my_i)=((unsigned long)(((unsigned long)(my_i))+((unsigned long)(1UL)))); + if ((unsigned long)(((long)(my_kind))==((long)(my_N_MEMBERDECL)))) { + return (unsigned char *)"N_MEMBERDECL"; } -} -void( my_free)(struct my_alloc* my_a,unsigned char* my_p){ -} -void( my_fseek)(struct my_file* my_f,unsigned long my_off){ - ((my_f)->my_r)=(0UL); - ((my_f)->my_w)=(0UL); - ((my_f)->my_eof)=(0UL); - if ((unsigned long)(((long)((my_lseek)(((my_f)->my_fd),(my_off),(0UL))))!=((long)(my_off)))) { - (my_die)(((unsigned char *)"invalid seek")); + if ((unsigned long)(((long)(my_kind))==((long)(my_N_MEMBERLIST)))) { + return (unsigned char *)"N_MEMBERLIST"; } -} -unsigned long( my_fstat)(unsigned long my_fd,unsigned char* my_buf){ - return (my_syscall)((5UL),(my_fd),((unsigned long)my_buf),(0UL),(0UL),(0UL),(0UL)); -} -unsigned long( my_get)(struct my_peg* my_c){ - unsigned long my_ch = 0; - if ((unsigned long)(((long)((my_c)->my_pos))==((long)((my_c)->my_size)))) { - return (unsigned long)(-(unsigned long)(1UL)); + if ((unsigned long)(((long)(my_kind))==((long)(my_N_CONDLIST)))) { + return (unsigned char *)"N_CONDLIST"; } - (my_ch)=((unsigned long)((my_c)->my_src)[(my_c)->my_pos]); - ((my_c)->my_pos)=((unsigned long)(((unsigned long)((my_c)->my_pos))+((unsigned long)(1UL)))); - ((my_c)->my_col)=((unsigned long)(((unsigned long)((my_c)->my_col))+((unsigned long)(1UL)))); - if ((unsigned long)(((long)(my_ch))==((long)(10)))) { - ((my_c)->my_col)=(1UL); - ((my_c)->my_line)=((unsigned long)(((unsigned long)((my_c)->my_line))+((unsigned long)(1UL)))); + if ((unsigned long)(((long)(my_kind))==((long)(my_N_COND)))) { + return (unsigned char *)"N_COND"; } - if ((unsigned long)(((long)(my_ch))==((long)(0UL)))) { - (my_die)(((unsigned char *)"invalid nul in source")); + if ((unsigned long)(((long)(my_kind))==((long)(my_N_ENUM)))) { + return (unsigned char *)"N_ENUM"; } - return my_ch; -} -unsigned long( my_getdirents)(unsigned long my_fd,unsigned char* my_buf,unsigned long my_len){ - return (my_syscall)((217UL),(my_fd),((unsigned long)my_buf),(my_len),(0UL),(0UL),(0UL)); -} -unsigned long( my_hex2int)(unsigned char* my_s,unsigned long my_len,unsigned long* my_ok){ - unsigned long my_i = 0; - unsigned long my_x = 0; - unsigned long my_d = 0; - (my_x)=(0UL); - (my_i)=(0UL); - while (1) { - if ((unsigned long)(((long)(my_i))==((long)(my_len)))) { - break; + if ((unsigned long)(((long)(my_kind))==((long)(my_N_ENUMITEM)))) { + return (unsigned char *)"N_ENUMITEM"; } - (my_d)=((unsigned long)(my_s)[my_i]); - if ((unsigned long)(((unsigned long)(((long)(my_d))>=((long)(48))))&&((unsigned long)(((long)(my_d))<=((long)(57)))))) { - (my_d)=((unsigned long)(((unsigned long)(my_d))-((unsigned long)(48)))); - } else if ((unsigned long)(((unsigned long)(((long)(my_d))>=((long)(97))))&&((unsigned long)(((long)(my_d))<=((long)(102)))))) { - (my_d)=((unsigned long)(((unsigned long)((unsigned long)(((unsigned long)(my_d))-((unsigned long)(97)))))+((unsigned long)(10UL)))); - } else if ((unsigned long)(((unsigned long)(((long)(my_d))>=((long)(65))))&&((unsigned long)(((long)(my_d))<=((long)(70)))))) { - (my_d)=((unsigned long)(((unsigned long)((unsigned long)(((unsigned long)(my_d))-((unsigned long)(65)))))+((unsigned long)(10UL)))); - } else { - (*(my_ok))=(0UL); - return 0UL; + if ((unsigned long)(((long)(my_kind))==((long)(my_N_ENUMLIST)))) { + return (unsigned char *)"N_ENUMLIST"; } - (my_x)=((unsigned long)(((long)(my_x))*((long)(16UL)))); - (my_x)=((unsigned long)(((unsigned long)(my_x))+((unsigned long)(my_d)))); - (my_i)=((unsigned long)(((unsigned long)(my_i))+((unsigned long)(1UL)))); - if ((unsigned long)(((long)(my_x))>((long)(2147483647UL)))) { - (*(my_ok))=(0UL); - return 0UL; + if ((unsigned long)(((long)(my_kind))==((long)(my_N_LOOP)))) { + return (unsigned char *)"N_LOOP"; } + if ((unsigned long)(((long)(my_kind))==((long)(my_N_BREAK)))) { + return (unsigned char *)"N_BREAK"; } - (*(my_ok))=(1UL); - return my_x; -} -unsigned long( my_hexdig)(unsigned long my_ch,unsigned long* my_ok){ - if ((unsigned long)(((unsigned long)(((long)(my_ch))>=((long)(48))))&&((unsigned long)(((long)(my_ch))<=((long)(57)))))) { - (*(my_ok))=(1UL); - return (unsigned long)(((unsigned long)(my_ch))-((unsigned long)(48))); - } else if ((unsigned long)(((unsigned long)(((long)(my_ch))>=((long)(65))))&&((unsigned long)(((long)(my_ch))<=((long)(70)))))) { - (*(my_ok))=(1UL); - return (unsigned long)(((unsigned long)((unsigned long)(((unsigned long)(my_ch))-((unsigned long)(70)))))+((unsigned long)(10UL))); - } else if ((unsigned long)(((unsigned long)(((long)(my_ch))>=((long)(97))))&&((unsigned long)(((long)(my_ch))<=((long)(102)))))) { - (*(my_ok))=(1UL); - return (unsigned long)(((unsigned long)((unsigned long)(((unsigned long)(my_ch))-((unsigned long)(97)))))+((unsigned long)(10UL))); - } else { - (*(my_ok))=(0UL); - return 0UL; + if ((unsigned long)(((long)(my_kind))==((long)(my_N_CONTINUE)))) { + return (unsigned char *)"N_CONTINUE"; } -} -unsigned long( my_hoist_locals)(struct my_compiler* my_c,struct my_decl* my_d,struct my_node* my_n,unsigned long my_offset){ - unsigned long my_kind = 0; - unsigned char* my_name = 0; - struct my_type* my_t = 0; - struct my_decl* my_v = 0; - if ((unsigned long)(!(my_n))) { - return my_offset; + if ((unsigned long)(((long)(my_kind))==((long)(my_N_RETURN)))) { + return (unsigned char *)"N_RETURN"; } - (my_kind)=((my_n)->my_kind); - if ((unsigned long)(((long)(my_kind))==((long)(my_N_CONDLIST)))) { - while (1) { - if ((unsigned long)(!(my_n))) { - return my_offset; + if ((unsigned long)(((long)(my_kind))==((long)(my_N_VARDECL)))) { + return (unsigned char *)"N_VARDECL"; } - (my_hoist_locals)((my_c),(my_d),(((my_n)->my_a)->my_b),(my_offset)); - (my_n)=((my_n)->my_b); + if ((unsigned long)(((long)(my_kind))==((long)(my_N_LABEL)))) { + return (unsigned char *)"N_LABEL"; } - } else if ((unsigned long)(((long)(my_kind))==((long)(my_N_STMTLIST)))) { - while (1) { - if ((unsigned long)(!(my_n))) { - return my_offset; + if ((unsigned long)(((long)(my_kind))==((long)(my_N_GOTO)))) { + return (unsigned char *)"N_GOTO"; } - (my_offset)=((my_hoist_locals)((my_c),(my_d),((my_n)->my_a),(my_offset))); - (my_n)=((my_n)->my_b); + if ((unsigned long)(((long)(my_kind))==((long)(my_N_ASSIGN)))) { + return (unsigned char *)"N_ASSIGN"; } - } else if ((unsigned long)(((long)(my_kind))==((long)(my_N_LOOP)))) { - return (my_hoist_locals)((my_c),(my_d),((my_n)->my_a),(my_offset)); - } else if ((unsigned long)(((long)(my_kind))==((long)(my_N_LABEL)))) { - (my_name)=(((my_n)->my_a)->my_s); - (my_v)=((my_find)((my_c),((my_d)->my_name),(my_name),(1UL))); - if ((my_v)->my_goto_defined) { - (my_cdie)((my_c),((unsigned char *)"duplicate goto")); + if ((unsigned long)(((long)(my_kind))==((long)(my_N_SIZEOF)))) { + return (unsigned char *)"N_SIZEOF"; } - ((my_v)->my_goto_defined)=(1UL); - return my_offset; - } else if ((unsigned long)(((long)(my_kind))!=((long)(my_N_VARDECL)))) { - return my_offset; + if ((unsigned long)(((long)(my_kind))==((long)(my_N_REF)))) { + return (unsigned char *)"N_REF"; } - (my_name)=(((my_n)->my_a)->my_s); - (my_t)=((my_prototype)((my_c),((my_n)->my_b))); - ((my_n)->my_t)=(my_t); - (my_v)=((my_find)((my_c),((my_d)->my_name),(my_name),(1UL))); - if ((my_v)->my_var_defined) { - (my_cdie)((my_c),((unsigned char *)"duplicate variable")); + if ((unsigned long)(((long)(my_kind))==((long)(my_N_DEREF)))) { + return (unsigned char *)"N_DEREF"; } - ((my_v)->my_var_type)=(my_t); - ((my_v)->my_var_defined)=(1UL); - (my_offset)=((unsigned long)(((unsigned long)(my_offset))+((unsigned long)((my_type_sizeof)((my_c),(my_t)))))); - ((my_v)->my_var_offset)=((unsigned long)(-(unsigned long)(my_offset))); - return my_offset; -} -void( my_layout_struct)(struct my_compiler* my_c,struct my_decl* my_d){ - struct my_node* my_m = 0; - unsigned long my_offset = 0; - unsigned char* my_name = 0; - struct my_decl* my_md = 0; - struct my_type* my_t = 0; - if ((my_d)->my_struct_layout_done) { - if ((unsigned long)(((long)((my_d)->my_struct_layout_done))==((long)(2UL)))) { - (my_cdie)((my_c),((unsigned char *)"circular struct definition")); + if ((unsigned long)(((long)(my_kind))==((long)(my_N_CAST)))) { + return (unsigned char *)"N_CAST"; + } + if ((unsigned long)(((long)(my_kind))==((long)(my_N_INDEX)))) { + return (unsigned char *)"N_INDEX"; + } + if ((unsigned long)(((long)(my_kind))==((long)(my_N_LT)))) { + return (unsigned char *)"N_LT"; + } + if ((unsigned long)(((long)(my_kind))==((long)(my_N_GT)))) { + return (unsigned char *)"N_GT"; + } + if ((unsigned long)(((long)(my_kind))==((long)(my_N_LE)))) { + return (unsigned char *)"N_LE"; + } + if ((unsigned long)(((long)(my_kind))==((long)(my_N_GE)))) { + return (unsigned char *)"N_GE"; } - return; + if ((unsigned long)(((long)(my_kind))==((long)(my_N_EQ)))) { + return (unsigned char *)"N_EQ"; } - ((my_d)->my_struct_layout_done)=(2UL); - (my_m)=(((my_d)->my_struct_def)->my_b); - (my_offset)=(0UL); - while (1) { - if ((unsigned long)(!(my_m))) { - break; + if ((unsigned long)(((long)(my_kind))==((long)(my_N_NE)))) { + return (unsigned char *)"N_NE"; } - (my_name)=((((my_m)->my_a)->my_a)->my_s); - (my_t)=((my_prototype)((my_c),(((my_m)->my_a)->my_b))); - (my_md)=((my_find)((my_c),((my_d)->my_name),(my_name),(1UL))); - if ((my_d)->my_member_defined) { - (my_cdie)((my_c),((unsigned char *)"duplicate member")); + if ((unsigned long)(((long)(my_kind))==((long)(my_N_ADD)))) { + return (unsigned char *)"N_ADD"; } - ((my_md)->my_member_defined)=(1UL); - ((my_md)->my_member_type)=(my_t); - ((my_md)->my_member_offset)=(my_offset); - ((my_md)->my_member_def)=(my_m); - (my_offset)=((unsigned long)(((unsigned long)(my_offset))+((unsigned long)((my_type_sizeof)((my_c),(my_t)))))); - (my_m)=((my_m)->my_b); + if ((unsigned long)(((long)(my_kind))==((long)(my_N_SUB)))) { + return (unsigned char *)"N_SUB"; } - ((my_d)->my_struct_size)=(my_offset); - ((my_d)->my_struct_layout_done)=(1UL); -} -void( my_leave)(struct my_peg* my_c,unsigned long my_tag){ - unsigned long my_nargs = 0; - unsigned long my_start = 0; - unsigned long my_line = 0; - unsigned long my_col = 0; - unsigned long my_end = 0; - unsigned char* my_tmp = 0; - (my_commit)((my_c)); - ((my_c)->my_fail_depth)=(0UL); - (my_nargs)=((unsigned long)(((unsigned long)((my_c)->my_depth))-((unsigned long)((((my_c)->my_stack)[(my_c)->my_sp]).my_depth)))); - (my_line)=((((my_c)->my_stack)[(my_c)->my_sp]).my_line); - (my_col)=((((my_c)->my_stack)[(my_c)->my_sp]).my_col); - (my_start)=((((my_c)->my_stack)[(my_c)->my_sp]).my_pos); - (my_end)=((my_c)->my_pos); - if ((unsigned long)(((long)((my_c)->my_op))==((long)((my_c)->my_cap)))) { - if ((unsigned long)(((long)((my_c)->my_cap))==((long)(0UL)))) { - ((my_c)->my_cap)=(1024UL); - ((my_c)->my_out)=((struct my_peg_op*)(my_alloc)(((my_c)->my_a),((unsigned long)(((long)((my_c)->my_cap))*((long)(48UL)))))); - } else { - ((my_c)->my_cap)=((unsigned long)(((long)((my_c)->my_cap))*((long)(2UL)))); - (my_tmp)=((my_alloc)(((my_c)->my_a),((unsigned long)(((long)((my_c)->my_cap))*((long)(48UL)))))); - (my_memcpy)((my_tmp),((unsigned char*)(my_c)->my_out),((unsigned long)(((long)((my_c)->my_op))*((long)(48UL))))); - (my_free)(((my_c)->my_a),((unsigned char*)(my_c)->my_out)); - ((my_c)->my_out)=((struct my_peg_op*)my_tmp); + if ((unsigned long)(((long)(my_kind))==((long)(my_N_MUL)))) { + return (unsigned char *)"N_MUL"; } + if ((unsigned long)(((long)(my_kind))==((long)(my_N_LSH)))) { + return (unsigned char *)"N_LSH"; } - ((((my_c)->my_out)[(my_c)->my_op]).my_tag)=(my_tag); - ((((my_c)->my_out)[(my_c)->my_op]).my_nargs)=(my_nargs); - ((((my_c)->my_out)[(my_c)->my_op]).my_start)=(my_start); - ((((my_c)->my_out)[(my_c)->my_op]).my_end)=(my_end); - ((((my_c)->my_out)[(my_c)->my_op]).my_line)=(my_line); - ((((my_c)->my_out)[(my_c)->my_op]).my_col)=(my_col); - ((my_c)->my_op)=((unsigned long)(((unsigned long)((my_c)->my_op))+((unsigned long)(1UL)))); - ((my_c)->my_depth)=((unsigned long)(((unsigned long)((unsigned long)(((unsigned long)((my_c)->my_depth))-((unsigned long)(my_nargs)))))+((unsigned long)(1UL)))); -} -unsigned long( my_listen)(unsigned long my_fd,unsigned long my_backlog){ - return (my_syscall)((50UL),(my_fd),(my_backlog),(0UL),(0UL),(0UL),(0UL)); -} -unsigned long( my_literal)(struct my_peg* my_c,unsigned char* my_s){ - unsigned long my_i = 0; - unsigned long my_ch = 0; - (my_i)=(0UL); - while (1) { - if ((unsigned long)(!((my_s)[my_i]))) { - break; + if ((unsigned long)(((long)(my_kind))==((long)(my_N_RSH)))) { + return (unsigned char *)"N_RSH"; } - (my_ch)=((my_get)((my_c))); - if ((unsigned long)(((long)(my_ch))!=((long)((unsigned long)(my_s)[my_i])))) { - (my_fail)((my_c)); - ((my_c)->my_fail_literal)=(my_s); - return 0UL; + if ((unsigned long)(((long)(my_kind))==((long)(my_N_BNOT)))) { + return (unsigned char *)"N_BNOT"; } - (my_i)=((unsigned long)(((unsigned long)(my_i))+((unsigned long)(1UL)))); + if ((unsigned long)(((long)(my_kind))==((long)(my_N_BOR)))) { + return (unsigned char *)"N_BOR"; } - return 1UL; -} -unsigned long( my_lseek)(unsigned long my_fd,unsigned long my_off,unsigned long my_whence){ - return (my_syscall)((8UL),(my_fd),(my_off),(my_whence),(0UL),(0UL),(0UL)); -} -void( my_main)(unsigned long my_argc,unsigned char** my_argv,unsigned char** my_envp){ - struct my_alloc my_a = {0}; - struct my_compiler* my_c = 0; - struct my_node* my_p = 0; - struct my_decl* my_d = 0; - struct my_label* my_start = 0; - struct my_label* my_kstart = 0; - unsigned long my_i = 0; - unsigned long my_show = 0; - unsigned char* my_filename = 0; - struct my_file* my_err = 0; - (my_setup_alloc)((&(my_a))); - (my_c)=((my_comp_setup)((&(my_a)))); - (my_show)=(0UL); - (my_filename)=((unsigned char *)"a.out"); - (my_i)=(1UL); - while (1) { - if ((unsigned long)(((long)(my_i))>=((long)(my_argc)))) { - break; + if ((unsigned long)(((long)(my_kind))==((long)(my_N_BAND)))) { + return (unsigned char *)"N_BAND"; } - if ((unsigned long)(!((my_strcmp)(((my_argv)[my_i]),((unsigned char *)"-o"))))) { - (my_i)=((unsigned long)(((unsigned long)(my_i))+((unsigned long)(1UL)))); - if ((unsigned long)(((long)(my_i))>=((long)(my_argc)))) { - (my_die)(((unsigned char *)"invalid -o at end of argument list")); + if ((unsigned long)(((long)(my_kind))==((long)(my_N_AND)))) { + return (unsigned char *)"N_AND"; } - (my_filename)=((my_argv)[my_i]); - (my_i)=((unsigned long)(((unsigned long)(my_i))+((unsigned long)(1UL)))); - continue; + if ((unsigned long)(((long)(my_kind))==((long)(my_N_OR)))) { + return (unsigned char *)"N_OR"; } - if ((unsigned long)(!((my_strcmp)(((my_argv)[my_i]),((unsigned char *)"-fdump"))))) { - (my_i)=((unsigned long)(((unsigned long)(my_i))+((unsigned long)(1UL)))); - (my_show)=(1UL); - continue; + if ((unsigned long)(((long)(my_kind))==((long)(my_N_XOR)))) { + return (unsigned char *)"N_XOR"; } - if ((unsigned long)(!((my_strcmp)(((my_argv)[my_i]),((unsigned char *)"-C"))))) { - ((my_c)->my_do_cout)=(1UL); - (my_i)=((unsigned long)(((unsigned long)(my_i))+((unsigned long)(1UL)))); - continue; + if ((unsigned long)(((long)(my_kind))==((long)(my_N_NOT)))) { + return (unsigned char *)"N_NOT"; } - if ((unsigned long)(((long)(((my_argv)[my_i])[0UL]))==((long)((unsigned char)45)))) { - (my_die)(((unsigned char *)"invalid argument")); + if ((unsigned long)(((long)(my_kind))==((long)(my_N_POS)))) { + return (unsigned char *)"N_POS"; } - (my_p)=((my_concat_program)((my_p),((my_parse)(((my_c)->my_p),((my_argv)[my_i]))))); - (my_i)=((unsigned long)(((unsigned long)(my_i))+((unsigned long)(1UL)))); + if ((unsigned long)(((long)(my_kind))==((long)(my_N_NEG)))) { + return (unsigned char *)"N_NEG"; } - if (my_show) { - (my_err)=((my_fopen)((2UL),(&(my_a)))); - (my_show_node)((my_err),(my_p)); - (my_fflush)((my_err)); - return; + if ((unsigned long)(((long)(my_kind))==((long)(my_N_DIV)))) { + return (unsigned char *)"N_DIV"; } - (my_compile)((my_c),(my_p)); - if ((my_c)->my_do_cout) { - (my_open_coutput)((my_c),(my_filename)); - (my_ctranslate)((my_c)); - return; + if ((unsigned long)(((long)(my_kind))==((long)(my_N_MOD)))) { + return (unsigned char *)"N_MOD"; } - (my_emit_builtin)((my_c)); - (my_start)=((struct my_label*)0UL); - (my_d)=((my_find)((my_c),((unsigned char *)"_start"),((unsigned char*)0UL),(0UL))); - if ((unsigned long)((my_d)&&((my_d)->my_func_defined))) { - (my_start)=((my_d)->my_func_label); + return (unsigned char *)"(invalid)"; +} +unsigned long( my_open)(unsigned char* my_name,unsigned long my_flags,unsigned long my_mode){ + return (my_syscall)((2UL),((unsigned long)my_name),(my_flags),(my_mode),(0UL),(0UL),(0UL)); +} +void( my_open_coutput)(struct my_compiler* my_c,unsigned char* my_filename){ + unsigned long my_fd = 0; + if ((my_c)->my_cout) { + (my_die)(((unsigned char *)"multiple output files")); } - (my_kstart)=((struct my_label*)0UL); - (my_d)=((my_find)((my_c),((unsigned char *)"_kstart"),((unsigned char*)0UL),(0UL))); - if ((unsigned long)((my_d)&&((my_d)->my_func_defined))) { - (my_kstart)=((my_d)->my_func_label); + (my_unlink)((my_filename)); + (my_fd)=((my_open)((my_filename),((unsigned long)(((unsigned long)(my_O_CREAT))|((unsigned long)(my_O_WRONLY)))),((unsigned long)(((unsigned long)((unsigned long)(((unsigned long)((unsigned long)(((unsigned long)(6UL))<<((unsigned long)(6UL)))))+((unsigned long)((unsigned long)(((unsigned long)(6UL))<<((unsigned long)(3UL))))))))+((unsigned long)(6UL)))))); + if ((unsigned long)(((long)(my_fd))<((long)(0UL)))) { + (my_die)(((unsigned char *)"failed to open output")); } - (my_open_output)(((my_c)->my_as),(my_filename)); - (my_writeout)(((my_c)->my_as),(my_start),(my_kstart)); + ((my_c)->my_cout)=((my_fopen)((my_fd),((my_c)->my_a))); } -unsigned long( my_memcmp)(unsigned char* my_a,unsigned char* my_b,unsigned long my_n){ - unsigned long my_i = 0; - (my_i)=(0UL); - while (1) { - if ((unsigned long)(((long)(my_i))==((long)(my_n)))) { - return 0UL; - } - if ((unsigned long)(((long)((my_a)[my_i]))>((long)((my_b)[my_i])))) { - return 1UL; +void( my_open_output)(struct my_assembler* my_c,unsigned char* my_filename){ + unsigned long my_fd = 0; + if ((my_c)->my_out) { + (my_die)(((unsigned char *)"multiple output files")); } - if ((unsigned long)(((long)((my_a)[my_i]))<((long)((my_b)[my_i])))) { - return (unsigned long)(-(unsigned long)(1UL)); + (my_unlink)((my_filename)); + (my_fd)=((my_open)((my_filename),((unsigned long)(((unsigned long)(my_O_CREAT))|((unsigned long)(my_O_WRONLY)))),((unsigned long)(((unsigned long)((unsigned long)(((unsigned long)((unsigned long)(((unsigned long)(7UL))<<((unsigned long)(6UL)))))+((unsigned long)((unsigned long)(((unsigned long)(7UL))<<((unsigned long)(3UL))))))))+((unsigned long)(7UL)))))); + if ((unsigned long)(((long)(my_fd))<((long)(0UL)))) { + (my_die)(((unsigned char *)"failed to open output")); } - (my_i)=((unsigned long)(((unsigned long)(my_i))+((unsigned long)(1UL)))); + ((my_c)->my_out)=((my_fopen)((my_fd),((my_c)->my_a))); +} +struct my_node*( my_parse)(struct my_parser* my_c,unsigned char* my_filename){ + struct my_file* my_f = 0; + unsigned long my_fd = 0; + unsigned long my_len = 0; + unsigned char* my_src = 0; + struct my_peg_node* my_pn = 0; + (my_fd)=((my_open)((my_filename),(0UL),(0UL))); + if ((unsigned long)(((long)(my_fd))<((long)(0UL)))) { + (my_fdputs)((2UL),((unsigned char *)"failed to open ")); + (my_fdputs)((2UL),(my_filename)); + (my_fdputs)((2UL),((unsigned char *)"\012")); + (my_exit)((1UL)); } + (my_f)=((my_fopen)((my_fd),((my_c)->my_a))); + (my_src)=((my_freadall)((my_f),(&(my_len)))); + (my_fclose)((my_f)); + (my_peg_reset)(((my_c)->my_p),(my_filename),(my_src),(my_len)); + (my_pn)=((my_peg_parse)(((my_c)->my_p),(my_P_sp),(my_peg_P_grammar))); + return (my_reconstruct)((my_c),(my_pn)); } -void( my_memcpy)(unsigned char* my_dest,unsigned char* my_src,unsigned long my_size){ - unsigned long my_i = 0; - if ((unsigned long)(((long)(my_size))<((long)(0UL)))) { - return; +unsigned long( my_parse_escape)(unsigned char* my_s,unsigned long* my_i,unsigned long my_n){ + unsigned long my_nc = 0; + unsigned long my_ok = 0; + if ((unsigned long)(((long)(*(my_i)))==((long)(my_n)))) { + (my_die)(((unsigned char *)"invalid escape")); } - if ((unsigned long)(((long)(my_src))>((long)(my_dest)))) { - (my_i)=(0UL); + (my_nc)=((unsigned long)(my_s)[*(my_i)]); + (*(my_i))=((unsigned long)(((unsigned long)(*(my_i)))+((unsigned long)(1UL)))); + if ((unsigned long)(((long)(my_nc))==((long)(116)))) { + return 9; + } else if ((unsigned long)(((long)(my_nc))==((long)(114)))) { + return 13; + } else if ((unsigned long)(((long)(my_nc))==((long)(110)))) { + return 10; + } else if ((unsigned long)(((long)(my_nc))==((long)(92)))) { + return 92; + } else if ((unsigned long)(((long)(my_nc))==((long)(39)))) { + return 39; + } else if ((unsigned long)(((long)(my_nc))==((long)(34)))) { + return 34; + } else if ((unsigned long)(((long)(my_nc))==((long)(45)))) { + return 45; + } else if ((unsigned long)(((long)(my_nc))==((long)(91)))) { + return 91; + } else if ((unsigned long)(((long)(my_nc))==((long)(93)))) { + return 93; + } else if ((unsigned long)(((long)(my_nc))==((long)(120)))) { + if ((unsigned long)(((long)((unsigned long)(((unsigned long)(my_n))-((unsigned long)(*(my_i))))))<((long)(2UL)))) { + (my_die)(((unsigned char *)"invalid escape")); + } + (my_nc)=((unsigned long)(((long)((my_hexdig)(((unsigned long)(my_s)[*(my_i)]),(&(my_ok)))))*((long)(16UL)))); + if ((unsigned long)(!(my_ok))) { + (my_die)(((unsigned char *)"invalid hex")); + } + (my_nc)=((unsigned long)(((unsigned long)(my_nc))+((unsigned long)((my_hexdig)(((unsigned long)(my_s)[(unsigned long)(((unsigned long)(*(my_i)))+((unsigned long)(1UL)))]),(&(my_ok))))))); + if ((unsigned long)(!(my_ok))) { + (my_die)(((unsigned char *)"invalid hex")); + } + (*(my_i))=((unsigned long)(((unsigned long)(*(my_i)))+((unsigned long)(2UL)))); + return my_nc; + } else { + (my_die)(((unsigned char *)"invalid escape")); + } +} +unsigned long( my_peg_PEG_alternative)(struct my_peg* my_c){ + unsigned long my_ok = 0; + (my_enter)((my_c),(my_PEG_alternative)); + (my_ok)=((my_peg_PEG_lookahead)((my_c))); + if (my_ok) { while (1) { - if ((unsigned long)(((long)(my_i))==((long)(my_size)))) { + (my_choice)((my_c)); + (my_ok)=((my_peg_PEG_lookahead)((my_c))); + if ((unsigned long)(!(my_ok))) { + (my_ok)=(1UL); break; } - ((my_dest)[my_i])=((my_src)[my_i]); - (my_i)=((unsigned long)(((unsigned long)(my_i))+((unsigned long)(1UL)))); + (my_commit)((my_c)); } - } else if ((unsigned long)(((long)(my_src))<((long)(my_dest)))) { - (my_i)=(my_size); - while (1) { - if ((unsigned long)(((long)(my_i))==((long)(0UL)))) { - break; } - (my_i)=((unsigned long)(((unsigned long)(my_i))-((unsigned long)(1UL)))); - ((my_dest)[my_i])=((my_src)[my_i]); + if (my_ok) { + (my_leave)((my_c),(my_PEG_alternative)); + } else { + (my_fail)((my_c)); } + return my_ok; +} +unsigned long( my_peg_PEG_any)(struct my_peg* my_c){ + unsigned long my_ok = 0; + (my_enter)((my_c),(my_PEG_any)); + (my_ok)=((my_literal)((my_c),((unsigned char *)"."))); + if (my_ok) { + (my_leave)((my_c),(my_PEG_any)); + } else { + (my_fail)((my_c)); } + return my_ok; } -void( my_memset)(unsigned char* my_dest,unsigned long my_c,unsigned long my_size){ - unsigned long my_i = 0; - if ((unsigned long)(((long)(my_size))<((long)(0UL)))) { - return; +unsigned long( my_peg_PEG_call)(struct my_peg* my_c){ + unsigned long my_ok = 0; + (my_enter)((my_c),(my_PEG_call)); + (my_ok)=((my_peg_PEG_identifier)((my_c))); + if (my_ok) { + (my_choice)((my_c)); + (my_ok)=((my_peg_PEG_sp)((my_c))); + if (my_ok) { + (my_ok)=((my_literal)((my_c),((unsigned char *)"<-"))); } - (my_i)=(0UL); - while (1) { - if ((unsigned long)(((long)(my_i))==((long)(my_size)))) { - break; + if (my_ok) { + (my_fail)((my_c)); + (my_fail)((my_c)); + (my_ok)=(0UL); + } else { + (my_ok)=(1UL); } - ((my_dest)[my_i])=((unsigned char)my_c); - (my_i)=((unsigned long)(((unsigned long)(my_i))+((unsigned long)(1UL)))); } -} -unsigned long( my_mkdir)(unsigned char* my_name){ - return (my_syscall)((83UL),((unsigned long)my_name),(0UL),(0UL),(0UL),(0UL),(0UL)); -} -struct my_label*( my_mklabel)(struct my_assembler* my_c){ - struct my_label* my_l = 0; - (my_l)=((struct my_label*)(my_alloc)(((my_c)->my_a),(24UL))); - ((my_l)->my_fix)=((struct my_fixup*)0UL); - ((my_l)->my_at)=(0UL); - ((my_l)->my_fixed)=(0UL); - return my_l; -} -struct my_node*( my_mknode)(struct my_parser* my_c,unsigned long my_kind,struct my_node* my_a,struct my_node* my_b){ - struct my_node* my_ret = 0; - (my_ret)=((struct my_node*)(my_alloc)(((my_c)->my_a),(72UL))); - ((my_ret)->my_kind)=(my_kind); - ((my_ret)->my_a)=(my_a); - ((my_ret)->my_b)=(my_b); - ((my_ret)->my_filename)=((unsigned char*)0UL); - ((my_ret)->my_lineno)=(0UL); - ((my_ret)->my_colno)=(0UL); - ((my_ret)->my_n)=(0UL); - ((my_ret)->my_s)=((unsigned char*)0UL); - ((my_ret)->my_t)=((struct my_type*)0UL); - (my_fillpos)((my_c),(my_ret)); - return my_ret; -} -struct my_node*( my_mknode0)(struct my_parser* my_c,unsigned long my_kind){ - return (my_mknode)((my_c),(my_kind),((struct my_node*)0UL),((struct my_node*)0UL)); -} -struct my_node*( my_mknode1)(struct my_parser* my_c,unsigned long my_kind,struct my_node* my_a){ - return (my_mknode)((my_c),(my_kind),(my_a),((struct my_node*)0UL)); -} -struct my_type*( my_mktype)(struct my_compiler* my_c,unsigned long my_kind,struct my_type* my_a,struct my_type* my_b,struct my_decl* my_st){ - struct my_type* my_t = 0; - (my_t)=((struct my_type*)(my_alloc)(((my_c)->my_a),(32UL))); - ((my_t)->my_kind)=(my_kind); - ((my_t)->my_st)=(my_st); - ((my_t)->my_val)=(my_a); - ((my_t)->my_arg)=(my_b); - return my_t; -} -struct my_type*( my_mktype0)(struct my_compiler* my_c,unsigned long my_kind){ - return (my_mktype)((my_c),(my_kind),((struct my_type*)0UL),((struct my_type*)0UL),((struct my_decl*)0UL)); -} -struct my_type*( my_mktype1)(struct my_compiler* my_c,unsigned long my_kind,struct my_type* my_a){ - return (my_mktype)((my_c),(my_kind),(my_a),((struct my_type*)0UL),((struct my_decl*)0UL)); -} -struct my_type*( my_mktype2)(struct my_compiler* my_c,unsigned long my_kind,struct my_type* my_a,struct my_type* my_b){ - return (my_mktype)((my_c),(my_kind),(my_a),(my_b),((struct my_decl*)0UL)); -} -struct my_type*( my_mktype_struct)(struct my_compiler* my_c,struct my_decl* my_st){ - return (my_mktype)((my_c),(my_TY_STRUCT),((struct my_type*)0UL),((struct my_type*)0UL),(my_st)); -} -unsigned long( my_mmap)(unsigned long my_addr,unsigned long my_len,unsigned long my_prot,unsigned long my_flags,unsigned long my_fd,unsigned long my_off){ - return (my_syscall)((9UL),(my_addr),(my_len),(my_prot),(my_flags),(my_fd),(my_off)); -} -unsigned long( my_munmap)(unsigned long my_addr,unsigned long my_len){ - return (my_syscall)((11UL),(my_addr),(my_len),(0UL),(0UL),(0UL),(0UL)); -} -struct my_decl*( my_next_decl)(struct my_compiler* my_c,struct my_decl* my_d){ - if ((unsigned long)(!(my_d))) { - return (struct my_decl*)0UL; + if (my_ok) { + (my_leave)((my_c),(my_PEG_call)); + } else { + (my_fail)((my_c)); } - if ((my_d)->my_r) { - (my_d)=((my_d)->my_r); + return my_ok; +} +unsigned long( my_peg_PEG_class)(struct my_peg* my_c){ + unsigned long my_ok = 0; + (my_enter)((my_c),(my_PEG_class)); + (my_ok)=((my_literal)((my_c),((unsigned char *)"["))); + if (my_ok) { while (1) { - if ((unsigned long)(!((my_d)->my_l))) { - return my_d; + (my_choice)((my_c)); + (my_choice)((my_c)); + (my_ok)=((my_literal)((my_c),((unsigned char *)"]"))); + if (my_ok) { + (my_fail)((my_c)); + (my_fail)((my_c)); + (my_ok)=(0UL); + } else { + (my_ok)=(1UL); } - (my_d)=((my_d)->my_l); + if (my_ok) { + (my_choice)((my_c)); + (my_ok)=((my_any)((my_c))); + if (my_ok) { + (my_ok)=((my_literal)((my_c),((unsigned char *)"-"))); } + if (my_ok) { + (my_ok)=((my_any)((my_c))); } - while (1) { - if ((unsigned long)(!((my_d)->my_p))) { - return (struct my_decl*)0UL; + if ((unsigned long)(!(my_ok))) { + (my_choice)((my_c)); + (my_ok)=((my_any)((my_c))); } - if ((unsigned long)(((long)(((my_d)->my_p)->my_l))==((long)(my_d)))) { - return (my_d)->my_p; + if (my_ok) { + (my_commit)((my_c)); + } else { + (my_fail)((my_c)); } - (my_d)=((my_d)->my_p); } -} -unsigned char*( my_node_to_str)(unsigned long my_kind){ - if ((unsigned long)(((long)(my_kind))==((long)(my_N_IDENT)))) { - return (unsigned char *)"N_IDENT"; + if ((unsigned long)(!(my_ok))) { + (my_ok)=(1UL); + break; } - if ((unsigned long)(((long)(my_kind))==((long)(my_N_NUM)))) { - return (unsigned char *)"N_NUM"; + (my_commit)((my_c)); } - if ((unsigned long)(((long)(my_kind))==((long)(my_N_CHAR)))) { - return (unsigned char *)"N_CHAR"; } - if ((unsigned long)(((long)(my_kind))==((long)(my_N_STR)))) { - return (unsigned char *)"N_STR"; + if (my_ok) { + (my_ok)=((my_literal)((my_c),((unsigned char *)"]"))); } - if ((unsigned long)(((long)(my_kind))==((long)(my_N_STMTLIST)))) { - return (unsigned char *)"N_STMTLIST"; + if (my_ok) { + (my_leave)((my_c),(my_PEG_class)); + } else { + (my_fail)((my_c)); } - if ((unsigned long)(((long)(my_kind))==((long)(my_N_EXPRLIST)))) { - return (unsigned char *)"N_EXPRLIST"; + return my_ok; +} +unsigned long( my_peg_PEG_countop)(struct my_peg* my_c){ + unsigned long my_ok = 0; + (my_enter)((my_c),(my_PEG_countop)); + (my_ok)=((my_charset)((my_c),((unsigned char *)"*+?"))); + if (my_ok) { + (my_leave)((my_c),(my_PEG_countop)); + } else { + (my_fail)((my_c)); } - if ((unsigned long)(((long)(my_kind))==((long)(my_N_CALL)))) { - return (unsigned char *)"N_CALL"; + return my_ok; +} +unsigned long( my_peg_PEG_grammar)(struct my_peg* my_c){ + unsigned long my_ok = 0; + (my_enter)((my_c),(my_PEG_grammar)); + (my_ok)=((my_peg_PEG_sp)((my_c))); + if (my_ok) { + (my_ok)=((my_peg_PEG_rule)((my_c))); + if (my_ok) { + while (1) { + (my_choice)((my_c)); + (my_ok)=((my_peg_PEG_rule)((my_c))); + if ((unsigned long)(!(my_ok))) { + (my_ok)=(1UL); + break; } - if ((unsigned long)(((long)(my_kind))==((long)(my_N_DOT)))) { - return (unsigned char *)"N_DOT"; + (my_commit)((my_c)); } - if ((unsigned long)(((long)(my_kind))==((long)(my_N_ARGLIST)))) { - return (unsigned char *)"N_ARGLIST"; } - if ((unsigned long)(((long)(my_kind))==((long)(my_N_FUNC)))) { - return (unsigned char *)"N_FUNC"; } - if ((unsigned long)(((long)(my_kind))==((long)(my_N_ARGDECL)))) { - return (unsigned char *)"N_ARGDECL"; + if (my_ok) { + (my_choice)((my_c)); + (my_ok)=((my_any)((my_c))); + if (my_ok) { + (my_fail)((my_c)); + (my_fail)((my_c)); + (my_ok)=(0UL); + } else { + (my_ok)=(1UL); } - if ((unsigned long)(((long)(my_kind))==((long)(my_N_FUNCDECL)))) { - return (unsigned char *)"N_FUNCDECL"; } - if ((unsigned long)(((long)(my_kind))==((long)(my_N_PROGRAM)))) { - return (unsigned char *)"N_PROGRAM"; + if (my_ok) { + (my_leave)((my_c),(my_PEG_grammar)); + } else { + (my_fail)((my_c)); } - if ((unsigned long)(((long)(my_kind))==((long)(my_N_FUNCTYPE)))) { - return (unsigned char *)"N_FUNCTYPE"; + return my_ok; +} +unsigned long( my_peg_PEG_identifier)(struct my_peg* my_c){ + unsigned long my_ok = 0; + (my_enter)((my_c),(my_PEG_identifier)); + (my_ok)=((my_charset)((my_c),((unsigned char *)"0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ_abcdefghijklmnopqrstuvwxyz"))); + if (my_ok) { + while (1) { + (my_choice)((my_c)); + (my_ok)=((my_charset)((my_c),((unsigned char *)"0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ_abcdefghijklmnopqrstuvwxyz"))); + if ((unsigned long)(!(my_ok))) { + (my_ok)=(1UL); + break; } - if ((unsigned long)(((long)(my_kind))==((long)(my_N_PTRTYPE)))) { - return (unsigned char *)"N_PTRTYPE"; + (my_commit)((my_c)); } - if ((unsigned long)(((long)(my_kind))==((long)(my_N_STRUCT)))) { - return (unsigned char *)"N_STRUCT"; } - if ((unsigned long)(((long)(my_kind))==((long)(my_N_MEMBERDECL)))) { - return (unsigned char *)"N_MEMBERDECL"; + if (my_ok) { + (my_leave)((my_c),(my_PEG_identifier)); + } else { + (my_fail)((my_c)); + } + return my_ok; +} +unsigned long( my_peg_PEG_literal)(struct my_peg* my_c){ + unsigned long my_ok = 0; + (my_enter)((my_c),(my_PEG_literal)); + (my_ok)=((my_literal)((my_c),((unsigned char *)"'"))); + if (my_ok) { + while (1) { + (my_choice)((my_c)); + (my_choice)((my_c)); + (my_ok)=((my_literal)((my_c),((unsigned char *)"'"))); + if (my_ok) { + (my_fail)((my_c)); + (my_fail)((my_c)); + (my_ok)=(0UL); + } else { + (my_ok)=(1UL); + } + if (my_ok) { + (my_ok)=((my_any)((my_c))); + } + if ((unsigned long)(!(my_ok))) { + (my_ok)=(1UL); + break; + } + (my_commit)((my_c)); } - if ((unsigned long)(((long)(my_kind))==((long)(my_N_MEMBERLIST)))) { - return (unsigned char *)"N_MEMBERLIST"; } - if ((unsigned long)(((long)(my_kind))==((long)(my_N_CONDLIST)))) { - return (unsigned char *)"N_CONDLIST"; + if (my_ok) { + (my_ok)=((my_literal)((my_c),((unsigned char *)"'"))); } - if ((unsigned long)(((long)(my_kind))==((long)(my_N_COND)))) { - return (unsigned char *)"N_COND"; + if (my_ok) { + (my_leave)((my_c),(my_PEG_literal)); + } else { + (my_fail)((my_c)); } - if ((unsigned long)(((long)(my_kind))==((long)(my_N_ENUM)))) { - return (unsigned char *)"N_ENUM"; + return my_ok; +} +unsigned long( my_peg_PEG_lookahead)(struct my_peg* my_c){ + unsigned long my_ok = 0; + (my_enter)((my_c),(my_PEG_lookahead)); + (my_choice)((my_c)); + (my_ok)=((my_peg_PEG_lookop)((my_c))); + if (my_ok) { + (my_ok)=((my_peg_PEG_sp)((my_c))); } - if ((unsigned long)(((long)(my_kind))==((long)(my_N_ENUMITEM)))) { - return (unsigned char *)"N_ENUMITEM"; + if (my_ok) { + (my_commit)((my_c)); + } else { + (my_ok)=(1UL); } - if ((unsigned long)(((long)(my_kind))==((long)(my_N_ENUMLIST)))) { - return (unsigned char *)"N_ENUMLIST"; + if (my_ok) { + (my_ok)=((my_peg_PEG_suffix)((my_c))); } - if ((unsigned long)(((long)(my_kind))==((long)(my_N_LOOP)))) { - return (unsigned char *)"N_LOOP"; + if (my_ok) { + (my_leave)((my_c),(my_PEG_lookahead)); + } else { + (my_fail)((my_c)); } - if ((unsigned long)(((long)(my_kind))==((long)(my_N_BREAK)))) { - return (unsigned char *)"N_BREAK"; + return my_ok; +} +unsigned long( my_peg_PEG_lookop)(struct my_peg* my_c){ + unsigned long my_ok = 0; + (my_enter)((my_c),(my_PEG_lookop)); + (my_ok)=((my_charset)((my_c),((unsigned char *)"!&"))); + if (my_ok) { + (my_leave)((my_c),(my_PEG_lookop)); + } else { + (my_fail)((my_c)); } - if ((unsigned long)(((long)(my_kind))==((long)(my_N_CONTINUE)))) { - return (unsigned char *)"N_CONTINUE"; + return my_ok; +} +unsigned long( my_peg_PEG_pattern)(struct my_peg* my_c){ + unsigned long my_ok = 0; + (my_enter)((my_c),(my_PEG_pattern)); + (my_ok)=((my_peg_PEG_alternative)((my_c))); + if (my_ok) { + while (1) { + (my_choice)((my_c)); + (my_ok)=((my_literal)((my_c),((unsigned char *)"/"))); + if (my_ok) { + (my_choice)((my_c)); + (my_ok)=((my_literal)((my_c),((unsigned char *)"/"))); + if (my_ok) { + (my_fail)((my_c)); + (my_fail)((my_c)); + (my_ok)=(0UL); + } else { + (my_ok)=(1UL); } - if ((unsigned long)(((long)(my_kind))==((long)(my_N_RETURN)))) { - return (unsigned char *)"N_RETURN"; } - if ((unsigned long)(((long)(my_kind))==((long)(my_N_VARDECL)))) { - return (unsigned char *)"N_VARDECL"; + if (my_ok) { + (my_ok)=((my_peg_PEG_sp)((my_c))); } - if ((unsigned long)(((long)(my_kind))==((long)(my_N_LABEL)))) { - return (unsigned char *)"N_LABEL"; + if (my_ok) { + (my_ok)=((my_peg_PEG_alternative)((my_c))); } - if ((unsigned long)(((long)(my_kind))==((long)(my_N_GOTO)))) { - return (unsigned char *)"N_GOTO"; + if ((unsigned long)(!(my_ok))) { + (my_ok)=(1UL); + break; } - if ((unsigned long)(((long)(my_kind))==((long)(my_N_ASSIGN)))) { - return (unsigned char *)"N_ASSIGN"; + (my_commit)((my_c)); } - if ((unsigned long)(((long)(my_kind))==((long)(my_N_SIZEOF)))) { - return (unsigned char *)"N_SIZEOF"; } - if ((unsigned long)(((long)(my_kind))==((long)(my_N_REF)))) { - return (unsigned char *)"N_REF"; + if (my_ok) { + (my_leave)((my_c),(my_PEG_pattern)); + } else { + (my_fail)((my_c)); } - if ((unsigned long)(((long)(my_kind))==((long)(my_N_DEREF)))) { - return (unsigned char *)"N_DEREF"; + return my_ok; +} +unsigned long( my_peg_PEG_primary)(struct my_peg* my_c){ + unsigned long my_ok = 0; + (my_enter)((my_c),(my_PEG_primary)); + (my_choice)((my_c)); + (my_ok)=((my_literal)((my_c),((unsigned char *)"("))); + if (my_ok) { + (my_ok)=((my_peg_PEG_sp)((my_c))); } - if ((unsigned long)(((long)(my_kind))==((long)(my_N_CAST)))) { - return (unsigned char *)"N_CAST"; + if (my_ok) { + (my_ok)=((my_peg_PEG_pattern)((my_c))); } - if ((unsigned long)(((long)(my_kind))==((long)(my_N_INDEX)))) { - return (unsigned char *)"N_INDEX"; + if (my_ok) { + (my_ok)=((my_literal)((my_c),((unsigned char *)")"))); } - if ((unsigned long)(((long)(my_kind))==((long)(my_N_LT)))) { - return (unsigned char *)"N_LT"; + if ((unsigned long)(!(my_ok))) { + (my_choice)((my_c)); + (my_ok)=((my_peg_PEG_any)((my_c))); } - if ((unsigned long)(((long)(my_kind))==((long)(my_N_GT)))) { - return (unsigned char *)"N_GT"; + if ((unsigned long)(!(my_ok))) { + (my_choice)((my_c)); + (my_ok)=((my_peg_PEG_literal)((my_c))); } - if ((unsigned long)(((long)(my_kind))==((long)(my_N_LE)))) { - return (unsigned char *)"N_LE"; + if ((unsigned long)(!(my_ok))) { + (my_choice)((my_c)); + (my_ok)=((my_peg_PEG_class)((my_c))); } - if ((unsigned long)(((long)(my_kind))==((long)(my_N_GE)))) { - return (unsigned char *)"N_GE"; + if ((unsigned long)(!(my_ok))) { + (my_choice)((my_c)); + (my_ok)=((my_peg_PEG_call)((my_c))); } - if ((unsigned long)(((long)(my_kind))==((long)(my_N_EQ)))) { - return (unsigned char *)"N_EQ"; + if (my_ok) { + (my_commit)((my_c)); + } else { + (my_fail)((my_c)); } - if ((unsigned long)(((long)(my_kind))==((long)(my_N_NE)))) { - return (unsigned char *)"N_NE"; + if (my_ok) { + (my_ok)=((my_peg_PEG_sp)((my_c))); } - if ((unsigned long)(((long)(my_kind))==((long)(my_N_ADD)))) { - return (unsigned char *)"N_ADD"; + if (my_ok) { + (my_leave)((my_c),(my_PEG_primary)); + } else { + (my_fail)((my_c)); } - if ((unsigned long)(((long)(my_kind))==((long)(my_N_SUB)))) { - return (unsigned char *)"N_SUB"; + return my_ok; +} +unsigned long( my_peg_PEG_rule)(struct my_peg* my_c){ + unsigned long my_ok = 0; + (my_enter)((my_c),(my_PEG_rule)); + (my_ok)=((my_peg_PEG_identifier)((my_c))); + if (my_ok) { + (my_ok)=((my_peg_PEG_sp)((my_c))); } - if ((unsigned long)(((long)(my_kind))==((long)(my_N_MUL)))) { - return (unsigned char *)"N_MUL"; + if (my_ok) { + (my_ok)=((my_literal)((my_c),((unsigned char *)"<-"))); } - if ((unsigned long)(((long)(my_kind))==((long)(my_N_LSH)))) { - return (unsigned char *)"N_LSH"; + if (my_ok) { + (my_ok)=((my_peg_PEG_sp)((my_c))); } - if ((unsigned long)(((long)(my_kind))==((long)(my_N_RSH)))) { - return (unsigned char *)"N_RSH"; + if (my_ok) { + (my_ok)=((my_peg_PEG_pattern)((my_c))); } - if ((unsigned long)(((long)(my_kind))==((long)(my_N_BNOT)))) { - return (unsigned char *)"N_BNOT"; + if (my_ok) { + (my_leave)((my_c),(my_PEG_rule)); + } else { + (my_fail)((my_c)); } - if ((unsigned long)(((long)(my_kind))==((long)(my_N_BOR)))) { - return (unsigned char *)"N_BOR"; + return my_ok; +} +unsigned long( my_peg_PEG_sp)(struct my_peg* my_c){ + unsigned long my_ok = 0; + (my_enter)((my_c),(my_PEG_sp)); + while (1) { + (my_choice)((my_c)); + (my_choice)((my_c)); + (my_ok)=((my_charset)((my_c),((unsigned char *)"\011\012\015 "))); + if ((unsigned long)(!(my_ok))) { + (my_choice)((my_c)); + (my_ok)=((my_literal)((my_c),((unsigned char *)"//"))); + if (my_ok) { + while (1) { + (my_choice)((my_c)); + (my_choice)((my_c)); + (my_ok)=((my_charset)((my_c),((unsigned char *)"\012\015"))); + if (my_ok) { + (my_fail)((my_c)); + (my_fail)((my_c)); + (my_ok)=(0UL); + } else { + (my_ok)=(1UL); } - if ((unsigned long)(((long)(my_kind))==((long)(my_N_BAND)))) { - return (unsigned char *)"N_BAND"; + if (my_ok) { + (my_ok)=((my_any)((my_c))); } - if ((unsigned long)(((long)(my_kind))==((long)(my_N_AND)))) { - return (unsigned char *)"N_AND"; + if ((unsigned long)(!(my_ok))) { + (my_ok)=(1UL); + break; } - if ((unsigned long)(((long)(my_kind))==((long)(my_N_OR)))) { - return (unsigned char *)"N_OR"; + (my_commit)((my_c)); } - if ((unsigned long)(((long)(my_kind))==((long)(my_N_XOR)))) { - return (unsigned char *)"N_XOR"; } - if ((unsigned long)(((long)(my_kind))==((long)(my_N_NOT)))) { - return (unsigned char *)"N_NOT"; } - if ((unsigned long)(((long)(my_kind))==((long)(my_N_POS)))) { - return (unsigned char *)"N_POS"; + if (my_ok) { + (my_commit)((my_c)); + } else { + (my_fail)((my_c)); } - if ((unsigned long)(((long)(my_kind))==((long)(my_N_NEG)))) { - return (unsigned char *)"N_NEG"; + if ((unsigned long)(!(my_ok))) { + (my_ok)=(1UL); + break; } - if ((unsigned long)(((long)(my_kind))==((long)(my_N_DIV)))) { - return (unsigned char *)"N_DIV"; + (my_commit)((my_c)); } - if ((unsigned long)(((long)(my_kind))==((long)(my_N_MOD)))) { - return (unsigned char *)"N_MOD"; + if (my_ok) { + (my_leave)((my_c),(my_PEG_sp)); + } else { + (my_fail)((my_c)); } - return (unsigned char *)"(invalid)"; -} -unsigned long( my_open)(unsigned char* my_name,unsigned long my_flags,unsigned long my_mode){ - return (my_syscall)((2UL),((unsigned long)my_name),(my_flags),(my_mode),(0UL),(0UL),(0UL)); + return my_ok; } -void( my_open_coutput)(struct my_compiler* my_c,unsigned char* my_filename){ - unsigned long my_fd = 0; - if ((my_c)->my_cout) { - (my_die)(((unsigned char *)"multiple output files")); +unsigned long( my_peg_PEG_suffix)(struct my_peg* my_c){ + unsigned long my_ok = 0; + (my_enter)((my_c),(my_PEG_suffix)); + (my_ok)=((my_peg_PEG_primary)((my_c))); + if (my_ok) { + while (1) { + (my_choice)((my_c)); + (my_ok)=((my_peg_PEG_countop)((my_c))); + if (my_ok) { + (my_ok)=((my_peg_PEG_sp)((my_c))); } - (my_unlink)((my_filename)); - (my_fd)=((my_open)((my_filename),((unsigned long)(((unsigned long)(my_O_CREAT))|((unsigned long)(my_O_WRONLY)))),((unsigned long)(((unsigned long)((unsigned long)(((unsigned long)((unsigned long)(((unsigned long)(6UL))<<((unsigned long)(6UL)))))+((unsigned long)((unsigned long)(((unsigned long)(6UL))<<((unsigned long)(3UL))))))))+((unsigned long)(6UL)))))); - if ((unsigned long)(((long)(my_fd))<((long)(0UL)))) { - (my_die)(((unsigned char *)"failed to open output")); + if ((unsigned long)(!(my_ok))) { + (my_ok)=(1UL); + break; } - ((my_c)->my_cout)=((my_fopen)((my_fd),((my_c)->my_a))); -} -void( my_open_output)(struct my_assembler* my_c,unsigned char* my_filename){ - unsigned long my_fd = 0; - if ((my_c)->my_out) { - (my_die)(((unsigned char *)"multiple output files")); + (my_commit)((my_c)); } - (my_unlink)((my_filename)); - (my_fd)=((my_open)((my_filename),((unsigned long)(((unsigned long)(my_O_CREAT))|((unsigned long)(my_O_WRONLY)))),((unsigned long)(((unsigned long)((unsigned long)(((unsigned long)((unsigned long)(((unsigned long)(7UL))<<((unsigned long)(6UL)))))+((unsigned long)((unsigned long)(((unsigned long)(7UL))<<((unsigned long)(3UL))))))))+((unsigned long)(7UL)))))); - if ((unsigned long)(((long)(my_fd))<((long)(0UL)))) { - (my_die)(((unsigned char *)"failed to open output")); } - ((my_c)->my_out)=((my_fopen)((my_fd),((my_c)->my_a))); -} -struct my_node*( my_parse)(struct my_parser* my_c,unsigned char* my_filename){ - struct my_file* my_f = 0; - unsigned long my_fd = 0; - unsigned long my_len = 0; - unsigned char* my_src = 0; - struct my_peg_node* my_pn = 0; - (my_fd)=((my_open)((my_filename),(0UL),(0UL))); - if ((unsigned long)(((long)(my_fd))<((long)(0UL)))) { - (my_fdputs)((2UL),((unsigned char *)"failed to open ")); - (my_fdputs)((2UL),(my_filename)); - (my_fdputs)((2UL),((unsigned char *)"\012")); - (my_exit)((1UL)); + if (my_ok) { + (my_leave)((my_c),(my_PEG_suffix)); + } else { + (my_fail)((my_c)); } - (my_f)=((my_fopen)((my_fd),((my_c)->my_a))); - (my_src)=((my_freadall)((my_f),(&(my_len)))); - (my_fclose)((my_f)); - (my_peg_reset)(((my_c)->my_p),(my_filename),(my_src),(my_len)); - (my_pn)=((my_peg_parse)(((my_c)->my_p),(my_P_sp),(my_peg_P_grammar))); - return (my_reconstruct)((my_c),(my_pn)); + return my_ok; } unsigned long( my_peg_P_add_expr)(struct my_peg* my_c){ unsigned long my_ok = 0; @@ -7143,6 +8086,28 @@ unsigned long( my_peg_P_xor_op)(struct my_peg* my_c){ } return my_ok; } +void( my_peg_compile)(struct my_peg_compiler* my_c,unsigned char* my_filename){ + unsigned long my_fd = 0; + struct my_file* my_f = 0; + unsigned char* my_src = 0; + unsigned long my_len = 0; + struct my_peg_node* my_node = 0; + if ((unsigned long)(((long)((my_strcmp)((my_filename),((unsigned char *)"-"))))==((long)(0UL)))) { + (my_fd)=(0UL); + } else { + (my_fd)=((my_open)((my_filename),(my_O_RDONLY),(0UL))); + if ((unsigned long)(((long)(my_fd))<((long)(0UL)))) { + (my_die)(((unsigned char *)"failed to open output")); + } + } + (my_f)=((my_fopen)((my_fd),((my_c)->my_a))); + (my_src)=((my_freadall)((my_f),(&(my_len)))); + (my_fclose)((my_f)); + ((my_c)->my_p)=((my_peg_new)((my_filename),(my_src),(my_len),((my_c)->my_a))); + (my_node)=((my_peg_parse)(((my_c)->my_p),(my_PEG_sp),(my_peg_PEG_grammar))); + (my_translate)((my_c),(my_node)); + (my_fflush)(((my_c)->my_out)); +} void( my_peg_free)(struct my_peg* my_c){ (my_free)(((my_c)->my_a),((unsigned char*)(my_c)->my_stack)); (my_free)(((my_c)->my_a),((unsigned char*)(my_c)->my_nstack)); @@ -7178,6 +8143,17 @@ struct my_peg*( my_peg_new)(unsigned char* my_filename,unsigned char* my_src,uns ((my_c)->my_np)=(0UL); return my_c; } +void( my_peg_open_output)(struct my_peg_compiler* my_c,unsigned char* my_filename){ + unsigned long my_fd = 0; + struct my_file* my_f = 0; + (my_unlink)((my_filename)); + (my_fd)=((my_open)((my_filename),((unsigned long)(((unsigned long)(my_O_CREAT))|((unsigned long)(my_O_WRONLY)))),((unsigned long)(((unsigned long)((unsigned long)(((unsigned long)((unsigned long)(((unsigned long)(6UL))<<((unsigned long)(6UL)))))+((unsigned long)((unsigned long)(((unsigned long)(6UL))<<((unsigned long)(3UL))))))))+((unsigned long)(6UL)))))); + if ((unsigned long)(((long)(my_fd))<((long)(0UL)))) { + (my_die)(((unsigned char *)"failed to open output")); + } + (my_f)=((my_fopen)((my_fd),((my_c)->my_a))); + ((my_c)->my_out)=(my_f); +} struct my_peg_node*( my_peg_parse)(struct my_peg* my_c,unsigned long my_sp,unsigned long(* my_grammar)(struct my_peg*)){ (my_choice)((my_c)); if ((unsigned long)(!((my_grammar)((my_c))))) { @@ -7188,7 +8164,7 @@ struct my_peg_node*( my_peg_parse)(struct my_peg* my_c,unsigned long my_sp,unsig (my_fdputs)((2UL),((unsigned char *)":")); (my_fdputd)((2UL),((my_c)->my_fail_col)); (my_fdputs)((2UL),((unsigned char *)" expected ")); - (my_fdputs)((2UL),((my_tag_to_str)(((my_c)->my_fail_tag)))); + (my_fdputs)((2UL),((my_P_tag_to_str)(((my_c)->my_fail_tag)))); if ((my_c)->my_fail_literal) { (my_fdputs)((2UL),((unsigned char *)" '")); (my_fdputs)((2UL),((my_c)->my_fail_literal)); @@ -7225,7 +8201,7 @@ void( my_peg_show)(struct my_file* my_out,struct my_peg_node* my_n){ unsigned char* my_hex = 0; (my_hex)=((unsigned char *)"0123456789abcdef"); (my_fputs)((my_out),((unsigned char *)"(")); - (my_fputs)((my_out),((my_tag_to_str)(((my_n)->my_tag)))); + (my_fputs)((my_out),((my_P_tag_to_str)(((my_n)->my_tag)))); if ((my_n)->my_child) { (my_n)=((my_n)->my_child); while (1) { @@ -8134,371 +9110,400 @@ void( my_reverse)(unsigned char* my_buf,unsigned long my_len){ (my_i)=(0UL); (my_len)=((unsigned long)(((unsigned long)(my_len))-((unsigned long)(1UL)))); while (1) { - if ((unsigned long)(((long)(my_i))>=((long)(my_len)))) { - break; - } - (my_x)=((my_buf)[my_i]); - ((my_buf)[my_i])=((my_buf)[my_len]); - ((my_buf)[my_len])=(my_x); - (my_i)=((unsigned long)(((unsigned long)(my_i))+((unsigned long)(1UL)))); - (my_len)=((unsigned long)(((unsigned long)(my_len))-((unsigned long)(1UL)))); - } -} -void( my_setup_alloc)(struct my_alloc* my_c){ - ((my_c)->my_page)=((struct my_page*)0UL); -} -struct my_assembler*( my_setup_assembler)(struct my_alloc* my_a){ - struct my_assembler* my_c = 0; - (my_c)=((struct my_assembler*)(my_alloc)((my_a),(48UL))); - ((my_c)->my_a)=(my_a); - ((my_c)->my_out)=((struct my_file*)0UL); - ((my_c)->my_at)=(0UL); - ((my_c)->my_text)=((struct my_chunk*)0UL); - ((my_c)->my_text_end)=((struct my_chunk*)0UL); - ((my_c)->my_bits32)=(0UL); - return my_c; -} -struct my_parser*( my_setup_parser)(struct my_alloc* my_a){ - struct my_parser* my_c = 0; - (my_c)=((struct my_parser*)(my_alloc)((my_a),(16UL))); - ((my_c)->my_a)=(my_a); - ((my_c)->my_p)=((my_peg_new)(((unsigned char *)""),((unsigned char *)""),(0UL),(my_a))); - return my_c; -} -void( my_show_node)(struct my_file* my_out,struct my_node* my_n){ - unsigned long my_i = 0; - unsigned long my_ch = 0; - unsigned char* my_hex = 0; - (my_hex)=((unsigned char *)"0123456789abcdef"); - if ((unsigned long)(!(my_n))) { - return; - } - (my_fputc)((my_out),(40)); - (my_fputs)((my_out),((my_node_to_str)(((my_n)->my_kind)))); - if ((unsigned long)(((long)((my_n)->my_kind))==((long)(my_N_NUM)))) { - (my_fputc)((my_out),(32)); - (my_fputd)((my_out),((my_n)->my_n)); - } - if ((my_n)->my_s) { - (my_fputc)((my_out),(32)); - (my_fputc)((my_out),(34)); - (my_i)=(0UL); - while (1) { - (my_ch)=((unsigned long)((my_n)->my_s)[my_i]); - if ((unsigned long)(!(my_ch))) { - break; - } - if ((unsigned long)(((unsigned long)(((long)(my_ch))<((long)(32UL))))||((unsigned long)(((unsigned long)(((long)(my_ch))>((long)(127UL))))||((unsigned long)(((unsigned long)(((long)(my_ch))==((long)(92))))||((unsigned long)(((long)(my_ch))==((long)(34)))))))))) { - (my_fputc)((my_out),(92)); - (my_fputc)((my_out),(120)); - (my_fputc)((my_out),((unsigned long)(my_hex)[(unsigned long)(((unsigned long)(my_ch))>>((unsigned long)(4UL)))])); - (my_fputc)((my_out),((unsigned long)(my_hex)[(unsigned long)(((unsigned long)(my_ch))&((unsigned long)(15UL)))])); - } else { - (my_fputc)((my_out),(my_ch)); - } - (my_i)=((unsigned long)(((unsigned long)(my_i))+((unsigned long)(1UL)))); - } - (my_fputc)((my_out),(34)); - } - if ((my_n)->my_a) { - (my_fputc)((my_out),(32)); - (my_show_node)((my_out),((my_n)->my_a)); - } - if ((my_n)->my_b) { - (my_fputc)((my_out),(32)); - (my_show_node)((my_out),((my_n)->my_b)); - } - (my_fputc)((my_out),(41)); -} -unsigned long( my_sigaction)(unsigned long my_sig,struct my_sigaction* my_act,struct my_sigaction* my_oact){ - return (my_syscall)((13UL),(my_sig),((unsigned long)my_act),((unsigned long)my_oact),(8UL),(0UL),(0UL)); -} -unsigned long( my_socket)(unsigned long my_pf,unsigned long my_ty,unsigned long my_pc){ - return (my_syscall)((41UL),(my_pf),(my_ty),(my_pc),(0UL),(0UL),(0UL)); -} -unsigned long( my_strcmp)(unsigned char* my_a,unsigned char* my_b){ - unsigned long my_i = 0; - (my_i)=(0UL); - while (1) { - if ((unsigned long)(((long)((my_a)[my_i]))>((long)((my_b)[my_i])))) { - return 1UL; - } - if ((unsigned long)(((long)((my_a)[my_i]))<((long)((my_b)[my_i])))) { - return (unsigned long)(-(unsigned long)(1UL)); - } - if ((unsigned long)(((long)((my_a)[my_i]))==((long)((unsigned char)0UL)))) { - return 0UL; - } - (my_i)=((unsigned long)(((unsigned long)(my_i))+((unsigned long)(1UL)))); - } -} -unsigned long( my_strlen)(unsigned char* my_s){ - unsigned long my_ret = 0; - (my_ret)=(0UL); - while (1) { - if ((unsigned long)(((long)((my_s)[my_ret]))==((long)((unsigned char)0UL)))) { - return my_ret; - } - (my_ret)=((unsigned long)(((unsigned long)(my_ret))+((unsigned long)(1UL)))); - } -} -unsigned char*( my_tag_to_str)(unsigned long my_tag){ - if ((unsigned long)(((long)(my_tag))==((long)(my_P_grammar)))) { - return (unsigned char *)"grammar"; - } - if ((unsigned long)(((long)(my_tag))==((long)(my_P_enum_item)))) { - return (unsigned char *)"enum_item"; - } - if ((unsigned long)(((long)(my_tag))==((long)(my_P_enum_decl)))) { - return (unsigned char *)"enum_decl"; - } - if ((unsigned long)(((long)(my_tag))==((long)(my_P_member_decl)))) { - return (unsigned char *)"member_decl"; - } - if ((unsigned long)(((long)(my_tag))==((long)(my_P_struct_decl)))) { - return (unsigned char *)"struct_decl"; - } - if ((unsigned long)(((long)(my_tag))==((long)(my_P_func_decl)))) { - return (unsigned char *)"func_decl"; - } - if ((unsigned long)(((long)(my_tag))==((long)(my_P_type)))) { - return (unsigned char *)"type"; - } - if ((unsigned long)(((long)(my_tag))==((long)(my_P_ptr_type)))) { - return (unsigned char *)"ptr_type"; - } - if ((unsigned long)(((long)(my_tag))==((long)(my_P_arg_decl)))) { - return (unsigned char *)"arg_decl"; - } - if ((unsigned long)(((long)(my_tag))==((long)(my_P_func_type)))) { - return (unsigned char *)"func_type"; - } - if ((unsigned long)(((long)(my_tag))==((long)(my_P_stmt)))) { - return (unsigned char *)"stmt"; - } - if ((unsigned long)(((long)(my_tag))==((long)(my_P_elif_stmt)))) { - return (unsigned char *)"elif_stmt"; - } - if ((unsigned long)(((long)(my_tag))==((long)(my_P_else_stmt)))) { - return (unsigned char *)"else_stmt"; - } - if ((unsigned long)(((long)(my_tag))==((long)(my_P_if_stmt)))) { - return (unsigned char *)"if_stmt"; - } - if ((unsigned long)(((long)(my_tag))==((long)(my_P_loop_stmt)))) { - return (unsigned char *)"loop_stmt"; - } - if ((unsigned long)(((long)(my_tag))==((long)(my_P_break_stmt)))) { - return (unsigned char *)"break_stmt"; - } - if ((unsigned long)(((long)(my_tag))==((long)(my_P_continue_stmt)))) { - return (unsigned char *)"continue_stmt"; - } - if ((unsigned long)(((long)(my_tag))==((long)(my_P_return_stmt)))) { - return (unsigned char *)"return_stmt"; - } - if ((unsigned long)(((long)(my_tag))==((long)(my_P_var_stmt)))) { - return (unsigned char *)"var_stmt"; - } - if ((unsigned long)(((long)(my_tag))==((long)(my_P_label_stmt)))) { - return (unsigned char *)"label_stmt"; - } - if ((unsigned long)(((long)(my_tag))==((long)(my_P_goto_stmt)))) { - return (unsigned char *)"goto_stmt"; - } - if ((unsigned long)(((long)(my_tag))==((long)(my_P_assign_stmt)))) { - return (unsigned char *)"assign_stmt"; - } - if ((unsigned long)(((long)(my_tag))==((long)(my_P_expr_stmt)))) { - return (unsigned char *)"expr_stmt"; - } - if ((unsigned long)(((long)(my_tag))==((long)(my_P_empty_stmt)))) { - return (unsigned char *)"empty_stmt"; - } - if ((unsigned long)(((long)(my_tag))==((long)(my_P_compound_stmt)))) { - return (unsigned char *)"compound_stmt"; - } - if ((unsigned long)(((long)(my_tag))==((long)(my_P_expr)))) { - return (unsigned char *)"expr"; - } - if ((unsigned long)(((long)(my_tag))==((long)(my_P_band_op)))) { - return (unsigned char *)"band_op"; - } - if ((unsigned long)(((long)(my_tag))==((long)(my_P_bor_op)))) { - return (unsigned char *)"bor_op"; - } - if ((unsigned long)(((long)(my_tag))==((long)(my_P_bool_expr)))) { - return (unsigned char *)"bool_expr"; - } - if ((unsigned long)(((long)(my_tag))==((long)(my_P_le_op)))) { - return (unsigned char *)"le_op"; - } - if ((unsigned long)(((long)(my_tag))==((long)(my_P_ge_op)))) { - return (unsigned char *)"ge_op"; - } - if ((unsigned long)(((long)(my_tag))==((long)(my_P_lt_op)))) { - return (unsigned char *)"lt_op"; - } - if ((unsigned long)(((long)(my_tag))==((long)(my_P_gt_op)))) { - return (unsigned char *)"gt_op"; - } - if ((unsigned long)(((long)(my_tag))==((long)(my_P_eq_op)))) { - return (unsigned char *)"eq_op"; - } - if ((unsigned long)(((long)(my_tag))==((long)(my_P_ne_op)))) { - return (unsigned char *)"ne_op"; - } - if ((unsigned long)(((long)(my_tag))==((long)(my_P_comp_expr)))) { - return (unsigned char *)"comp_expr"; - } - if ((unsigned long)(((long)(my_tag))==((long)(my_P_add_op)))) { - return (unsigned char *)"add_op"; - } - if ((unsigned long)(((long)(my_tag))==((long)(my_P_sub_op)))) { - return (unsigned char *)"sub_op"; - } - if ((unsigned long)(((long)(my_tag))==((long)(my_P_or_op)))) { - return (unsigned char *)"or_op"; + if ((unsigned long)(((long)(my_i))>=((long)(my_len)))) { + break; } - if ((unsigned long)(((long)(my_tag))==((long)(my_P_xor_op)))) { - return (unsigned char *)"xor_op"; + (my_x)=((my_buf)[my_i]); + ((my_buf)[my_i])=((my_buf)[my_len]); + ((my_buf)[my_len])=(my_x); + (my_i)=((unsigned long)(((unsigned long)(my_i))+((unsigned long)(1UL)))); + (my_len)=((unsigned long)(((unsigned long)(my_len))-((unsigned long)(1UL)))); } - if ((unsigned long)(((long)(my_tag))==((long)(my_P_add_expr)))) { - return (unsigned char *)"add_expr"; +} +void( my_setup_alloc)(struct my_alloc* my_c){ + ((my_c)->my_page)=((struct my_page*)0UL); +} +struct my_assembler*( my_setup_assembler)(struct my_alloc* my_a){ + struct my_assembler* my_c = 0; + (my_c)=((struct my_assembler*)(my_alloc)((my_a),(48UL))); + ((my_c)->my_a)=(my_a); + ((my_c)->my_out)=((struct my_file*)0UL); + ((my_c)->my_at)=(0UL); + ((my_c)->my_text)=((struct my_chunk*)0UL); + ((my_c)->my_text_end)=((struct my_chunk*)0UL); + ((my_c)->my_bits32)=(0UL); + return my_c; +} +struct my_parser*( my_setup_parser)(struct my_alloc* my_a){ + struct my_parser* my_c = 0; + (my_c)=((struct my_parser*)(my_alloc)((my_a),(16UL))); + ((my_c)->my_a)=(my_a); + ((my_c)->my_p)=((my_peg_new)(((unsigned char *)""),((unsigned char *)""),(0UL),(my_a))); + return my_c; +} +struct my_peg_compiler*( my_setup_peg)(struct my_alloc* my_a,unsigned char* my_prefix){ + struct my_peg_compiler* my_c = 0; + (my_c)=((struct my_peg_compiler*)(my_alloc)((my_a),(40UL))); + ((my_c)->my_a)=(my_a); + ((my_c)->my_prefix)=(my_prefix); + ((my_c)->my_scratch)=((my_alloc)(((my_c)->my_a),(256UL))); + return my_c; +} +void( my_show_node)(struct my_file* my_out,struct my_node* my_n){ + unsigned long my_i = 0; + unsigned long my_ch = 0; + unsigned char* my_hex = 0; + (my_hex)=((unsigned char *)"0123456789abcdef"); + if ((unsigned long)(!(my_n))) { + return; } - if ((unsigned long)(((long)(my_tag))==((long)(my_P_mul_op)))) { - return (unsigned char *)"mul_op"; + (my_fputc)((my_out),(40)); + (my_fputs)((my_out),((my_node_to_str)(((my_n)->my_kind)))); + if ((unsigned long)(((long)((my_n)->my_kind))==((long)(my_N_NUM)))) { + (my_fputc)((my_out),(32)); + (my_fputd)((my_out),((my_n)->my_n)); } - if ((unsigned long)(((long)(my_tag))==((long)(my_P_div_op)))) { - return (unsigned char *)"div_op"; + if ((my_n)->my_s) { + (my_fputc)((my_out),(32)); + (my_fputc)((my_out),(34)); + (my_i)=(0UL); + while (1) { + (my_ch)=((unsigned long)((my_n)->my_s)[my_i]); + if ((unsigned long)(!(my_ch))) { + break; } - if ((unsigned long)(((long)(my_tag))==((long)(my_P_mod_op)))) { - return (unsigned char *)"mod_op"; + if ((unsigned long)(((unsigned long)(((long)(my_ch))<((long)(32UL))))||((unsigned long)(((unsigned long)(((long)(my_ch))>((long)(127UL))))||((unsigned long)(((unsigned long)(((long)(my_ch))==((long)(92))))||((unsigned long)(((long)(my_ch))==((long)(34)))))))))) { + (my_fputc)((my_out),(92)); + (my_fputc)((my_out),(120)); + (my_fputc)((my_out),((unsigned long)(my_hex)[(unsigned long)(((unsigned long)(my_ch))>>((unsigned long)(4UL)))])); + (my_fputc)((my_out),((unsigned long)(my_hex)[(unsigned long)(((unsigned long)(my_ch))&((unsigned long)(15UL)))])); + } else { + (my_fputc)((my_out),(my_ch)); } - if ((unsigned long)(((long)(my_tag))==((long)(my_P_and_op)))) { - return (unsigned char *)"and_op"; + (my_i)=((unsigned long)(((unsigned long)(my_i))+((unsigned long)(1UL)))); } - if ((unsigned long)(((long)(my_tag))==((long)(my_P_mul_expr)))) { - return (unsigned char *)"mul_expr"; + (my_fputc)((my_out),(34)); } - if ((unsigned long)(((long)(my_tag))==((long)(my_P_lsh_op)))) { - return (unsigned char *)"lsh_op"; + if ((my_n)->my_a) { + (my_fputc)((my_out),(32)); + (my_show_node)((my_out),((my_n)->my_a)); } - if ((unsigned long)(((long)(my_tag))==((long)(my_P_rsh_op)))) { - return (unsigned char *)"rsh_op"; + if ((my_n)->my_b) { + (my_fputc)((my_out),(32)); + (my_show_node)((my_out),((my_n)->my_b)); } - if ((unsigned long)(((long)(my_tag))==((long)(my_P_shift_expr)))) { - return (unsigned char *)"shift_expr"; + (my_fputc)((my_out),(41)); +} +unsigned long( my_sigaction)(unsigned long my_sig,struct my_sigaction* my_act,struct my_sigaction* my_oact){ + return (my_syscall)((13UL),(my_sig),((unsigned long)my_act),((unsigned long)my_oact),(8UL),(0UL),(0UL)); +} +unsigned long( my_socket)(unsigned long my_pf,unsigned long my_ty,unsigned long my_pc){ + return (my_syscall)((41UL),(my_pf),(my_ty),(my_pc),(0UL),(0UL),(0UL)); +} +unsigned long( my_strcmp)(unsigned char* my_a,unsigned char* my_b){ + unsigned long my_i = 0; + (my_i)=(0UL); + while (1) { + if ((unsigned long)(((long)((my_a)[my_i]))>((long)((my_b)[my_i])))) { + return 1UL; } - if ((unsigned long)(((long)(my_tag))==((long)(my_P_ref_op)))) { - return (unsigned char *)"ref_op"; + if ((unsigned long)(((long)((my_a)[my_i]))<((long)((my_b)[my_i])))) { + return (unsigned long)(-(unsigned long)(1UL)); } - if ((unsigned long)(((long)(my_tag))==((long)(my_P_deref_op)))) { - return (unsigned char *)"deref_op"; + if ((unsigned long)(((long)((my_a)[my_i]))==((long)((unsigned char)0UL)))) { + return 0UL; } - if ((unsigned long)(((long)(my_tag))==((long)(my_P_pos_op)))) { - return (unsigned char *)"pos_op"; + (my_i)=((unsigned long)(((unsigned long)(my_i))+((unsigned long)(1UL)))); } - if ((unsigned long)(((long)(my_tag))==((long)(my_P_neg_op)))) { - return (unsigned char *)"neg_op"; +} +unsigned long( my_strlen)(unsigned char* my_s){ + unsigned long my_ret = 0; + (my_ret)=(0UL); + while (1) { + if ((unsigned long)(((long)((my_s)[my_ret]))==((long)((unsigned char)0UL)))) { + return my_ret; } - if ((unsigned long)(((long)(my_tag))==((long)(my_P_not_op)))) { - return (unsigned char *)"not_op"; + (my_ret)=((unsigned long)(((unsigned long)(my_ret))+((unsigned long)(1UL)))); } - if ((unsigned long)(((long)(my_tag))==((long)(my_P_bnot_op)))) { - return (unsigned char *)"bnot_op"; +} +void( my_translate)(struct my_peg_compiler* my_c,struct my_peg_node* my_n){ + struct my_peg_node* my_v = 0; + (my_fputs)(((my_c)->my_out),((unsigned char *)"enum {\012")); + (my_v)=((my_n)->my_child); + while (1) { + if ((unsigned long)(!(my_v))) { + break; } - if ((unsigned long)(((long)(my_tag))==((long)(my_P_unary_expr)))) { - return (unsigned char *)"unary_expr"; + if ((unsigned long)(((long)((my_v)->my_tag))==((long)(my_PEG_rule)))) { + (my_fputs)(((my_c)->my_out),((unsigned char *)" ")); + (my_fputs)(((my_c)->my_out),((my_c)->my_prefix)); + (my_fputb)(((my_c)->my_out),(((my_v)->my_child)->my_str),(((my_v)->my_child)->my_len)); + (my_fputs)(((my_c)->my_out),((unsigned char *)",\012")); } - if ((unsigned long)(((long)(my_tag))==((long)(my_P_index_expr)))) { - return (unsigned char *)"index_expr"; + (my_v)=((my_v)->my_next); } - if ((unsigned long)(((long)(my_tag))==((long)(my_P_call_expr)))) { - return (unsigned char *)"call_expr"; + (my_fputs)(((my_c)->my_out),((unsigned char *)"}\012\012")); + (my_fputs)(((my_c)->my_out),((my_c)->my_prefix)); + (my_fputs)(((my_c)->my_out),((unsigned char *)"tag_to_str(tag: int): *byte {\012")); + (my_v)=((my_n)->my_child); + while (1) { + if ((unsigned long)(!(my_v))) { + break; } - if ((unsigned long)(((long)(my_tag))==((long)(my_P_member_expr)))) { - return (unsigned char *)"member_expr"; + if ((unsigned long)(((long)((my_v)->my_tag))==((long)(my_PEG_rule)))) { + (my_fputs)(((my_c)->my_out),((unsigned char *)" if tag == ")); + (my_fputs)(((my_c)->my_out),((my_c)->my_prefix)); + (my_fputb)(((my_c)->my_out),(((my_v)->my_child)->my_str),(((my_v)->my_child)->my_len)); + (my_fputs)(((my_c)->my_out),((unsigned char *)" { return \042")); + (my_fputb)(((my_c)->my_out),(((my_v)->my_child)->my_str),(((my_v)->my_child)->my_len)); + (my_fputs)(((my_c)->my_out),((unsigned char *)"\042; }\012")); } - if ((unsigned long)(((long)(my_tag))==((long)(my_P_cast_expr)))) { - return (unsigned char *)"cast_expr"; + (my_v)=((my_v)->my_next); } - if ((unsigned long)(((long)(my_tag))==((long)(my_P_post_expr)))) { - return (unsigned char *)"post_expr"; + (my_fputs)(((my_c)->my_out),((unsigned char *)" die(\042invalid tag\042);\012")); + (my_fputs)(((my_c)->my_out),((unsigned char *)"}\012")); + (my_v)=((my_n)->my_child); + while (1) { + if ((unsigned long)(!(my_v))) { + break; } - if ((unsigned long)(((long)(my_tag))==((long)(my_P_primary)))) { - return (unsigned char *)"primary"; + if ((unsigned long)(((long)((my_v)->my_tag))==((long)(my_PEG_rule)))) { + (my_fputs)(((my_c)->my_out),((unsigned char *)"\012peg_")); + (my_fputs)(((my_c)->my_out),((my_c)->my_prefix)); + (my_fputb)(((my_c)->my_out),(((my_v)->my_child)->my_str),(((my_v)->my_child)->my_len)); + (my_fputs)(((my_c)->my_out),((unsigned char *)"(c: *peg): int {\012")); + (my_fputs)(((my_c)->my_out),((unsigned char *)" var ok: int;\012")); + (my_fputs)(((my_c)->my_out),((unsigned char *)" enter(c, ")); + (my_fputs)(((my_c)->my_out),((my_c)->my_prefix)); + (my_fputb)(((my_c)->my_out),(((my_v)->my_child)->my_str),(((my_v)->my_child)->my_len)); + (my_fputs)(((my_c)->my_out),((unsigned char *)");\012")); + (my_translate_pattern)((my_c),(((my_v)->my_child)->my_next)); + (my_fputs)(((my_c)->my_out),((unsigned char *)" if ok { leave(c, ")); + (my_fputs)(((my_c)->my_out),((my_c)->my_prefix)); + (my_fputb)(((my_c)->my_out),(((my_v)->my_child)->my_str),(((my_v)->my_child)->my_len)); + (my_fputs)(((my_c)->my_out),((unsigned char *)"); } else { fail(c); }\012")); + (my_fputs)(((my_c)->my_out),((unsigned char *)" return ok;\012")); + (my_fputs)(((my_c)->my_out),((unsigned char *)"}\012")); + } + (my_v)=((my_v)->my_next); + } +} +void( my_translate_charset)(struct my_peg_compiler* my_c,struct my_peg_node* my_n){ + unsigned long my_i = 0; + unsigned long my_len = 0; + unsigned long my_ch = 0; + unsigned long my_a = 0; + unsigned long my_b = 0; + unsigned char* my_hex = 0; + unsigned long my_count = 0; + (my_hex)=((unsigned char *)"0123456789abcdef"); + (my_memset)(((my_c)->my_scratch),(0UL),(256UL)); + (my_i)=(1UL); + (my_len)=((unsigned long)(((unsigned long)((my_n)->my_len))-((unsigned long)(1UL)))); + while (1) { + if ((unsigned long)(((long)(my_i))==((long)(my_len)))) { + break; } - if ((unsigned long)(((long)(my_tag))==((long)(my_P_sizeof_expr)))) { - return (unsigned char *)"sizeof_expr"; + (my_ch)=((unsigned long)((my_n)->my_str)[my_i]); + (my_i)=((unsigned long)(((unsigned long)(my_i))+((unsigned long)(1UL)))); + if ((unsigned long)(((long)(my_ch))==((long)(92)))) { + (my_ch)=((my_parse_escape)(((my_n)->my_str),(&(my_i)),(my_len))); } - if ((unsigned long)(((long)(my_tag))==((long)(my_P_hex)))) { - return (unsigned char *)"hex"; + if ((unsigned long)(((unsigned long)(((long)(my_i))<((long)(my_len))))&&((unsigned long)(((long)(((my_n)->my_str)[my_i]))==((long)((unsigned char)45)))))) { + (my_i)=((unsigned long)(((unsigned long)(my_i))+((unsigned long)(1UL)))); + if ((unsigned long)(((long)(my_i))==((long)(my_len)))) { + (my_die)(((unsigned char *)"invalid range")); } - if ((unsigned long)(((long)(my_tag))==((long)(my_P_dec)))) { - return (unsigned char *)"dec"; + (my_a)=(my_ch); + (my_ch)=((unsigned long)((my_n)->my_str)[my_i]); + (my_i)=((unsigned long)(((unsigned long)(my_i))+((unsigned long)(1UL)))); + if ((unsigned long)(((long)(my_ch))==((long)(92)))) { + (my_ch)=((my_parse_escape)(((my_n)->my_str),(&(my_i)),(my_len))); } - if ((unsigned long)(((long)(my_tag))==((long)(my_P_str)))) { - return (unsigned char *)"str"; + (my_b)=(my_ch); + while (1) { + if ((unsigned long)(((long)(my_a))>((long)(my_b)))) { + break; } - if ((unsigned long)(((long)(my_tag))==((long)(my_P_char)))) { - return (unsigned char *)"char"; + (((my_c)->my_scratch)[my_a])=((unsigned char)1UL); + (my_a)=((unsigned long)(((unsigned long)(my_a))+((unsigned long)(1UL)))); } - if ((unsigned long)(((long)(my_tag))==((long)(my_P_reserved)))) { - return (unsigned char *)"reserved"; + } else { + (((my_c)->my_scratch)[my_ch])=((unsigned char)1UL); } - if ((unsigned long)(((long)(my_tag))==((long)(my_P_return)))) { - return (unsigned char *)"return"; } - if ((unsigned long)(((long)(my_tag))==((long)(my_P_break)))) { - return (unsigned char *)"break"; + (my_count)=(0UL); + (my_i)=(1UL); + while (1) { + if ((unsigned long)(((long)(my_i))==((long)(256UL)))) { + break; } - if ((unsigned long)(((long)(my_tag))==((long)(my_P_sizeof)))) { - return (unsigned char *)"sizeof"; + (my_count)=((unsigned long)(((unsigned long)(my_count))+((unsigned long)((unsigned long)((my_c)->my_scratch)[my_i])))); + (my_i)=((unsigned long)(((unsigned long)(my_i))+((unsigned long)(1UL)))); } - if ((unsigned long)(((long)(my_tag))==((long)(my_P_if)))) { - return (unsigned char *)"if"; + if ((unsigned long)(((long)(my_count))==((long)(0UL)))) { + (my_fputs)(((my_c)->my_out),((unsigned char *)" fail(c);\012")); + (my_fputs)(((my_c)->my_out),((unsigned char *)" ok = 0;\012")); + return; + } else if ((unsigned long)(((long)(my_count))>=((long)(255UL)))) { + (my_fputs)(((my_c)->my_out),((unsigned char *)" ok = any(c);\012")); + return; + } else if ((unsigned long)(((long)(my_count))==((long)(1UL)))) { + (my_fputs)(((my_c)->my_out),((unsigned char *)" ok = literal(c, \042")); + } else { + (my_fputs)(((my_c)->my_out),((unsigned char *)" ok = charset(c, \042")); } - if ((unsigned long)(((long)(my_tag))==((long)(my_P_else)))) { - return (unsigned char *)"else"; + (my_i)=(1UL); + while (1) { + if ((unsigned long)(((long)(my_i))==((long)(256UL)))) { + break; } - if ((unsigned long)(((long)(my_tag))==((long)(my_P_loop)))) { - return (unsigned char *)"loop"; + if (((my_c)->my_scratch)[my_i]) { + if ((unsigned long)(((unsigned long)(((long)(my_ch))<((long)(32UL))))||((unsigned long)(((unsigned long)(((long)(my_ch))>((long)(127UL))))||((unsigned long)(((unsigned long)(((long)(my_ch))==((long)(92))))||((unsigned long)(((long)(my_ch))==((long)(34)))))))))) { + (my_fputc)(((my_c)->my_out),(92)); + (my_fputc)(((my_c)->my_out),(120)); + (my_fputc)(((my_c)->my_out),((unsigned long)(my_hex)[(unsigned long)(((unsigned long)(my_i))>>((unsigned long)(4UL)))])); + (my_fputc)(((my_c)->my_out),((unsigned long)(my_hex)[(unsigned long)(((unsigned long)(my_i))&((unsigned long)(15UL)))])); + } else { + (my_fputc)(((my_c)->my_out),(my_i)); } - if ((unsigned long)(((long)(my_tag))==((long)(my_P_continue)))) { - return (unsigned char *)"continue"; } - if ((unsigned long)(((long)(my_tag))==((long)(my_P_goto)))) { - return (unsigned char *)"goto"; + (my_i)=((unsigned long)(((unsigned long)(my_i))+((unsigned long)(1UL)))); } - if ((unsigned long)(((long)(my_tag))==((long)(my_P_var)))) { - return (unsigned char *)"var"; + (my_fputs)(((my_c)->my_out),((unsigned char *)"\042);\012")); +} +void( my_translate_literal)(struct my_peg_compiler* my_c,struct my_peg_node* my_n){ + unsigned long my_i = 0; + unsigned long my_len = 0; + unsigned long my_ch = 0; + unsigned char* my_hex = 0; + (my_hex)=((unsigned char *)"0123456789abcdef"); + (my_fputs)(((my_c)->my_out),((unsigned char *)" ok = literal(c, \042")); + (my_i)=(1UL); + (my_len)=((unsigned long)(((unsigned long)((my_n)->my_len))-((unsigned long)(1UL)))); + while (1) { + if ((unsigned long)(((long)(my_i))==((long)(my_len)))) { + break; } - if ((unsigned long)(((long)(my_tag))==((long)(my_P_enum)))) { - return (unsigned char *)"enum"; + (my_ch)=((unsigned long)((my_n)->my_str)[my_i]); + if ((unsigned long)(((unsigned long)(((long)(my_ch))<((long)(32UL))))||((unsigned long)(((unsigned long)(((long)(my_ch))>((long)(127UL))))||((unsigned long)(((unsigned long)(((long)(my_ch))==((long)(92))))||((unsigned long)(((long)(my_ch))==((long)(34)))))))))) { + (my_fputc)(((my_c)->my_out),(92)); + (my_fputc)(((my_c)->my_out),(120)); + (my_fputc)(((my_c)->my_out),((unsigned long)(my_hex)[(unsigned long)(((unsigned long)(my_ch))>>((unsigned long)(4UL)))])); + (my_fputc)(((my_c)->my_out),((unsigned long)(my_hex)[(unsigned long)(((unsigned long)(my_ch))&((unsigned long)(15UL)))])); + } else { + (my_fputc)(((my_c)->my_out),(my_ch)); } - if ((unsigned long)(((long)(my_tag))==((long)(my_P_struct)))) { - return (unsigned char *)"struct"; + (my_i)=((unsigned long)(((unsigned long)(my_i))+((unsigned long)(1UL)))); } - if ((unsigned long)(((long)(my_tag))==((long)(my_P_byte)))) { - return (unsigned char *)"byte"; + (my_fputs)(((my_c)->my_out),((unsigned char *)"\042);\012")); +} +void( my_translate_pattern)(struct my_peg_compiler* my_c,struct my_peg_node* my_n){ + unsigned long my_count = 0; + unsigned long my_look = 0; + struct my_peg_node* my_d = 0; + while (1) { + if ((unsigned long)(((long)((my_n)->my_tag))==((long)(my_PEG_pattern)))) { + (my_d)=((my_n)->my_child); + if ((unsigned long)(!((my_d)->my_next))) { + (my_translate_pattern)((my_c),(my_d)); + } else { + (my_fputs)(((my_c)->my_out),((unsigned char *)" choice(c);\012")); + (my_translate_pattern)((my_c),(my_d)); + (my_d)=((my_d)->my_next); + while (1) { + if ((unsigned long)(!(my_d))) { + break; } - if ((unsigned long)(((long)(my_tag))==((long)(my_P_int)))) { - return (unsigned char *)"int"; + (my_fputs)(((my_c)->my_out),((unsigned char *)" if !ok { choice(c);\012")); + (my_translate_pattern)((my_c),(my_d)); + (my_fputs)(((my_c)->my_out),((unsigned char *)" }\012")); + (my_d)=((my_d)->my_next); } - if ((unsigned long)(((long)(my_tag))==((long)(my_P_void)))) { - return (unsigned char *)"void"; + (my_fputs)(((my_c)->my_out),((unsigned char *)" if ok { commit(c); } else { fail(c); }\012")); } - if ((unsigned long)(((long)(my_tag))==((long)(my_P_func)))) { - return (unsigned char *)"func"; + } else if ((unsigned long)(((long)((my_n)->my_tag))==((long)(my_PEG_alternative)))) { + (my_d)=((my_n)->my_child); + (my_translate_pattern)((my_c),(my_d)); + (my_d)=((my_d)->my_next); + while (1) { + if ((unsigned long)(!(my_d))) { + break; } - if ((unsigned long)(((long)(my_tag))==((long)(my_P_ident)))) { - return (unsigned char *)"ident"; + (my_fputs)(((my_c)->my_out),((unsigned char *)" if ok {\012")); + (my_translate_pattern)((my_c),(my_d)); + (my_fputs)(((my_c)->my_out),((unsigned char *)" }\012")); + (my_d)=((my_d)->my_next); + } + } else if ((unsigned long)(((long)((my_n)->my_tag))==((long)(my_PEG_lookahead)))) { + (my_look)=((my_decode_look)((my_n))); + (my_d)=((my_n)->my_child); + if ((unsigned long)(((long)((my_d)->my_tag))==((long)(my_PEG_lookop)))) { + (my_d)=((my_d)->my_next); + } + if ((unsigned long)(((long)(my_look))==((long)(my_LOOK_AND)))) { + (my_fputs)(((my_c)->my_out),((unsigned char *)" choice(c);\012")); + (my_translate_pattern)((my_c),(my_d)); + (my_fputs)(((my_c)->my_out),((unsigned char *)" fail(c);\012")); + } else if ((unsigned long)(((long)(my_look))==((long)(my_LOOK_NOT)))) { + (my_fputs)(((my_c)->my_out),((unsigned char *)" choice(c);\012")); + (my_translate_pattern)((my_c),(my_d)); + (my_fputs)(((my_c)->my_out),((unsigned char *)" if ok { fail(c); fail(c); ok = 0; } else { ok = 1; }\012")); + } else if ((unsigned long)(((long)(my_look))==((long)(my_LOOK_NORMAL)))) { + (my_translate_pattern)((my_c),(my_d)); + } else { + (my_die)(((unsigned char *)"invalid lookop")); + } + } else if ((unsigned long)(((long)((my_n)->my_tag))==((long)(my_PEG_suffix)))) { + (my_count)=((my_decode_count)((my_n))); + if ((unsigned long)(((long)(my_count))==((long)(my_ZERO_OR_ONE)))) { + (my_fputs)(((my_c)->my_out),((unsigned char *)" choice(c);\012")); + (my_translate_pattern)((my_c),((my_n)->my_child)); + (my_fputs)(((my_c)->my_out),((unsigned char *)" if ok { commit(c); } else { ok = 1; }\012")); + } else if ((unsigned long)(((long)(my_count))==((long)(my_EXACTLY_ONE)))) { + (my_translate_pattern)((my_c),((my_n)->my_child)); + } else if ((unsigned long)(((long)(my_count))==((long)(my_ZERO_OR_MORE)))) { + (my_fputs)(((my_c)->my_out),((unsigned char *)" loop {\012")); + (my_fputs)(((my_c)->my_out),((unsigned char *)" choice(c);\012")); + (my_translate_pattern)((my_c),((my_n)->my_child)); + (my_fputs)(((my_c)->my_out),((unsigned char *)" if !ok { ok = 1; break; }\012")); + (my_fputs)(((my_c)->my_out),((unsigned char *)" commit(c);\012")); + (my_fputs)(((my_c)->my_out),((unsigned char *)" }\012")); + } else if ((unsigned long)(((long)(my_count))==((long)(my_ONE_OR_MORE)))) { + (my_translate_pattern)((my_c),((my_n)->my_child)); + (my_fputs)(((my_c)->my_out),((unsigned char *)" if ok {\012")); + (my_fputs)(((my_c)->my_out),((unsigned char *)" loop {\012")); + (my_fputs)(((my_c)->my_out),((unsigned char *)" choice(c);\012")); + (my_translate_pattern)((my_c),((my_n)->my_child)); + (my_fputs)(((my_c)->my_out),((unsigned char *)" if !ok { ok = 1; break; }\012")); + (my_fputs)(((my_c)->my_out),((unsigned char *)" commit(c);\012")); + (my_fputs)(((my_c)->my_out),((unsigned char *)" }\012")); + (my_fputs)(((my_c)->my_out),((unsigned char *)" }\012")); + } else { + (my_die)(((unsigned char *)"invalid countop")); + } + } else if ((unsigned long)(((long)((my_n)->my_tag))==((long)(my_PEG_primary)))) { + (my_translate_pattern)((my_c),((my_n)->my_child)); + } else if ((unsigned long)(((long)((my_n)->my_tag))==((long)(my_PEG_any)))) { + (my_fputs)(((my_c)->my_out),((unsigned char *)" ok = any(c);\012")); + } else if ((unsigned long)(((long)((my_n)->my_tag))==((long)(my_PEG_literal)))) { + (my_translate_literal)((my_c),(my_n)); + } else if ((unsigned long)(((long)((my_n)->my_tag))==((long)(my_PEG_class)))) { + (my_translate_charset)((my_c),(my_n)); + } else if ((unsigned long)(((long)((my_n)->my_tag))==((long)(my_PEG_call)))) { + (my_fputs)(((my_c)->my_out),((unsigned char *)" ok = peg_")); + (my_fputs)(((my_c)->my_out),((my_c)->my_prefix)); + (my_fputb)(((my_c)->my_out),(((my_n)->my_child)->my_str),(((my_n)->my_child)->my_len)); + (my_fputs)(((my_c)->my_out),((unsigned char *)"(c);\012")); + } else if ((unsigned long)(((long)((my_n)->my_tag))==((long)(my_PEG_sp)))) { + (my_n)=((my_n)->my_next); + continue; + } else { + (my_fdputs)((2UL),((my_PEG_tag_to_str)(((my_n)->my_tag)))); + (my_die)(((unsigned char *)"invalid tag")); } - if ((unsigned long)(((long)(my_tag))==((long)(my_P_sp)))) { - return (unsigned char *)"sp"; + break; } - (my_die)(((unsigned char *)"invalid tag")); } unsigned long( my_type_isint)(struct my_type* my_t){ return (unsigned long)(((unsigned long)(((long)((my_t)->my_kind))==((long)(my_TY_INT))))||((unsigned long)(((long)((my_t)->my_kind))==((long)(my_TY_BYTE))))); diff --git a/cc1.c b/cc1.c @@ -160,6 +160,10 @@ defextern(c: *compiler, n: *node): *decl { var name: *byte; var t: *type; + c.filename = n.filename; + c.lineno = n.lineno; + c.colno = n.colno; + name = n.a.s; t = prototype(c, n.b); @@ -191,6 +195,10 @@ defstruct(c: *compiler, n: *node) { name = n.a.s; + c.filename = n.filename; + c.lineno = n.lineno; + c.colno = n.colno; + if (!strcmp(name, "int") || !strcmp(name, "byte") || !strcmp(name, "func")) { cdie(c, "reserved word"); } @@ -217,6 +225,10 @@ defenum(c: *compiler, n: *node) { break; } + c.filename = n.a.filename; + c.lineno = n.a.lineno; + c.colno = n.a.colno; + name = n.a.a.s; d = find(c, name, 0:*byte, 1); @@ -255,12 +267,17 @@ layout_struct(c: *compiler, d: *decl) { d.struct_layout_done = 2; m = d.struct_def.b; + offset = 0; loop { if (!m) { break; } + c.filename = m.a.filename; + c.lineno = m.a.lineno; + c.colno = m.a.colno; + name = m.a.a.s; t = prototype(c, m.a.b); @@ -297,12 +314,17 @@ compile_func(c: *compiler, d: *decl) { } n = d.func_def.a.b.a; + offset = 16; loop { if (!n) { break; } + c.filename = n.a.filename; + c.lineno = n.a.lineno; + c.colno = n.a.colno; + name = n.a.a.s; t = prototype(c, n.a.b); @@ -1965,6 +1987,11 @@ emit_builtin(c: *compiler) { } } +struct name_node { + next: *name_node; + name: *byte; +} + main(argc: int, argv: **byte, envp: **byte) { var a: alloc; var c: *compiler; @@ -1976,6 +2003,12 @@ main(argc: int, argv: **byte, envp: **byte) { var show: int; var filename: *byte; var err: *file; + var input: *name_node; + var tmp: *name_node; + var link: **name_node; + var peg: *peg_compiler; + + link = &input; setup_alloc(&a); @@ -2013,15 +2046,54 @@ main(argc: int, argv: **byte, envp: **byte) { continue; } + if (!strcmp(argv[i], "-P")) { + i = i + 1; + if (i >= argc) { + die("invalid -P at end of argument list"); + } + peg = setup_peg(&a, argv[i]); + i = i + 1; + continue; + } + if (argv[i][0] == '-':byte) { die("invalid argument"); } - p = concat_program(p, parse(c.p, argv[i])); + tmp = alloc(&a, sizeof(*tmp)):*name_node; + tmp.next = 0:*name_node; + tmp.name = argv[i]; + *link = tmp; + link = &tmp.next; i = i + 1; } + if peg { + if !input { + die("expected input"); + } + peg_open_output(peg, filename); + tmp = input; + loop { + if !tmp { + break; + } + peg_compile(peg, tmp.name); + tmp = tmp.next; + } + return; + } + + tmp = input; + loop { + if !tmp { + break; + } + p = concat_program(p, parse(c.p, tmp.name)); + tmp = tmp.next; + } + if show { err = fopen(2, &a); show_node(err, p); diff --git a/parsepeg.c b/parsepeg.c @@ -1,338 +0,0 @@ -enum { - PEG_grammar, - PEG_rule, - PEG_pattern, - PEG_alternative, - PEG_lookop, - PEG_lookahead, - PEG_countop, - PEG_suffix, - PEG_primary, - PEG_any, - PEG_literal, - PEG_class, - PEG_call, - PEG_identifier, - PEG_sp, -} - -tag_to_str(tag: int): *byte { - if tag == PEG_grammar { return "grammar"; } - if tag == PEG_rule { return "rule"; } - if tag == PEG_pattern { return "pattern"; } - if tag == PEG_alternative { return "alternative"; } - if tag == PEG_lookop { return "lookop"; } - if tag == PEG_lookahead { return "lookahead"; } - if tag == PEG_countop { return "countop"; } - if tag == PEG_suffix { return "suffix"; } - if tag == PEG_primary { return "primary"; } - if tag == PEG_any { return "any"; } - if tag == PEG_literal { return "literal"; } - if tag == PEG_class { return "class"; } - if tag == PEG_call { return "call"; } - if tag == PEG_identifier { return "identifier"; } - if tag == PEG_sp { return "sp"; } - die("invalid tag"); -} - -peg_PEG_grammar(c: *peg): int { - var ok: int; - enter(c, PEG_grammar); - ok = peg_PEG_sp(c); - if ok { - ok = peg_PEG_rule(c); - if ok { - loop { - choice(c); - ok = peg_PEG_rule(c); - if !ok { ok = 1; break; } - commit(c); - } - } - } - if ok { - choice(c); - ok = any(c); - if ok { fail(c); fail(c); ok = 0; } else { ok = 1; } - } - if ok { leave(c, PEG_grammar); } else { fail(c); } - return ok; -} - -peg_PEG_rule(c: *peg): int { - var ok: int; - enter(c, PEG_rule); - ok = peg_PEG_identifier(c); - if ok { - ok = peg_PEG_sp(c); - } - if ok { - ok = literal(c, "<-"); - } - if ok { - ok = peg_PEG_sp(c); - } - if ok { - ok = peg_PEG_pattern(c); - } - if ok { leave(c, PEG_rule); } else { fail(c); } - return ok; -} - -peg_PEG_pattern(c: *peg): int { - var ok: int; - enter(c, PEG_pattern); - ok = peg_PEG_alternative(c); - if ok { - loop { - choice(c); - ok = literal(c, "/"); - if ok { - choice(c); - ok = literal(c, "/"); - if ok { fail(c); fail(c); ok = 0; } else { ok = 1; } - } - if ok { - ok = peg_PEG_sp(c); - } - if ok { - ok = peg_PEG_alternative(c); - } - if !ok { ok = 1; break; } - commit(c); - } - } - if ok { leave(c, PEG_pattern); } else { fail(c); } - return ok; -} - -peg_PEG_alternative(c: *peg): int { - var ok: int; - enter(c, PEG_alternative); - ok = peg_PEG_lookahead(c); - if ok { - loop { - choice(c); - ok = peg_PEG_lookahead(c); - if !ok { ok = 1; break; } - commit(c); - } - } - if ok { leave(c, PEG_alternative); } else { fail(c); } - return ok; -} - -peg_PEG_lookop(c: *peg): int { - var ok: int; - enter(c, PEG_lookop); - ok = charset(c, "!&"); - if ok { leave(c, PEG_lookop); } else { fail(c); } - return ok; -} - -peg_PEG_lookahead(c: *peg): int { - var ok: int; - enter(c, PEG_lookahead); - choice(c); - ok = peg_PEG_lookop(c); - if ok { - ok = peg_PEG_sp(c); - } - if ok { commit(c); } else { ok = 1; } - if ok { - ok = peg_PEG_suffix(c); - } - if ok { leave(c, PEG_lookahead); } else { fail(c); } - return ok; -} - -peg_PEG_countop(c: *peg): int { - var ok: int; - enter(c, PEG_countop); - ok = charset(c, "*+?"); - if ok { leave(c, PEG_countop); } else { fail(c); } - return ok; -} - -peg_PEG_suffix(c: *peg): int { - var ok: int; - enter(c, PEG_suffix); - ok = peg_PEG_primary(c); - if ok { - loop { - choice(c); - ok = peg_PEG_countop(c); - if ok { - ok = peg_PEG_sp(c); - } - if !ok { ok = 1; break; } - commit(c); - } - } - if ok { leave(c, PEG_suffix); } else { fail(c); } - return ok; -} - -peg_PEG_primary(c: *peg): int { - var ok: int; - enter(c, PEG_primary); - choice(c); - ok = literal(c, "("); - if ok { - ok = peg_PEG_sp(c); - } - if ok { - ok = peg_PEG_pattern(c); - } - if ok { - ok = literal(c, ")"); - } - if !ok { choice(c); - ok = peg_PEG_any(c); - } - if !ok { choice(c); - ok = peg_PEG_literal(c); - } - if !ok { choice(c); - ok = peg_PEG_class(c); - } - if !ok { choice(c); - ok = peg_PEG_call(c); - } - if ok { commit(c); } else { fail(c); } - if ok { - ok = peg_PEG_sp(c); - } - if ok { leave(c, PEG_primary); } else { fail(c); } - return ok; -} - -peg_PEG_any(c: *peg): int { - var ok: int; - enter(c, PEG_any); - ok = literal(c, "."); - if ok { leave(c, PEG_any); } else { fail(c); } - return ok; -} - -peg_PEG_literal(c: *peg): int { - var ok: int; - enter(c, PEG_literal); - ok = literal(c, "'"); - if ok { - loop { - choice(c); - choice(c); - ok = literal(c, "'"); - if ok { fail(c); fail(c); ok = 0; } else { ok = 1; } - if ok { - ok = any(c); - } - if !ok { ok = 1; break; } - commit(c); - } - } - if ok { - ok = literal(c, "'"); - } - if ok { leave(c, PEG_literal); } else { fail(c); } - return ok; -} - -peg_PEG_class(c: *peg): int { - var ok: int; - enter(c, PEG_class); - ok = literal(c, "["); - if ok { - loop { - choice(c); - choice(c); - ok = literal(c, "]"); - if ok { fail(c); fail(c); ok = 0; } else { ok = 1; } - if ok { - choice(c); - ok = any(c); - if ok { - ok = literal(c, "-"); - } - if ok { - ok = any(c); - } - if !ok { choice(c); - ok = any(c); - } - if ok { commit(c); } else { fail(c); } - } - if !ok { ok = 1; break; } - commit(c); - } - } - if ok { - ok = literal(c, "]"); - } - if ok { leave(c, PEG_class); } else { fail(c); } - return ok; -} - -peg_PEG_call(c: *peg): int { - var ok: int; - enter(c, PEG_call); - ok = peg_PEG_identifier(c); - if ok { - choice(c); - ok = peg_PEG_sp(c); - if ok { - ok = literal(c, "<-"); - } - if ok { fail(c); fail(c); ok = 0; } else { ok = 1; } - } - if ok { leave(c, PEG_call); } else { fail(c); } - return ok; -} - -peg_PEG_identifier(c: *peg): int { - var ok: int; - enter(c, PEG_identifier); - ok = charset(c, "0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ_abcdefghijklmnopqrstuvwxyz"); - if ok { - loop { - choice(c); - ok = charset(c, "0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ_abcdefghijklmnopqrstuvwxyz"); - if !ok { ok = 1; break; } - commit(c); - } - } - if ok { leave(c, PEG_identifier); } else { fail(c); } - return ok; -} - -peg_PEG_sp(c: *peg): int { - var ok: int; - enter(c, PEG_sp); - loop { - choice(c); - choice(c); - ok = charset(c, "\x09\x0a\x0d\x20"); - if !ok { choice(c); - ok = literal(c, "//"); - if ok { - loop { - choice(c); - choice(c); - ok = charset(c, "\x0a\x0d"); - if ok { fail(c); fail(c); ok = 0; } else { ok = 1; } - if ok { - ok = any(c); - } - if !ok { ok = 1; break; } - commit(c); - } - } - } - if ok { commit(c); } else { fail(c); } - if !ok { ok = 1; break; } - commit(c); - } - if ok { leave(c, PEG_sp); } else { fail(c); } - return ok; -} diff --git a/peg.c b/peg.c @@ -361,7 +361,7 @@ translate_pattern(c: *peg_compiler, n: *peg_node) { n = n.next; continue; } else { - fdputs(2, tag_to_str(n.tag)); + fdputs(2, PEG_tag_to_str(n.tag)); die("invalid tag"); } @@ -389,10 +389,11 @@ translate(c: *peg_compiler, n: *peg_node) { v = v.next; } - fputs(c.out, "}\n"); + fputs(c.out, "}\n\n"); // Generate tag to string - fputs(c.out, "\ntag_to_str(tag: int): *byte {\n"); + fputs(c.out, c.prefix); + fputs(c.out, "tag_to_str(tag: int): *byte {\n"); v = n.child; loop { if !v { @@ -443,92 +444,54 @@ translate(c: *peg_compiler, n: *peg_node) { } } -main(argc: int, argv: **byte, envp: **byte) { - var ifd: int; - var ofd: int; - var f: *file; - var out: *file; - var a: alloc; - var c: peg_compiler; - var i: int; - var src: *byte; - var len: int; - var node: *peg_node; - var filename: *byte; - setup_alloc(&a); - - ifd = 0; - ofd = 1; - filename = "-"; - c.prefix = "P_"; - - i = 1; - loop { - if i >= argc { - break; - } - - if strcmp(argv[i], "-o") == 0 { - i = i + 1; - if i >= argc { - die("expected output file name"); - } - - unlink(argv[i]); - - ofd = open(argv[i], O_CREAT | O_WRONLY, (6 << 6) + (6 << 3) + 6); - if ofd < 0 { - die("failed to open output"); - } - - i = i + 1; - continue; - } +setup_peg(a: *alloc, prefix: *byte): *peg_compiler { + var c: *peg_compiler; + c = alloc(a, sizeof(*c)): *peg_compiler; + c.a = a; + c.prefix = prefix; + c.scratch = alloc(c.a, 256); + return c; +} - if strcmp(argv[i], "-P") == 0 { - i = i + 1; - if i >= argc { - die("expected output file name"); - } +peg_open_output(c: *peg_compiler, filename: *byte) { + var fd: int; + var f: *file; - c.prefix = argv[i]; + unlink(filename); - i = i + 1; - continue; - } + fd = open(filename, O_CREAT | O_WRONLY, (6 << 6) + (6 << 3) + 6); + if fd < 0 { + die("failed to open output"); + } - if argv[i][0] == '-':byte { - die("usage: ./peg [-P prefix] [-o grammar.c] <grammar.peg>"); - } + f = fopen(fd, c.a); + c.out = f; +} - if ifd != 0 { - die("too many inputs"); - } +peg_compile(c: *peg_compiler, filename: *byte) { + var fd: int; + var f: *file; + var src: *byte; + var len: int; + var node: *peg_node; - filename = argv[i]; - ifd = open(argv[i], 0, 0); - if ifd < 0 { - die("failed to open input"); + if strcmp(filename, "-") == 0 { + fd = 0; + } else { + fd = open(filename, O_RDONLY, 0); + if fd < 0 { + die("failed to open output"); } - - i = i + 1; } - c.a = &a; - c.scratch = alloc(c.a, 256); - - f = fopen(ifd, c.a); + f = fopen(fd, c.a); src = freadall(f, &len); fclose(f); - out = fopen(ofd, c.a); - c.out = out; - c.p = peg_new(filename, src, len, c.a); - node = peg_parse(c.p, PEG_sp, peg_PEG_grammar); - translate(&c, node); + node = peg_parse(c.p, PEG_sp, peg_PEG_grammar); + translate(c, node); - fflush(out); - fclose(out); + fflush(c.out); } diff --git a/peglib.c b/peglib.c @@ -337,7 +337,7 @@ peg_parse(c: *peg, sp: int, grammar: (func(c:*peg):int)): *peg_node { fdputs(2, ":"); fdputd(2, c.fail_col); fdputs(2, " expected "); - fdputs(2, tag_to_str(c.fail_tag)); + fdputs(2, P_tag_to_str(c.fail_tag)); if c.fail_literal { fdputs(2, " '"); fdputs(2, c.fail_literal); @@ -383,7 +383,7 @@ peg_show(out: *file, n: *peg_node) { var hex: *byte; hex = "0123456789abcdef"; fputs(out, "("); - fputs(out, tag_to_str(n.tag)); + fputs(out, P_tag_to_str(n.tag)); if n.child { n = n.child; loop {