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 | + |
M | bootstrap.sh | | | 23 | ++++++----------------- |
M | cc0.c | | | 6403 | ++++++++++++++++++++++++++++++++++++++++++++++--------------------------------- |
M | cc1.c | | | 74 | +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++- |
D | parsepeg.c | | | 338 | ------------------------------------------------------------------------------- |
M | peg.c | | | 115 | +++++++++++++++++++++++++++---------------------------------------------------- |
M | peglib.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 {