From e249069cac49c47e287b256b38b19ceb89191ff5 Mon Sep 17 00:00:00 2001 From: Jeremiah Orians Date: Sun, 26 Aug 2018 16:34:31 -0400 Subject: [PATCH] Release 1.0.0 --- CHANGELOG.org | 10 + bootstrap.sh | 11 +- cc_core.c | 112 +- cc_types.c | 18 + functions/numerate_number.c | 1 - seed.M1 | 19309 ++++++++++++++++------------------ test/test.answers | 8 +- test/test100/hello.sh | 20 +- test/test100/proof.answer | 2 +- test/test21/blood-elf.c | 8 +- test/test22/hex2_linker.c | 18 +- test/test23/M1-macro.c | 13 +- test/test24/get_machine.c | 9 +- 13 files changed, 9135 insertions(+), 10404 deletions(-) diff --git a/CHANGELOG.org b/CHANGELOG.org index eabee4a..d9debbb 100644 --- a/CHANGELOG.org +++ b/CHANGELOG.org @@ -30,10 +30,20 @@ Reordered conditionals for easier implementation and reduced operations Broke out OUT and FUNCTION to silence a single GCC warning Moved required_match and line_error into cc_core.c and removed required_match.c Relocated contents of test/functions to functions +Upgrades mescc-tools to 40537c0200ad28cd5090bc0776251d5983ef56e3 commit +Tweaked order for for, while and do loops to make them more in commone +Tweaked source to better match assembly +Simplify implementation order of logic +Simplifed the promote_type logic to a much breifer form +Broke out generally useful member lookup +Upgraded seed.M1 to be generated by cc_x86 ** Fixed Fixed detection of locals to screen out all non-primitive name space collisions Checked in updated gcc function definition +Changed's numerate_number's behavior related to zeros +Improved error message to help debugging +Fixed bootstrap.sh to build a working M2-Planet binary ** Removed Removed redundent steps in Recursive statement diff --git a/bootstrap.sh b/bootstrap.sh index 1c2d0ae..3ffd698 100755 --- a/bootstrap.sh +++ b/bootstrap.sh @@ -4,16 +4,21 @@ set -ex # Make the required bin directry [ -d bin ] || mkdir bin +# Build debug footer +blood-elf -f seed.M1 \ + -o bin/seed-footer.M1 || exit 1 + # Macro assemble with libc written in M1-Macro M1 -f test/common_x86/x86_defs.M1 \ - -f test/functions/libc-core.M1 \ + -f functions/libc-core.M1 \ -f seed.M1 \ + -f bin/seed-footer.M1 \ --LittleEndian \ --Architecture 1 \ - -o bin/seed.hex2 || exit 1 + -o bin/seed.hex2 || exit 2 # Resolve all linkages -hex2 -f test/common_x86/ELF-i386.hex2 \ +hex2 -f test/common_x86/ELF-i386-debug.hex2 \ -f bin/seed.hex2 \ --LittleEndian \ --Architecture 1 \ diff --git a/cc_core.c b/cc_core.c index 690f08b..2608c35 100644 --- a/cc_core.c +++ b/cc_core.c @@ -305,36 +305,24 @@ void primary_expr_variable() void primary_expr(); struct type* promote_type(struct type* a, struct type* b) { - if(NULL == a) - { - return b; - } if(NULL == b) { return a; } + if(NULL == a) + { + return b; + } struct type* i; for(i = global_types; NULL != i; i = i->next) { - if(a->name == i->name) - { - return a; - } - if(b->name == i->name) - { - return b; - } - if(a->name == i->indirect->name) - { - return a; - } - if(b->name == i->indirect->name) - { - return b; - } + if(a->name == i->name) break; + if(b->name == i->name) break; + if(a->name == i->indirect->name) break; + if(b->name == i->indirect->name) break; } - return NULL; + return i; } void common_recursion(FUNCTION f) @@ -381,26 +369,16 @@ int ceil_log2(int a) * postfix-expr ( expression-list-opt ) * postfix-expr -> member */ - +struct type* lookup_member(struct type* parent, char* name); void postfix_expr_arrow() { emit_out("# looking up offset\n"); global_token = global_token->next; - struct type* i; - for(i = current_target->members; NULL != i; i = i->members) - { - if(match(i->name, global_token->s)) break; - } - if(NULL == i) - { - file_print("ERROR in postfix_expr ", stderr); - file_print(current_target->name, stderr); - file_print("->", stderr); - file_print(global_token->s, stderr); - file_print(" does not exist\n", stderr); - line_error(); - exit(EXIT_FAILURE); - } + + struct type* i = lookup_member(current_target, global_token->s); + current_target = i->type; + global_token = global_token->next; + if(0 != i->offset) { emit_out("# -> offset calculation\n"); @@ -408,12 +386,11 @@ void postfix_expr_arrow() emit_out(numerate_number(i->offset)); emit_out("\nADD_ebx_to_eax\n"); } - if(!match("=", global_token->next->s) && !match("char**",i->type->name)) + + if(!match("=", global_token->s) && !match("char**", current_target->name)) { emit_out("LOAD_INTEGER\n"); } - current_target = i->type; - global_token = global_token->next; } void postfix_expr_array() @@ -421,19 +398,18 @@ void postfix_expr_array() struct type* array = current_target; common_recursion(expression); current_target = array; - char* assign; + char* assign = "LOAD_INTEGER\n"; /* Add support for Ints */ - if(!match("char*", current_target->name)) + if(match("char*", current_target->name)) + { + assign = "LOAD_BYTE\n"; + } + else { emit_out("SAL_eax_Immediate8 !"); emit_out(numerate_number(ceil_log2(current_target->indirect->size))); emit_out("\n"); - assign = "LOAD_INTEGER\n"; - } - else - { - assign = "LOAD_BYTE\n"; } emit_out("ADD_ebx_to_eax\n"); @@ -704,17 +680,18 @@ void process_if() void process_for() { - char* number_string = numerate_number(current_count); - current_count = current_count + 1; - + struct token_list* nested_locals = break_frame; char* nested_break_head = break_target_head; char* nested_break_func = break_target_func; char* nested_break_num = break_target_num; - struct token_list* nested_locals = break_frame; - break_frame = function->locals; + + char* number_string = numerate_number(current_count); + current_count = current_count + 1; + break_target_head = "FOR_END_"; - break_target_func = function->s; break_target_num = number_string; + break_frame = function->locals; + break_target_func = function->s; emit_out("# FOR_initialization_"); uniqueID_out(function->s, number_string); @@ -780,17 +757,18 @@ void process_asm() /* Process do while loops */ void process_do() { - char* number_string = numerate_number(current_count); - current_count = current_count + 1; - + struct token_list* nested_locals = break_frame; char* nested_break_head = break_target_head; char* nested_break_func = break_target_func; char* nested_break_num = break_target_num; - struct token_list* nested_locals = break_frame; - break_frame = function->locals; + + char* number_string = numerate_number(current_count); + current_count = current_count + 1; + break_target_head = "DO_END_"; - break_target_func = function->s; break_target_num = number_string; + break_frame = function->locals; + break_target_func = function->s; emit_out(":DO_"); uniqueID_out(function->s, number_string); @@ -819,18 +797,18 @@ void process_do() /* Process while loops */ void process_while() { - char* number_string = numerate_number(current_count); - current_count = current_count + 1; - + struct token_list* nested_locals = break_frame; char* nested_break_head = break_target_head; char* nested_break_func = break_target_func; char* nested_break_num = break_target_num; - struct token_list* nested_locals = break_frame; - break_frame = function->locals; + + char* number_string = numerate_number(current_count); + current_count = current_count + 1; break_target_head = "END_WHILE_"; - break_target_func = function->s; break_target_num = number_string; + break_frame = function->locals; + break_target_func = function->s; emit_out(":WHILE_"); uniqueID_out(function->s, number_string); @@ -852,10 +830,10 @@ void process_while() emit_out(":END_WHILE_"); uniqueID_out(function->s, number_string); - break_frame = nested_locals; break_target_head = nested_break_head; break_target_func = nested_break_func; break_target_num = nested_break_num; + break_frame = nested_locals; } /* Ensure that functions return */ @@ -896,7 +874,7 @@ void process_break() emit_out("_"); emit_out(break_target_num); emit_out("\n"); - require_match("ERROR in statement\nMissing ;\n", ";"); + require_match("ERROR in break statement\nMissing ;\n", ";"); } void recursive_statement() diff --git a/cc_types.c b/cc_types.c index 71fb961..981cbf1 100644 --- a/cc_types.c +++ b/cc_types.c @@ -109,6 +109,24 @@ struct type* lookup_type(char* s, struct type* start) return NULL; } +struct type* lookup_member(struct type* parent, char* name) +{ + struct type* i; + for(i = parent->members; NULL != i; i = i->members) + { + if(match(i->name, name)) return i; + } + + file_print("ERROR in lookup_member ", stderr); + file_print(parent->name, stderr); + file_print("->", stderr); + file_print(global_token->s, stderr); + file_print(" does not exist\n", stderr); + line_error(); + file_print("\n", stderr); + exit(EXIT_FAILURE); +} + struct type* type_name(); void require_match(char* message, char* required); diff --git a/functions/numerate_number.c b/functions/numerate_number.c index 157573f..bf2672a 100644 --- a/functions/numerate_number.c +++ b/functions/numerate_number.c @@ -31,7 +31,6 @@ char* numerate_number(int a) if(0 == a) { result[0] = '0'; - result[1] = 10; return result; } diff --git a/seed.M1 b/seed.M1 index 0220fc6..c910d02 100644 --- a/seed.M1 +++ b/seed.M1 @@ -1,6 +1,8 @@ +# This file was generated by running: +# ./bin/vm --rom roms/cc_x86 --memory 4M --tape_01 stage3/M2-Planet_x86.c --tape_02 ../M2-Planet/seed.M1 +# In stage0 # Core program - # Defining function fgetc :FUNCTION_fgetc LOAD_IMMEDIATE_eax %3 @@ -41,10 +43,9 @@ RETURN # Defining local f PUSH_eax #f # IF_fopen_0 - LOAD_IMMEDIATE_eax %119 PUSH_eax #_common_recursion -LOAD_EFFECTIVE_ADDRESS %12 +LOAD_BASE_ADDRESS_eax %-8 LOAD_INTEGER PUSH_eax #_common_recursion LOAD_IMMEDIATE_eax %0 @@ -57,49 +58,55 @@ SETE MOVEZBL TEST JUMP_EQ %ELSE_fopen_0 - -LOAD_EFFECTIVE_ADDRESS %0 - +LOAD_BASE_ADDRESS_eax %-16 PUSH_eax #_common_recursion -LOAD_EFFECTIVE_ADDRESS %16 +PUSH_edi # Prevent overwriting in recursion +PUSH_ebp # Protect the old base pointer +COPY_esp_to_edi # Copy new base pointer +LOAD_BASE_ADDRESS_eax %-4 LOAD_INTEGER PUSH_eax #_process_expression1 LOAD_IMMEDIATE_eax %577 PUSH_eax #_process_expression2 LOAD_IMMEDIATE_eax %384 PUSH_eax #_process_expression2 +COPY_edi_to_ebp CALL_IMMEDIATE %FUNCTION_open POP_ebx # _process_expression_locals POP_ebx # _process_expression_locals POP_ebx # _process_expression_locals +POP_ebp # Restore old base pointer +POP_edi # Prevent overwrite POP_ebx # _common_recursion STORE_INTEGER JUMP %_END_IF_fopen_0 - :ELSE_fopen_0 - -LOAD_EFFECTIVE_ADDRESS %0 - +LOAD_BASE_ADDRESS_eax %-16 PUSH_eax #_common_recursion -LOAD_EFFECTIVE_ADDRESS %16 +PUSH_edi # Prevent overwriting in recursion +PUSH_ebp # Protect the old base pointer +COPY_esp_to_edi # Copy new base pointer +LOAD_BASE_ADDRESS_eax %-4 LOAD_INTEGER PUSH_eax #_process_expression1 LOAD_IMMEDIATE_eax %0 PUSH_eax #_process_expression2 LOAD_IMMEDIATE_eax %0 PUSH_eax #_process_expression2 +COPY_edi_to_ebp CALL_IMMEDIATE %FUNCTION_open POP_ebx # _process_expression_locals POP_ebx # _process_expression_locals POP_ebx # _process_expression_locals +POP_ebp # Restore old base pointer +POP_edi # Prevent overwrite POP_ebx # _common_recursion STORE_INTEGER :_END_IF_fopen_0 - # IF_fopen_1 LOAD_IMMEDIATE_eax %0 PUSH_eax #_common_recursion -LOAD_EFFECTIVE_ADDRESS %4 +LOAD_BASE_ADDRESS_eax %-16 LOAD_INTEGER POP_ebx # _common_recursion CMP @@ -113,8 +120,7 @@ RETURN JUMP %_END_IF_fopen_1 :ELSE_fopen_1 :_END_IF_fopen_1 -LOAD_EFFECTIVE_ADDRESS %0 - +LOAD_BASE_ADDRESS_eax %-16 LOAD_INTEGER POP_ebx # _return_result_locals RETURN @@ -127,14 +133,19 @@ RETURN # Defining function fclose :FUNCTION_fclose # Defining local error -LOAD_EFFECTIVE_ADDRESS %4 +PUSH_edi # Prevent overwriting in recursion +PUSH_ebp # Protect the old base pointer +COPY_esp_to_edi # Copy new base pointer +LOAD_BASE_ADDRESS_eax %-4 LOAD_INTEGER PUSH_eax #_process_expression1 +COPY_edi_to_ebp CALL_IMMEDIATE %FUNCTION_close POP_ebx # _process_expression_locals +POP_ebp # Restore old base pointer +POP_edi # Prevent overwrite PUSH_eax #error -LOAD_EFFECTIVE_ADDRESS %0 - +LOAD_BASE_ADDRESS_eax %-12 LOAD_INTEGER POP_ebx # _return_result_locals RETURN @@ -163,19 +174,16 @@ RETURN # Defining local s PUSH_eax #s # FOR_initialization_memset_0 - -LOAD_EFFECTIVE_ADDRESS %0 - +LOAD_BASE_ADDRESS_eax %-20 PUSH_eax #_common_recursion -LOAD_EFFECTIVE_ADDRESS %20 +LOAD_BASE_ADDRESS_eax %-4 LOAD_INTEGER POP_ebx # _common_recursion STORE_INTEGER :FOR_memset_0 - LOAD_IMMEDIATE_eax %0 PUSH_eax #_common_recursion -LOAD_EFFECTIVE_ADDRESS %12 +LOAD_BASE_ADDRESS_eax %-12 LOAD_INTEGER POP_ebx # _common_recursion CMP @@ -183,14 +191,11 @@ SETL MOVEZBL TEST JUMP_EQ %FOR_END_memset_0 - JUMP %FOR_THEN_memset_0 - :FOR_ITER_memset_0 - -LOAD_EFFECTIVE_ADDRESS %8 +LOAD_BASE_ADDRESS_eax %-12 PUSH_eax #_common_recursion -LOAD_EFFECTIVE_ADDRESS %12 +LOAD_BASE_ADDRESS_eax %-12 LOAD_INTEGER PUSH_eax #_common_recursion LOAD_IMMEDIATE_eax %1 @@ -200,25 +205,21 @@ MOVE_ebx_to_eax POP_ebx # _common_recursion STORE_INTEGER JUMP %FOR_memset_0 - :FOR_THEN_memset_0 - -LOAD_EFFECTIVE_ADDRESS %0 - +LOAD_BASE_ADDRESS_eax %-20 LOAD_INTEGER PUSH_eax #_common_recursion LOAD_IMMEDIATE_eax %0 POP_ebx # _common_recursion ADD_ebx_to_eax PUSH_eax #_common_recursion -LOAD_EFFECTIVE_ADDRESS %16 +LOAD_BASE_ADDRESS_eax %-8 LOAD_INTEGER POP_ebx # _common_recursion STORE_CHAR -LOAD_EFFECTIVE_ADDRESS %0 - +LOAD_BASE_ADDRESS_eax %-20 PUSH_eax #_common_recursion -LOAD_EFFECTIVE_ADDRESS %4 +LOAD_BASE_ADDRESS_eax %-20 LOAD_INTEGER PUSH_eax #_common_recursion LOAD_IMMEDIATE_eax %1 @@ -227,45 +228,53 @@ ADD_ebx_to_eax POP_ebx # _common_recursion STORE_INTEGER JUMP %FOR_ITER_memset_0 - :FOR_END_memset_0 - POP_ebx # _recursive_statement_locals RETURN # Defining function calloc :FUNCTION_calloc # Defining local ret -LOAD_EFFECTIVE_ADDRESS %8 +PUSH_edi # Prevent overwriting in recursion +PUSH_ebp # Protect the old base pointer +COPY_esp_to_edi # Copy new base pointer +LOAD_BASE_ADDRESS_eax %-4 LOAD_INTEGER PUSH_eax #_common_recursion -LOAD_EFFECTIVE_ADDRESS %8 +LOAD_BASE_ADDRESS_eax %-8 LOAD_INTEGER POP_ebx # _common_recursion MULTIPLY_eax_by_ebx_into_eax PUSH_eax #_process_expression1 +COPY_edi_to_ebp CALL_IMMEDIATE %FUNCTION_malloc POP_ebx # _process_expression_locals +POP_ebp # Restore old base pointer +POP_edi # Prevent overwrite PUSH_eax #ret -LOAD_EFFECTIVE_ADDRESS %0 - +PUSH_edi # Prevent overwriting in recursion +PUSH_ebp # Protect the old base pointer +COPY_esp_to_edi # Copy new base pointer +LOAD_BASE_ADDRESS_eax %-16 LOAD_INTEGER PUSH_eax #_process_expression1 LOAD_IMMEDIATE_eax %0 PUSH_eax #_process_expression2 -LOAD_EFFECTIVE_ADDRESS %20 +LOAD_BASE_ADDRESS_eax %-4 LOAD_INTEGER PUSH_eax #_common_recursion -LOAD_EFFECTIVE_ADDRESS %20 +LOAD_BASE_ADDRESS_eax %-8 LOAD_INTEGER POP_ebx # _common_recursion MULTIPLY_eax_by_ebx_into_eax PUSH_eax #_process_expression2 +COPY_edi_to_ebp CALL_IMMEDIATE %FUNCTION_memset POP_ebx # _process_expression_locals POP_ebx # _process_expression_locals POP_ebx # _process_expression_locals -LOAD_EFFECTIVE_ADDRESS %0 - +POP_ebp # Restore old base pointer +POP_edi # Prevent overwrite +LOAD_BASE_ADDRESS_eax %-16 LOAD_INTEGER POP_ebx # _return_result_locals RETURN @@ -290,11 +299,9 @@ SUBTRACT_eax_from_ebx_into_ebx MOVE_ebx_to_eax PUSH_eax #i :DO_match_0 - -LOAD_EFFECTIVE_ADDRESS %0 - +LOAD_BASE_ADDRESS_eax %-16 PUSH_eax #_common_recursion -LOAD_EFFECTIVE_ADDRESS %4 +LOAD_BASE_ADDRESS_eax %-16 LOAD_INTEGER PUSH_eax #_common_recursion LOAD_IMMEDIATE_eax %1 @@ -303,19 +310,19 @@ ADD_ebx_to_eax POP_ebx # _common_recursion STORE_INTEGER # IF_match_1 -LOAD_EFFECTIVE_ADDRESS %12 +LOAD_BASE_ADDRESS_eax %-4 LOAD_INTEGER PUSH_eax #_common_recursion -LOAD_EFFECTIVE_ADDRESS %4 +LOAD_BASE_ADDRESS_eax %-16 LOAD_INTEGER POP_ebx # _common_recursion ADD_ebx_to_eax LOAD_BYTE PUSH_eax #_common_recursion -LOAD_EFFECTIVE_ADDRESS %12 +LOAD_BASE_ADDRESS_eax %-8 LOAD_INTEGER PUSH_eax #_common_recursion -LOAD_EFFECTIVE_ADDRESS %8 +LOAD_BASE_ADDRESS_eax %-16 LOAD_INTEGER POP_ebx # _common_recursion ADD_ebx_to_eax @@ -334,10 +341,10 @@ JUMP %_END_IF_match_1 :_END_IF_match_1 LOAD_IMMEDIATE_eax %0 PUSH_eax #_common_recursion -LOAD_EFFECTIVE_ADDRESS %16 +LOAD_BASE_ADDRESS_eax %-4 LOAD_INTEGER PUSH_eax #_common_recursion -LOAD_EFFECTIVE_ADDRESS %8 +LOAD_BASE_ADDRESS_eax %-16 LOAD_INTEGER POP_ebx # _common_recursion ADD_ebx_to_eax @@ -349,10 +356,10 @@ MOVEZBL PUSH_eax #_common_recursion LOAD_IMMEDIATE_eax %0 PUSH_eax #_common_recursion -LOAD_EFFECTIVE_ADDRESS %16 +LOAD_BASE_ADDRESS_eax %-8 LOAD_INTEGER PUSH_eax #_common_recursion -LOAD_EFFECTIVE_ADDRESS %12 +LOAD_BASE_ADDRESS_eax %-16 LOAD_INTEGER POP_ebx # _common_recursion ADD_ebx_to_eax @@ -365,31 +372,34 @@ POP_ebx # _common_recursion AND_eax_ebx TEST JUMP_NE %DO_match_0 - :DO_END_match_0 - LOAD_IMMEDIATE_eax %1 POP_ebx # _return_result_locals RETURN # Defining function numerate_number :FUNCTION_numerate_number # Defining local result +PUSH_edi # Prevent overwriting in recursion +PUSH_ebp # Protect the old base pointer +COPY_esp_to_edi # Copy new base pointer LOAD_IMMEDIATE_eax %16 PUSH_eax #_process_expression1 LOAD_IMMEDIATE_eax %1 PUSH_eax #_process_expression2 +COPY_edi_to_ebp CALL_IMMEDIATE %FUNCTION_calloc POP_ebx # _process_expression_locals POP_ebx # _process_expression_locals +POP_ebp # Restore old base pointer +POP_edi # Prevent overwrite PUSH_eax #result # Defining local i LOAD_IMMEDIATE_eax %0 PUSH_eax #i # IF_numerate_number_0 - LOAD_IMMEDIATE_eax %0 PUSH_eax #_common_recursion -LOAD_EFFECTIVE_ADDRESS %16 +LOAD_BASE_ADDRESS_eax %-4 LOAD_INTEGER POP_ebx # _common_recursion CMP @@ -397,8 +407,7 @@ SETE MOVEZBL TEST JUMP_EQ %ELSE_numerate_number_0 - -LOAD_EFFECTIVE_ADDRESS %4 +LOAD_BASE_ADDRESS_eax %-12 LOAD_INTEGER PUSH_eax #_common_recursion LOAD_IMMEDIATE_eax %0 @@ -408,31 +417,18 @@ PUSH_eax #_common_recursion LOAD_IMMEDIATE_eax %48 POP_ebx # _common_recursion STORE_CHAR -LOAD_EFFECTIVE_ADDRESS %4 -LOAD_INTEGER -PUSH_eax #_common_recursion -LOAD_IMMEDIATE_eax %1 -POP_ebx # _common_recursion -ADD_ebx_to_eax -PUSH_eax #_common_recursion -LOAD_IMMEDIATE_eax %10 -POP_ebx # _common_recursion -STORE_CHAR -LOAD_EFFECTIVE_ADDRESS %4 +LOAD_BASE_ADDRESS_eax %-12 LOAD_INTEGER POP_ebx # _return_result_locals POP_ebx # _return_result_locals RETURN JUMP %_END_IF_numerate_number_0 - :ELSE_numerate_number_0 - :_END_IF_numerate_number_0 - # IF_numerate_number_1 LOAD_IMMEDIATE_eax %0 PUSH_eax #_common_recursion -LOAD_EFFECTIVE_ADDRESS %16 +LOAD_BASE_ADDRESS_eax %-4 LOAD_INTEGER POP_ebx # _common_recursion CMP @@ -440,7 +436,7 @@ SETG MOVEZBL TEST JUMP_EQ %ELSE_numerate_number_1 -LOAD_EFFECTIVE_ADDRESS %4 +LOAD_BASE_ADDRESS_eax %-12 LOAD_INTEGER PUSH_eax #_common_recursion LOAD_IMMEDIATE_eax %0 @@ -450,15 +446,14 @@ PUSH_eax #_common_recursion LOAD_IMMEDIATE_eax %45 POP_ebx # _common_recursion STORE_CHAR -LOAD_EFFECTIVE_ADDRESS %0 - +LOAD_BASE_ADDRESS_eax %-16 PUSH_eax #_common_recursion LOAD_IMMEDIATE_eax %1 POP_ebx # _common_recursion STORE_INTEGER -LOAD_EFFECTIVE_ADDRESS %12 +LOAD_BASE_ADDRESS_eax %-4 PUSH_eax #_common_recursion -LOAD_EFFECTIVE_ADDRESS %16 +LOAD_BASE_ADDRESS_eax %-4 LOAD_INTEGER PUSH_eax #_common_recursion LOAD_IMMEDIATE_eax %0 @@ -480,10 +475,10 @@ PUSH_eax #divisor :WHILE_numerate_number_2 LOAD_IMMEDIATE_eax %0 PUSH_eax #_common_recursion -LOAD_EFFECTIVE_ADDRESS %20 +LOAD_BASE_ADDRESS_eax %-4 LOAD_INTEGER PUSH_eax #_common_recursion -LOAD_EFFECTIVE_ADDRESS %8 +LOAD_BASE_ADDRESS_eax %-20 LOAD_INTEGER POP_ebx # _common_recursion XCHG_eax_ebx @@ -496,10 +491,9 @@ MOVEZBL TEST JUMP_EQ %END_WHILE_numerate_number_2 # THEN_while_numerate_number_2 -LOAD_EFFECTIVE_ADDRESS %0 - +LOAD_BASE_ADDRESS_eax %-20 PUSH_eax #_common_recursion -LOAD_EFFECTIVE_ADDRESS %4 +LOAD_BASE_ADDRESS_eax %-20 LOAD_INTEGER PUSH_eax #_common_recursion LOAD_IMMEDIATE_eax %10 @@ -514,7 +508,7 @@ JUMP %WHILE_numerate_number_2 :WHILE_numerate_number_3 LOAD_IMMEDIATE_eax %0 PUSH_eax #_common_recursion -LOAD_EFFECTIVE_ADDRESS %4 +LOAD_BASE_ADDRESS_eax %-20 LOAD_INTEGER POP_ebx # _common_recursion CMP @@ -523,18 +517,18 @@ MOVEZBL TEST JUMP_EQ %END_WHILE_numerate_number_3 # THEN_while_numerate_number_3 -LOAD_EFFECTIVE_ADDRESS %8 +LOAD_BASE_ADDRESS_eax %-12 LOAD_INTEGER PUSH_eax #_common_recursion -LOAD_EFFECTIVE_ADDRESS %8 +LOAD_BASE_ADDRESS_eax %-16 LOAD_INTEGER POP_ebx # _common_recursion ADD_ebx_to_eax PUSH_eax #_common_recursion -LOAD_EFFECTIVE_ADDRESS %20 +LOAD_BASE_ADDRESS_eax %-4 LOAD_INTEGER PUSH_eax #_common_recursion -LOAD_EFFECTIVE_ADDRESS %8 +LOAD_BASE_ADDRESS_eax %-20 LOAD_INTEGER POP_ebx # _common_recursion XCHG_eax_ebx @@ -546,12 +540,12 @@ POP_ebx # _common_recursion ADD_ebx_to_eax POP_ebx # _common_recursion STORE_CHAR -LOAD_EFFECTIVE_ADDRESS %16 +LOAD_BASE_ADDRESS_eax %-4 PUSH_eax #_common_recursion -LOAD_EFFECTIVE_ADDRESS %20 +LOAD_BASE_ADDRESS_eax %-4 LOAD_INTEGER PUSH_eax #_common_recursion -LOAD_EFFECTIVE_ADDRESS %8 +LOAD_BASE_ADDRESS_eax %-20 LOAD_INTEGER POP_ebx # _common_recursion XCHG_eax_ebx @@ -560,10 +554,9 @@ MODULUS_eax_from_ebx_into_ebx MOVE_edx_to_eax POP_ebx # _common_recursion STORE_INTEGER -LOAD_EFFECTIVE_ADDRESS %0 - +LOAD_BASE_ADDRESS_eax %-20 PUSH_eax #_common_recursion -LOAD_EFFECTIVE_ADDRESS %4 +LOAD_BASE_ADDRESS_eax %-20 LOAD_INTEGER PUSH_eax #_common_recursion LOAD_IMMEDIATE_eax %10 @@ -573,9 +566,9 @@ LOAD_IMMEDIATE_edx %0 DIVIDE_eax_by_ebx_into_eax POP_ebx # _common_recursion STORE_INTEGER -LOAD_EFFECTIVE_ADDRESS %4 +LOAD_BASE_ADDRESS_eax %-16 PUSH_eax #_common_recursion -LOAD_EFFECTIVE_ADDRESS %8 +LOAD_BASE_ADDRESS_eax %-16 LOAD_INTEGER PUSH_eax #_common_recursion LOAD_IMMEDIATE_eax %1 @@ -585,7 +578,7 @@ POP_ebx # _common_recursion STORE_INTEGER JUMP %WHILE_numerate_number_3 :END_WHILE_numerate_number_3 -LOAD_EFFECTIVE_ADDRESS %8 +LOAD_BASE_ADDRESS_eax %-12 LOAD_INTEGER POP_ebx # _return_result_locals POP_ebx # _return_result_locals @@ -594,8 +587,7 @@ RETURN # Defining function char2hex :FUNCTION_char2hex # IF_char2hex_0 - -LOAD_EFFECTIVE_ADDRESS %4 +LOAD_BASE_ADDRESS_eax %-4 LOAD_INTEGER PUSH_eax #_common_recursion LOAD_IMMEDIATE_eax %48 @@ -604,7 +596,7 @@ CMP SETGE MOVEZBL PUSH_eax #_common_recursion -LOAD_EFFECTIVE_ADDRESS %8 +LOAD_BASE_ADDRESS_eax %-4 LOAD_INTEGER PUSH_eax #_common_recursion LOAD_IMMEDIATE_eax %57 @@ -616,8 +608,7 @@ POP_ebx # _common_recursion AND_eax_ebx TEST JUMP_EQ %ELSE_char2hex_0 - -LOAD_EFFECTIVE_ADDRESS %4 +LOAD_BASE_ADDRESS_eax %-4 LOAD_INTEGER PUSH_eax #_common_recursion LOAD_IMMEDIATE_eax %48 @@ -626,11 +617,9 @@ SUBTRACT_eax_from_ebx_into_ebx MOVE_ebx_to_eax RETURN JUMP %_END_IF_char2hex_0 - :ELSE_char2hex_0 - # IF_char2hex_1 -LOAD_EFFECTIVE_ADDRESS %4 +LOAD_BASE_ADDRESS_eax %-4 LOAD_INTEGER PUSH_eax #_common_recursion LOAD_IMMEDIATE_eax %97 @@ -639,7 +628,7 @@ CMP SETGE MOVEZBL PUSH_eax #_common_recursion -LOAD_EFFECTIVE_ADDRESS %8 +LOAD_BASE_ADDRESS_eax %-4 LOAD_INTEGER PUSH_eax #_common_recursion LOAD_IMMEDIATE_eax %102 @@ -651,7 +640,7 @@ POP_ebx # _common_recursion AND_eax_ebx TEST JUMP_EQ %ELSE_char2hex_1 -LOAD_EFFECTIVE_ADDRESS %4 +LOAD_BASE_ADDRESS_eax %-4 LOAD_INTEGER PUSH_eax #_common_recursion LOAD_IMMEDIATE_eax %87 @@ -662,7 +651,7 @@ RETURN JUMP %_END_IF_char2hex_1 :ELSE_char2hex_1 # IF_char2hex_2 -LOAD_EFFECTIVE_ADDRESS %4 +LOAD_BASE_ADDRESS_eax %-4 LOAD_INTEGER PUSH_eax #_common_recursion LOAD_IMMEDIATE_eax %65 @@ -671,7 +660,7 @@ CMP SETGE MOVEZBL PUSH_eax #_common_recursion -LOAD_EFFECTIVE_ADDRESS %8 +LOAD_BASE_ADDRESS_eax %-4 LOAD_INTEGER PUSH_eax #_common_recursion LOAD_IMMEDIATE_eax %70 @@ -683,7 +672,7 @@ POP_ebx # _common_recursion AND_eax_ebx TEST JUMP_EQ %ELSE_char2hex_2 -LOAD_EFFECTIVE_ADDRESS %4 +LOAD_BASE_ADDRESS_eax %-4 LOAD_INTEGER PUSH_eax #_common_recursion LOAD_IMMEDIATE_eax %55 @@ -703,13 +692,11 @@ RETURN :_END_IF_char2hex_2 :_END_IF_char2hex_1 :_END_IF_char2hex_0 - RETURN # Defining function hex2char :FUNCTION_hex2char # IF_hex2char_0 - -LOAD_EFFECTIVE_ADDRESS %4 +LOAD_BASE_ADDRESS_eax %-4 LOAD_INTEGER PUSH_eax #_common_recursion LOAD_IMMEDIATE_eax %0 @@ -718,7 +705,7 @@ CMP SETGE MOVEZBL PUSH_eax #_common_recursion -LOAD_EFFECTIVE_ADDRESS %8 +LOAD_BASE_ADDRESS_eax %-4 LOAD_INTEGER PUSH_eax #_common_recursion LOAD_IMMEDIATE_eax %9 @@ -730,8 +717,7 @@ POP_ebx # _common_recursion AND_eax_ebx TEST JUMP_EQ %ELSE_hex2char_0 - -LOAD_EFFECTIVE_ADDRESS %4 +LOAD_BASE_ADDRESS_eax %-4 LOAD_INTEGER PUSH_eax #_common_recursion LOAD_IMMEDIATE_eax %48 @@ -739,11 +725,9 @@ POP_ebx # _common_recursion ADD_ebx_to_eax RETURN JUMP %_END_IF_hex2char_0 - :ELSE_hex2char_0 - # IF_hex2char_1 -LOAD_EFFECTIVE_ADDRESS %4 +LOAD_BASE_ADDRESS_eax %-4 LOAD_INTEGER PUSH_eax #_common_recursion LOAD_IMMEDIATE_eax %10 @@ -752,7 +736,7 @@ CMP SETGE MOVEZBL PUSH_eax #_common_recursion -LOAD_EFFECTIVE_ADDRESS %8 +LOAD_BASE_ADDRESS_eax %-4 LOAD_INTEGER PUSH_eax #_common_recursion LOAD_IMMEDIATE_eax %15 @@ -764,7 +748,7 @@ POP_ebx # _common_recursion AND_eax_ebx TEST JUMP_EQ %ELSE_hex2char_1 -LOAD_EFFECTIVE_ADDRESS %4 +LOAD_BASE_ADDRESS_eax %-4 LOAD_INTEGER PUSH_eax #_common_recursion LOAD_IMMEDIATE_eax %55 @@ -782,13 +766,11 @@ MOVE_ebx_to_eax RETURN :_END_IF_hex2char_1 :_END_IF_hex2char_0 - RETURN # Defining function char2dec :FUNCTION_char2dec # IF_char2dec_0 - -LOAD_EFFECTIVE_ADDRESS %4 +LOAD_BASE_ADDRESS_eax %-4 LOAD_INTEGER PUSH_eax #_common_recursion LOAD_IMMEDIATE_eax %48 @@ -797,7 +779,7 @@ CMP SETGE MOVEZBL PUSH_eax #_common_recursion -LOAD_EFFECTIVE_ADDRESS %8 +LOAD_BASE_ADDRESS_eax %-4 LOAD_INTEGER PUSH_eax #_common_recursion LOAD_IMMEDIATE_eax %57 @@ -809,8 +791,7 @@ POP_ebx # _common_recursion AND_eax_ebx TEST JUMP_EQ %ELSE_char2dec_0 - -LOAD_EFFECTIVE_ADDRESS %4 +LOAD_BASE_ADDRESS_eax %-4 LOAD_INTEGER PUSH_eax #_common_recursion LOAD_IMMEDIATE_eax %48 @@ -819,9 +800,7 @@ SUBTRACT_eax_from_ebx_into_ebx MOVE_ebx_to_eax RETURN JUMP %_END_IF_char2dec_0 - :ELSE_char2dec_0 - LOAD_IMMEDIATE_eax %0 PUSH_eax #_common_recursion LOAD_IMMEDIATE_eax %1 @@ -830,13 +809,11 @@ SUBTRACT_eax_from_ebx_into_ebx MOVE_ebx_to_eax RETURN :_END_IF_char2dec_0 - RETURN # Defining function dec2char :FUNCTION_dec2char # IF_dec2char_0 - -LOAD_EFFECTIVE_ADDRESS %4 +LOAD_BASE_ADDRESS_eax %-4 LOAD_INTEGER PUSH_eax #_common_recursion LOAD_IMMEDIATE_eax %0 @@ -845,7 +822,7 @@ CMP SETGE MOVEZBL PUSH_eax #_common_recursion -LOAD_EFFECTIVE_ADDRESS %8 +LOAD_BASE_ADDRESS_eax %-4 LOAD_INTEGER PUSH_eax #_common_recursion LOAD_IMMEDIATE_eax %9 @@ -857,8 +834,7 @@ POP_ebx # _common_recursion AND_eax_ebx TEST JUMP_EQ %ELSE_dec2char_0 - -LOAD_EFFECTIVE_ADDRESS %4 +LOAD_BASE_ADDRESS_eax %-4 LOAD_INTEGER PUSH_eax #_common_recursion LOAD_IMMEDIATE_eax %48 @@ -866,9 +842,7 @@ POP_ebx # _common_recursion ADD_ebx_to_eax RETURN JUMP %_END_IF_dec2char_0 - :ELSE_dec2char_0 - LOAD_IMMEDIATE_eax %0 PUSH_eax #_common_recursion LOAD_IMMEDIATE_eax %1 @@ -877,7 +851,6 @@ SUBTRACT_eax_from_ebx_into_ebx MOVE_ebx_to_eax RETURN :_END_IF_dec2char_0 - RETURN # Defining function numerate_string :FUNCTION_numerate_string @@ -889,10 +862,9 @@ PUSH_eax #index # Defining local negative PUSH_eax #negative # IF_numerate_string_0 - LOAD_IMMEDIATE_eax %0 PUSH_eax #_common_recursion -LOAD_EFFECTIVE_ADDRESS %20 +LOAD_BASE_ADDRESS_eax %-4 LOAD_INTEGER PUSH_eax #_common_recursion LOAD_IMMEDIATE_eax %0 @@ -905,18 +877,15 @@ SETE MOVEZBL TEST JUMP_EQ %ELSE_numerate_string_0 - LOAD_IMMEDIATE_eax %0 POP_ebx # _return_result_locals POP_ebx # _return_result_locals POP_ebx # _return_result_locals RETURN JUMP %_END_IF_numerate_string_0 - :ELSE_numerate_string_0 - # IF_numerate_string_1 -LOAD_EFFECTIVE_ADDRESS %16 +LOAD_BASE_ADDRESS_eax %-4 LOAD_INTEGER PUSH_eax #_common_recursion LOAD_IMMEDIATE_eax %0 @@ -930,7 +899,7 @@ CMP SETE MOVEZBL PUSH_eax #_common_recursion -LOAD_EFFECTIVE_ADDRESS %20 +LOAD_BASE_ADDRESS_eax %-4 LOAD_INTEGER PUSH_eax #_common_recursion LOAD_IMMEDIATE_eax %1 @@ -950,7 +919,7 @@ JUMP_EQ %ELSE_numerate_string_1 # IF_numerate_string_2 LOAD_IMMEDIATE_eax %45 PUSH_eax #_common_recursion -LOAD_EFFECTIVE_ADDRESS %20 +LOAD_BASE_ADDRESS_eax %-4 LOAD_INTEGER PUSH_eax #_common_recursion LOAD_IMMEDIATE_eax %2 @@ -963,26 +932,24 @@ SETE MOVEZBL TEST JUMP_EQ %ELSE_numerate_string_2 -LOAD_EFFECTIVE_ADDRESS %0 - +LOAD_BASE_ADDRESS_eax %-20 PUSH_eax #_common_recursion LOAD_IMMEDIATE_eax %1 POP_ebx # _common_recursion STORE_INTEGER -LOAD_EFFECTIVE_ADDRESS %4 +LOAD_BASE_ADDRESS_eax %-16 PUSH_eax #_common_recursion LOAD_IMMEDIATE_eax %3 POP_ebx # _common_recursion STORE_INTEGER JUMP %_END_IF_numerate_string_2 :ELSE_numerate_string_2 -LOAD_EFFECTIVE_ADDRESS %0 - +LOAD_BASE_ADDRESS_eax %-20 PUSH_eax #_common_recursion LOAD_IMMEDIATE_eax %0 POP_ebx # _common_recursion STORE_INTEGER -LOAD_EFFECTIVE_ADDRESS %4 +LOAD_BASE_ADDRESS_eax %-16 PUSH_eax #_common_recursion LOAD_IMMEDIATE_eax %2 POP_ebx # _common_recursion @@ -991,10 +958,10 @@ STORE_INTEGER :WHILE_numerate_string_3 LOAD_IMMEDIATE_eax %0 PUSH_eax #_common_recursion -LOAD_EFFECTIVE_ADDRESS %20 +LOAD_BASE_ADDRESS_eax %-4 LOAD_INTEGER PUSH_eax #_common_recursion -LOAD_EFFECTIVE_ADDRESS %12 +LOAD_BASE_ADDRESS_eax %-16 LOAD_INTEGER POP_ebx # _common_recursion ADD_ebx_to_eax @@ -1014,17 +981,23 @@ POP_ebx # _common_recursion SUBTRACT_eax_from_ebx_into_ebx MOVE_ebx_to_eax PUSH_eax #_common_recursion -LOAD_EFFECTIVE_ADDRESS %20 +PUSH_edi # Prevent overwriting in recursion +PUSH_ebp # Protect the old base pointer +COPY_esp_to_edi # Copy new base pointer +LOAD_BASE_ADDRESS_eax %-4 LOAD_INTEGER PUSH_eax #_common_recursion -LOAD_EFFECTIVE_ADDRESS %12 +LOAD_BASE_ADDRESS_eax %-16 LOAD_INTEGER POP_ebx # _common_recursion ADD_ebx_to_eax LOAD_BYTE PUSH_eax #_process_expression1 +COPY_edi_to_ebp CALL_IMMEDIATE %FUNCTION_char2hex POP_ebx # _process_expression_locals +POP_ebp # Restore old base pointer +POP_edi # Prevent overwrite POP_ebx # _common_recursion CMP SETE @@ -1039,33 +1012,39 @@ RETURN JUMP %_END_IF_numerate_string_4 :ELSE_numerate_string_4 :_END_IF_numerate_string_4 -LOAD_EFFECTIVE_ADDRESS %8 +LOAD_BASE_ADDRESS_eax %-12 PUSH_eax #_common_recursion LOAD_IMMEDIATE_eax %16 PUSH_eax #_common_recursion -LOAD_EFFECTIVE_ADDRESS %16 +LOAD_BASE_ADDRESS_eax %-12 LOAD_INTEGER POP_ebx # _common_recursion MULTIPLY_eax_by_ebx_into_eax PUSH_eax #_common_recursion -LOAD_EFFECTIVE_ADDRESS %24 +PUSH_edi # Prevent overwriting in recursion +PUSH_ebp # Protect the old base pointer +COPY_esp_to_edi # Copy new base pointer +LOAD_BASE_ADDRESS_eax %-4 LOAD_INTEGER PUSH_eax #_common_recursion -LOAD_EFFECTIVE_ADDRESS %16 +LOAD_BASE_ADDRESS_eax %-16 LOAD_INTEGER POP_ebx # _common_recursion ADD_ebx_to_eax LOAD_BYTE PUSH_eax #_process_expression1 +COPY_edi_to_ebp CALL_IMMEDIATE %FUNCTION_char2hex POP_ebx # _process_expression_locals +POP_ebp # Restore old base pointer +POP_edi # Prevent overwrite POP_ebx # _common_recursion ADD_ebx_to_eax POP_ebx # _common_recursion STORE_INTEGER -LOAD_EFFECTIVE_ADDRESS %4 +LOAD_BASE_ADDRESS_eax %-16 PUSH_eax #_common_recursion -LOAD_EFFECTIVE_ADDRESS %8 +LOAD_BASE_ADDRESS_eax %-16 LOAD_INTEGER PUSH_eax #_common_recursion LOAD_IMMEDIATE_eax %1 @@ -1080,7 +1059,7 @@ JUMP %_END_IF_numerate_string_1 # IF_numerate_string_5 LOAD_IMMEDIATE_eax %45 PUSH_eax #_common_recursion -LOAD_EFFECTIVE_ADDRESS %20 +LOAD_BASE_ADDRESS_eax %-4 LOAD_INTEGER PUSH_eax #_common_recursion LOAD_IMMEDIATE_eax %0 @@ -1093,26 +1072,24 @@ SETE MOVEZBL TEST JUMP_EQ %ELSE_numerate_string_5 -LOAD_EFFECTIVE_ADDRESS %0 - +LOAD_BASE_ADDRESS_eax %-20 PUSH_eax #_common_recursion LOAD_IMMEDIATE_eax %1 POP_ebx # _common_recursion STORE_INTEGER -LOAD_EFFECTIVE_ADDRESS %4 +LOAD_BASE_ADDRESS_eax %-16 PUSH_eax #_common_recursion LOAD_IMMEDIATE_eax %1 POP_ebx # _common_recursion STORE_INTEGER JUMP %_END_IF_numerate_string_5 :ELSE_numerate_string_5 -LOAD_EFFECTIVE_ADDRESS %0 - +LOAD_BASE_ADDRESS_eax %-20 PUSH_eax #_common_recursion LOAD_IMMEDIATE_eax %0 POP_ebx # _common_recursion STORE_INTEGER -LOAD_EFFECTIVE_ADDRESS %4 +LOAD_BASE_ADDRESS_eax %-16 PUSH_eax #_common_recursion LOAD_IMMEDIATE_eax %0 POP_ebx # _common_recursion @@ -1121,10 +1098,10 @@ STORE_INTEGER :WHILE_numerate_string_6 LOAD_IMMEDIATE_eax %0 PUSH_eax #_common_recursion -LOAD_EFFECTIVE_ADDRESS %20 +LOAD_BASE_ADDRESS_eax %-4 LOAD_INTEGER PUSH_eax #_common_recursion -LOAD_EFFECTIVE_ADDRESS %12 +LOAD_BASE_ADDRESS_eax %-16 LOAD_INTEGER POP_ebx # _common_recursion ADD_ebx_to_eax @@ -1144,17 +1121,23 @@ POP_ebx # _common_recursion SUBTRACT_eax_from_ebx_into_ebx MOVE_ebx_to_eax PUSH_eax #_common_recursion -LOAD_EFFECTIVE_ADDRESS %20 +PUSH_edi # Prevent overwriting in recursion +PUSH_ebp # Protect the old base pointer +COPY_esp_to_edi # Copy new base pointer +LOAD_BASE_ADDRESS_eax %-4 LOAD_INTEGER PUSH_eax #_common_recursion -LOAD_EFFECTIVE_ADDRESS %12 +LOAD_BASE_ADDRESS_eax %-16 LOAD_INTEGER POP_ebx # _common_recursion ADD_ebx_to_eax LOAD_BYTE PUSH_eax #_process_expression1 +COPY_edi_to_ebp CALL_IMMEDIATE %FUNCTION_char2dec POP_ebx # _process_expression_locals +POP_ebp # Restore old base pointer +POP_edi # Prevent overwrite POP_ebx # _common_recursion CMP SETE @@ -1169,33 +1152,39 @@ RETURN JUMP %_END_IF_numerate_string_7 :ELSE_numerate_string_7 :_END_IF_numerate_string_7 -LOAD_EFFECTIVE_ADDRESS %8 +LOAD_BASE_ADDRESS_eax %-12 PUSH_eax #_common_recursion LOAD_IMMEDIATE_eax %10 PUSH_eax #_common_recursion -LOAD_EFFECTIVE_ADDRESS %16 +LOAD_BASE_ADDRESS_eax %-12 LOAD_INTEGER POP_ebx # _common_recursion MULTIPLY_eax_by_ebx_into_eax PUSH_eax #_common_recursion -LOAD_EFFECTIVE_ADDRESS %24 +PUSH_edi # Prevent overwriting in recursion +PUSH_ebp # Protect the old base pointer +COPY_esp_to_edi # Copy new base pointer +LOAD_BASE_ADDRESS_eax %-4 LOAD_INTEGER PUSH_eax #_common_recursion -LOAD_EFFECTIVE_ADDRESS %16 +LOAD_BASE_ADDRESS_eax %-16 LOAD_INTEGER POP_ebx # _common_recursion ADD_ebx_to_eax LOAD_BYTE PUSH_eax #_process_expression1 +COPY_edi_to_ebp CALL_IMMEDIATE %FUNCTION_char2dec POP_ebx # _process_expression_locals +POP_ebp # Restore old base pointer +POP_edi # Prevent overwrite POP_ebx # _common_recursion ADD_ebx_to_eax POP_ebx # _common_recursion STORE_INTEGER -LOAD_EFFECTIVE_ADDRESS %4 +LOAD_BASE_ADDRESS_eax %-16 PUSH_eax #_common_recursion -LOAD_EFFECTIVE_ADDRESS %8 +LOAD_BASE_ADDRESS_eax %-16 LOAD_INTEGER PUSH_eax #_common_recursion LOAD_IMMEDIATE_eax %1 @@ -1207,16 +1196,14 @@ JUMP %WHILE_numerate_string_6 :END_WHILE_numerate_string_6 :_END_IF_numerate_string_1 :_END_IF_numerate_string_0 - # IF_numerate_string_8 -LOAD_EFFECTIVE_ADDRESS %0 - +LOAD_BASE_ADDRESS_eax %-20 LOAD_INTEGER TEST JUMP_EQ %ELSE_numerate_string_8 -LOAD_EFFECTIVE_ADDRESS %8 +LOAD_BASE_ADDRESS_eax %-12 PUSH_eax #_common_recursion -LOAD_EFFECTIVE_ADDRESS %12 +LOAD_BASE_ADDRESS_eax %-12 LOAD_INTEGER PUSH_eax #_common_recursion LOAD_IMMEDIATE_eax %0 @@ -1232,7 +1219,7 @@ STORE_INTEGER JUMP %_END_IF_numerate_string_8 :ELSE_numerate_string_8 :_END_IF_numerate_string_8 -LOAD_EFFECTIVE_ADDRESS %8 +LOAD_BASE_ADDRESS_eax %-12 LOAD_INTEGER POP_ebx # _return_result_locals POP_ebx # _return_result_locals @@ -1241,10 +1228,9 @@ RETURN # Defining function file_print :FUNCTION_file_print :WHILE_file_print_0 - LOAD_IMMEDIATE_eax %0 PUSH_eax #_common_recursion -LOAD_EFFECTIVE_ADDRESS %12 +LOAD_BASE_ADDRESS_eax %-4 LOAD_INTEGER PUSH_eax #_common_recursion LOAD_IMMEDIATE_eax %0 @@ -1257,10 +1243,11 @@ SETNE MOVEZBL TEST JUMP_EQ %END_WHILE_file_print_0 - # THEN_while_file_print_0 - -LOAD_EFFECTIVE_ADDRESS %8 +PUSH_edi # Prevent overwriting in recursion +PUSH_ebp # Protect the old base pointer +COPY_esp_to_edi # Copy new base pointer +LOAD_BASE_ADDRESS_eax %-4 LOAD_INTEGER PUSH_eax #_common_recursion LOAD_IMMEDIATE_eax %0 @@ -1268,15 +1255,18 @@ POP_ebx # _common_recursion ADD_ebx_to_eax LOAD_BYTE PUSH_eax #_process_expression1 -LOAD_EFFECTIVE_ADDRESS %8 +LOAD_BASE_ADDRESS_eax %-8 LOAD_INTEGER PUSH_eax #_process_expression2 +COPY_edi_to_ebp CALL_IMMEDIATE %FUNCTION_fputc POP_ebx # _process_expression_locals POP_ebx # _process_expression_locals -LOAD_EFFECTIVE_ADDRESS %8 +POP_ebp # Restore old base pointer +POP_edi # Prevent overwrite +LOAD_BASE_ADDRESS_eax %-4 PUSH_eax #_common_recursion -LOAD_EFFECTIVE_ADDRESS %12 +LOAD_BASE_ADDRESS_eax %-4 LOAD_INTEGER PUSH_eax #_common_recursion LOAD_IMMEDIATE_eax %1 @@ -1285,17 +1275,14 @@ ADD_ebx_to_eax POP_ebx # _common_recursion STORE_INTEGER JUMP %WHILE_file_print_0 - :END_WHILE_file_print_0 - RETURN # Defining function copy_string :FUNCTION_copy_string :WHILE_copy_string_0 - LOAD_IMMEDIATE_eax %0 PUSH_eax #_common_recursion -LOAD_EFFECTIVE_ADDRESS %8 +LOAD_BASE_ADDRESS_eax %-8 LOAD_INTEGER PUSH_eax #_common_recursion LOAD_IMMEDIATE_eax %0 @@ -1308,17 +1295,15 @@ SETNE MOVEZBL TEST JUMP_EQ %END_WHILE_copy_string_0 - # THEN_while_copy_string_0 - -LOAD_EFFECTIVE_ADDRESS %8 +LOAD_BASE_ADDRESS_eax %-4 LOAD_INTEGER PUSH_eax #_common_recursion LOAD_IMMEDIATE_eax %0 POP_ebx # _common_recursion ADD_ebx_to_eax PUSH_eax #_common_recursion -LOAD_EFFECTIVE_ADDRESS %8 +LOAD_BASE_ADDRESS_eax %-8 LOAD_INTEGER PUSH_eax #_common_recursion LOAD_IMMEDIATE_eax %0 @@ -1327,9 +1312,9 @@ ADD_ebx_to_eax LOAD_BYTE POP_ebx # _common_recursion STORE_CHAR -LOAD_EFFECTIVE_ADDRESS %8 +LOAD_BASE_ADDRESS_eax %-4 PUSH_eax #_common_recursion -LOAD_EFFECTIVE_ADDRESS %12 +LOAD_BASE_ADDRESS_eax %-4 LOAD_INTEGER PUSH_eax #_common_recursion LOAD_IMMEDIATE_eax %1 @@ -1337,9 +1322,9 @@ POP_ebx # _common_recursion ADD_ebx_to_eax POP_ebx # _common_recursion STORE_INTEGER -LOAD_EFFECTIVE_ADDRESS %4 +LOAD_BASE_ADDRESS_eax %-8 PUSH_eax #_common_recursion -LOAD_EFFECTIVE_ADDRESS %8 +LOAD_BASE_ADDRESS_eax %-8 LOAD_INTEGER PUSH_eax #_common_recursion LOAD_IMMEDIATE_eax %1 @@ -1348,48 +1333,56 @@ ADD_ebx_to_eax POP_ebx # _common_recursion STORE_INTEGER JUMP %WHILE_copy_string_0 - :END_WHILE_copy_string_0 - -LOAD_EFFECTIVE_ADDRESS %8 +LOAD_BASE_ADDRESS_eax %-4 LOAD_INTEGER RETURN # Defining function postpend_char :FUNCTION_postpend_char # Defining local ret +PUSH_edi # Prevent overwriting in recursion +PUSH_ebp # Protect the old base pointer +COPY_esp_to_edi # Copy new base pointer LOAD_IMMEDIATE_eax %4096 PUSH_eax #_process_expression1 LOAD_IMMEDIATE_eax %1 PUSH_eax #_process_expression2 +COPY_edi_to_ebp CALL_IMMEDIATE %FUNCTION_calloc POP_ebx # _process_expression_locals POP_ebx # _process_expression_locals +POP_ebp # Restore old base pointer +POP_edi # Prevent overwrite PUSH_eax #ret # Defining local hold -LOAD_EFFECTIVE_ADDRESS %0 - +PUSH_edi # Prevent overwriting in recursion +PUSH_ebp # Protect the old base pointer +COPY_esp_to_edi # Copy new base pointer +LOAD_BASE_ADDRESS_eax %-16 LOAD_INTEGER PUSH_eax #_process_expression1 -LOAD_EFFECTIVE_ADDRESS %16 +LOAD_BASE_ADDRESS_eax %-4 LOAD_INTEGER PUSH_eax #_process_expression2 +COPY_edi_to_ebp CALL_IMMEDIATE %FUNCTION_copy_string POP_ebx # _process_expression_locals POP_ebx # _process_expression_locals +POP_ebp # Restore old base pointer +POP_edi # Prevent overwrite PUSH_eax #hold -LOAD_EFFECTIVE_ADDRESS %0 - +LOAD_BASE_ADDRESS_eax %-20 LOAD_INTEGER PUSH_eax #_common_recursion LOAD_IMMEDIATE_eax %0 POP_ebx # _common_recursion ADD_ebx_to_eax PUSH_eax #_common_recursion -LOAD_EFFECTIVE_ADDRESS %16 +LOAD_BASE_ADDRESS_eax %-8 LOAD_INTEGER POP_ebx # _common_recursion STORE_CHAR -LOAD_EFFECTIVE_ADDRESS %4 +LOAD_BASE_ADDRESS_eax %-16 LOAD_INTEGER POP_ebx # _return_result_locals POP_ebx # _return_result_locals @@ -1397,75 +1390,100 @@ RETURN # Defining function prepend_char :FUNCTION_prepend_char # Defining local ret +PUSH_edi # Prevent overwriting in recursion +PUSH_ebp # Protect the old base pointer +COPY_esp_to_edi # Copy new base pointer LOAD_IMMEDIATE_eax %4096 PUSH_eax #_process_expression1 LOAD_IMMEDIATE_eax %1 PUSH_eax #_process_expression2 +COPY_edi_to_ebp CALL_IMMEDIATE %FUNCTION_calloc POP_ebx # _process_expression_locals POP_ebx # _process_expression_locals +POP_ebp # Restore old base pointer +POP_edi # Prevent overwrite PUSH_eax #ret -LOAD_EFFECTIVE_ADDRESS %0 - +LOAD_BASE_ADDRESS_eax %-16 LOAD_INTEGER PUSH_eax #_common_recursion LOAD_IMMEDIATE_eax %0 POP_ebx # _common_recursion ADD_ebx_to_eax PUSH_eax #_common_recursion -LOAD_EFFECTIVE_ADDRESS %16 +LOAD_BASE_ADDRESS_eax %-4 LOAD_INTEGER POP_ebx # _common_recursion STORE_CHAR -LOAD_EFFECTIVE_ADDRESS %0 - +PUSH_edi # Prevent overwriting in recursion +PUSH_ebp # Protect the old base pointer +COPY_esp_to_edi # Copy new base pointer +LOAD_BASE_ADDRESS_eax %-16 LOAD_INTEGER PUSH_eax #_common_recursion LOAD_IMMEDIATE_eax %1 POP_ebx # _common_recursion ADD_ebx_to_eax PUSH_eax #_process_expression1 -LOAD_EFFECTIVE_ADDRESS %12 +LOAD_BASE_ADDRESS_eax %-8 LOAD_INTEGER PUSH_eax #_process_expression2 +COPY_edi_to_ebp CALL_IMMEDIATE %FUNCTION_copy_string POP_ebx # _process_expression_locals POP_ebx # _process_expression_locals -LOAD_EFFECTIVE_ADDRESS %0 - +POP_ebp # Restore old base pointer +POP_edi # Prevent overwrite +LOAD_BASE_ADDRESS_eax %-16 LOAD_INTEGER POP_ebx # _return_result_locals RETURN # Defining function prepend_string :FUNCTION_prepend_string # Defining local ret +PUSH_edi # Prevent overwriting in recursion +PUSH_ebp # Protect the old base pointer +COPY_esp_to_edi # Copy new base pointer LOAD_IMMEDIATE_eax %4096 PUSH_eax #_process_expression1 LOAD_IMMEDIATE_eax %1 PUSH_eax #_process_expression2 +COPY_edi_to_ebp CALL_IMMEDIATE %FUNCTION_calloc POP_ebx # _process_expression_locals POP_ebx # _process_expression_locals +POP_ebp # Restore old base pointer +POP_edi # Prevent overwrite PUSH_eax #ret -LOAD_EFFECTIVE_ADDRESS %0 - +PUSH_edi # Prevent overwriting in recursion +PUSH_ebp # Protect the old base pointer +COPY_esp_to_edi # Copy new base pointer +PUSH_edi # Prevent overwriting in recursion +PUSH_ebp # Protect the old base pointer +COPY_esp_to_edi # Copy new base pointer +LOAD_BASE_ADDRESS_eax %-16 LOAD_INTEGER PUSH_eax #_process_expression1 -LOAD_EFFECTIVE_ADDRESS %16 +LOAD_BASE_ADDRESS_eax %-4 LOAD_INTEGER PUSH_eax #_process_expression2 +COPY_edi_to_ebp CALL_IMMEDIATE %FUNCTION_copy_string POP_ebx # _process_expression_locals POP_ebx # _process_expression_locals +POP_ebp # Restore old base pointer +POP_edi # Prevent overwrite PUSH_eax #_process_expression1 -LOAD_EFFECTIVE_ADDRESS %12 +LOAD_BASE_ADDRESS_eax %-8 LOAD_INTEGER PUSH_eax #_process_expression2 +COPY_edi_to_ebp CALL_IMMEDIATE %FUNCTION_copy_string POP_ebx # _process_expression_locals POP_ebx # _process_expression_locals -LOAD_EFFECTIVE_ADDRESS %0 - +POP_ebp # Restore old base pointer +POP_edi # Prevent overwrite +LOAD_BASE_ADDRESS_eax %-16 LOAD_INTEGER POP_ebx # _return_result_locals RETURN @@ -1475,13 +1493,12 @@ RETURN LOAD_IMMEDIATE_eax %0 PUSH_eax #i :WHILE_string_length_0 - LOAD_IMMEDIATE_eax %0 PUSH_eax #_common_recursion -LOAD_EFFECTIVE_ADDRESS %12 +LOAD_BASE_ADDRESS_eax %-4 LOAD_INTEGER PUSH_eax #_common_recursion -LOAD_EFFECTIVE_ADDRESS %8 +LOAD_BASE_ADDRESS_eax %-12 LOAD_INTEGER POP_ebx # _common_recursion ADD_ebx_to_eax @@ -1492,13 +1509,10 @@ SETNE MOVEZBL TEST JUMP_EQ %END_WHILE_string_length_0 - # THEN_while_string_length_0 - -LOAD_EFFECTIVE_ADDRESS %0 - +LOAD_BASE_ADDRESS_eax %-12 PUSH_eax #_common_recursion -LOAD_EFFECTIVE_ADDRESS %4 +LOAD_BASE_ADDRESS_eax %-12 LOAD_INTEGER PUSH_eax #_common_recursion LOAD_IMMEDIATE_eax %1 @@ -1507,21 +1521,17 @@ ADD_ebx_to_eax POP_ebx # _common_recursion STORE_INTEGER JUMP %WHILE_string_length_0 - :END_WHILE_string_length_0 - -LOAD_EFFECTIVE_ADDRESS %0 - +LOAD_BASE_ADDRESS_eax %-12 LOAD_INTEGER POP_ebx # _return_result_locals RETURN # Defining function clearWhiteSpace :FUNCTION_clearWhiteSpace # IF_clearWhiteSpace_0 - LOAD_IMMEDIATE_eax %32 PUSH_eax #_common_recursion -LOAD_EFFECTIVE_ADDRESS %8 +LOAD_BASE_ADDRESS_eax %-4 LOAD_INTEGER POP_ebx # _common_recursion CMP @@ -1530,7 +1540,7 @@ MOVEZBL PUSH_eax #_common_recursion LOAD_IMMEDIATE_eax %9 PUSH_eax #_common_recursion -LOAD_EFFECTIVE_ADDRESS %12 +LOAD_BASE_ADDRESS_eax %-4 LOAD_INTEGER POP_ebx # _common_recursion CMP @@ -1540,24 +1550,33 @@ POP_ebx # _common_recursion OR_eax_ebx TEST JUMP_EQ %ELSE_clearWhiteSpace_0 - +PUSH_edi # Prevent overwriting in recursion +PUSH_ebp # Protect the old base pointer +COPY_esp_to_edi # Copy new base pointer +PUSH_edi # Prevent overwriting in recursion +PUSH_ebp # Protect the old base pointer +COPY_esp_to_edi # Copy new base pointer LOAD_IMMEDIATE_eax &GLOBAL_input LOAD_INTEGER PUSH_eax #_process_expression1 +COPY_edi_to_ebp CALL_IMMEDIATE %FUNCTION_fgetc POP_ebx # _process_expression_locals +POP_ebp # Restore old base pointer +POP_edi # Prevent overwrite PUSH_eax #_process_expression1 +COPY_edi_to_ebp CALL_IMMEDIATE %FUNCTION_clearWhiteSpace POP_ebx # _process_expression_locals +POP_ebp # Restore old base pointer +POP_edi # Prevent overwrite RETURN JUMP %_END_IF_clearWhiteSpace_0 - :ELSE_clearWhiteSpace_0 - # IF_clearWhiteSpace_1 LOAD_IMMEDIATE_eax %10 PUSH_eax #_common_recursion -LOAD_EFFECTIVE_ADDRESS %8 +LOAD_BASE_ADDRESS_eax %-4 LOAD_INTEGER POP_ebx # _common_recursion CMP @@ -1575,31 +1594,37 @@ POP_ebx # _common_recursion ADD_ebx_to_eax POP_ebx # _common_recursion STORE_INTEGER +PUSH_edi # Prevent overwriting in recursion +PUSH_ebp # Protect the old base pointer +COPY_esp_to_edi # Copy new base pointer +PUSH_edi # Prevent overwriting in recursion +PUSH_ebp # Protect the old base pointer +COPY_esp_to_edi # Copy new base pointer LOAD_IMMEDIATE_eax &GLOBAL_input LOAD_INTEGER PUSH_eax #_process_expression1 +COPY_edi_to_ebp CALL_IMMEDIATE %FUNCTION_fgetc POP_ebx # _process_expression_locals +POP_ebp # Restore old base pointer +POP_edi # Prevent overwrite PUSH_eax #_process_expression1 +COPY_edi_to_ebp CALL_IMMEDIATE %FUNCTION_clearWhiteSpace POP_ebx # _process_expression_locals +POP_ebp # Restore old base pointer +POP_edi # Prevent overwrite RETURN JUMP %_END_IF_clearWhiteSpace_1 :ELSE_clearWhiteSpace_1 :_END_IF_clearWhiteSpace_1 :_END_IF_clearWhiteSpace_0 - -LOAD_EFFECTIVE_ADDRESS %4 +LOAD_BASE_ADDRESS_eax %-4 LOAD_INTEGER RETURN # Defining function consume_byte :FUNCTION_consume_byte -LOAD_EFFECTIVE_ADDRESS %8 -LOAD_INTEGER -# looking up offset -# -> offset calculation -LOAD_IMMEDIATE_ebx %8 -ADD_ebx_to_eax +LOAD_IMMEDIATE_eax &GLOBAL_hold_string LOAD_INTEGER PUSH_eax #_common_recursion LOAD_IMMEDIATE_eax &GLOBAL_string_index @@ -1607,7 +1632,7 @@ LOAD_INTEGER POP_ebx # _common_recursion ADD_ebx_to_eax PUSH_eax #_common_recursion -LOAD_EFFECTIVE_ADDRESS %8 +LOAD_BASE_ADDRESS_eax %-4 LOAD_INTEGER POP_ebx # _common_recursion STORE_CHAR @@ -1621,11 +1646,17 @@ POP_ebx # _common_recursion ADD_ebx_to_eax POP_ebx # _common_recursion STORE_INTEGER +PUSH_edi # Prevent overwriting in recursion +PUSH_ebp # Protect the old base pointer +COPY_esp_to_edi # Copy new base pointer LOAD_IMMEDIATE_eax &GLOBAL_input LOAD_INTEGER PUSH_eax #_process_expression1 +COPY_edi_to_ebp CALL_IMMEDIATE %FUNCTION_fgetc POP_ebx # _process_expression_locals +POP_ebp # Restore old base pointer +POP_edi # Prevent overwrite RETURN # Defining function consume_word :FUNCTION_consume_word @@ -1633,18 +1664,17 @@ RETURN LOAD_IMMEDIATE_eax %0 PUSH_eax #escape :DO_consume_word_0 - # IF_consume_word_1 LOAD_IMMEDIATE_eax %1 PUSH_eax #_common_recursion -LOAD_EFFECTIVE_ADDRESS %4 +LOAD_BASE_ADDRESS_eax %-16 LOAD_INTEGER POP_ebx # _common_recursion XOR_ebx_eax_into_eax PUSH_eax #_common_recursion LOAD_IMMEDIATE_eax %92 PUSH_eax #_common_recursion -LOAD_EFFECTIVE_ADDRESS %20 +LOAD_BASE_ADDRESS_eax %-4 LOAD_INTEGER POP_ebx # _common_recursion CMP @@ -1654,42 +1684,41 @@ POP_ebx # _common_recursion AND_eax_ebx TEST JUMP_EQ %ELSE_consume_word_1 -LOAD_EFFECTIVE_ADDRESS %0 - +LOAD_BASE_ADDRESS_eax %-16 PUSH_eax #_common_recursion LOAD_IMMEDIATE_eax %1 POP_ebx # _common_recursion STORE_INTEGER JUMP %_END_IF_consume_word_1 :ELSE_consume_word_1 -LOAD_EFFECTIVE_ADDRESS %0 - +LOAD_BASE_ADDRESS_eax %-16 PUSH_eax #_common_recursion LOAD_IMMEDIATE_eax %0 POP_ebx # _common_recursion STORE_INTEGER :_END_IF_consume_word_1 -LOAD_EFFECTIVE_ADDRESS %12 +LOAD_BASE_ADDRESS_eax %-4 PUSH_eax #_common_recursion -LOAD_EFFECTIVE_ADDRESS %20 +PUSH_edi # Prevent overwriting in recursion +PUSH_ebp # Protect the old base pointer +COPY_esp_to_edi # Copy new base pointer +LOAD_BASE_ADDRESS_eax %-4 LOAD_INTEGER PUSH_eax #_process_expression1 -LOAD_EFFECTIVE_ADDRESS %20 -LOAD_INTEGER -PUSH_eax #_process_expression2 +COPY_edi_to_ebp CALL_IMMEDIATE %FUNCTION_consume_byte POP_ebx # _process_expression_locals -POP_ebx # _process_expression_locals +POP_ebp # Restore old base pointer +POP_edi # Prevent overwrite POP_ebx # _common_recursion STORE_INTEGER -LOAD_EFFECTIVE_ADDRESS %0 - +LOAD_BASE_ADDRESS_eax %-16 LOAD_INTEGER PUSH_eax #_common_recursion -LOAD_EFFECTIVE_ADDRESS %16 +LOAD_BASE_ADDRESS_eax %-4 LOAD_INTEGER PUSH_eax #_common_recursion -LOAD_EFFECTIVE_ADDRESS %16 +LOAD_BASE_ADDRESS_eax %-8 LOAD_INTEGER POP_ebx # _common_recursion CMP @@ -1699,14 +1728,18 @@ POP_ebx # _common_recursion OR_eax_ebx TEST JUMP_NE %DO_consume_word_0 - :DO_END_consume_word_0 - +PUSH_edi # Prevent overwriting in recursion +PUSH_ebp # Protect the old base pointer +COPY_esp_to_edi # Copy new base pointer LOAD_IMMEDIATE_eax &GLOBAL_input LOAD_INTEGER PUSH_eax #_process_expression1 +COPY_edi_to_ebp CALL_IMMEDIATE %FUNCTION_fgetc POP_ebx # _process_expression_locals +POP_ebp # Restore old base pointer +POP_edi # Prevent overwrite POP_ebx # _return_result_locals RETURN # Defining function fixup_label @@ -1720,51 +1753,39 @@ PUSH_eax #prev LOAD_IMMEDIATE_eax %0 PUSH_eax #i :DO_fixup_label_0 - -LOAD_EFFECTIVE_ADDRESS %4 +LOAD_BASE_ADDRESS_eax %-12 PUSH_eax #_common_recursion -LOAD_EFFECTIVE_ADDRESS %12 +LOAD_BASE_ADDRESS_eax %-8 LOAD_INTEGER POP_ebx # _common_recursion STORE_INTEGER -LOAD_EFFECTIVE_ADDRESS %8 +LOAD_BASE_ADDRESS_eax %-8 PUSH_eax #_common_recursion -LOAD_EFFECTIVE_ADDRESS %20 -LOAD_INTEGER -# looking up offset -# -> offset calculation -LOAD_IMMEDIATE_ebx %8 -ADD_ebx_to_eax +LOAD_IMMEDIATE_eax &GLOBAL_hold_string LOAD_INTEGER PUSH_eax #_common_recursion -LOAD_EFFECTIVE_ADDRESS %8 +LOAD_BASE_ADDRESS_eax %-16 LOAD_INTEGER POP_ebx # _common_recursion ADD_ebx_to_eax LOAD_BYTE POP_ebx # _common_recursion STORE_INTEGER -LOAD_EFFECTIVE_ADDRESS %16 -LOAD_INTEGER -# looking up offset -# -> offset calculation -LOAD_IMMEDIATE_ebx %8 -ADD_ebx_to_eax +LOAD_IMMEDIATE_eax &GLOBAL_hold_string LOAD_INTEGER PUSH_eax #_common_recursion -LOAD_EFFECTIVE_ADDRESS %4 +LOAD_BASE_ADDRESS_eax %-16 LOAD_INTEGER POP_ebx # _common_recursion ADD_ebx_to_eax PUSH_eax #_common_recursion -LOAD_EFFECTIVE_ADDRESS %8 +LOAD_BASE_ADDRESS_eax %-12 LOAD_INTEGER POP_ebx # _common_recursion STORE_CHAR -LOAD_EFFECTIVE_ADDRESS %0 - +LOAD_BASE_ADDRESS_eax %-16 PUSH_eax #_common_recursion -LOAD_EFFECTIVE_ADDRESS %4 +LOAD_BASE_ADDRESS_eax %-16 LOAD_INTEGER PUSH_eax #_common_recursion LOAD_IMMEDIATE_eax %1 @@ -1774,7 +1795,7 @@ POP_ebx # _common_recursion STORE_INTEGER LOAD_IMMEDIATE_eax %0 PUSH_eax #_common_recursion -LOAD_EFFECTIVE_ADDRESS %12 +LOAD_BASE_ADDRESS_eax %-8 LOAD_INTEGER POP_ebx # _common_recursion CMP @@ -1782,247 +1803,175 @@ SETNE MOVEZBL TEST JUMP_NE %DO_fixup_label_0 - :DO_END_fixup_label_0 - POP_ebx # _recursive_statement_locals POP_ebx # _recursive_statement_locals POP_ebx # _recursive_statement_locals RETURN +# Defining function in_set +:FUNCTION_in_set +:WHILE_in_set_0 +LOAD_IMMEDIATE_eax %0 +PUSH_eax #_common_recursion +LOAD_BASE_ADDRESS_eax %-8 +LOAD_INTEGER +PUSH_eax #_common_recursion +LOAD_IMMEDIATE_eax %0 +POP_ebx # _common_recursion +ADD_ebx_to_eax +LOAD_BYTE +POP_ebx # _common_recursion +CMP +SETNE +MOVEZBL +TEST +JUMP_EQ %END_WHILE_in_set_0 +# THEN_while_in_set_0 +# IF_in_set_1 +LOAD_BASE_ADDRESS_eax %-4 +LOAD_INTEGER +PUSH_eax #_common_recursion +LOAD_BASE_ADDRESS_eax %-8 +LOAD_INTEGER +PUSH_eax #_common_recursion +LOAD_IMMEDIATE_eax %0 +POP_ebx # _common_recursion +ADD_ebx_to_eax +LOAD_BYTE +POP_ebx # _common_recursion +CMP +SETE +MOVEZBL +TEST +JUMP_EQ %ELSE_in_set_1 +LOAD_IMMEDIATE_eax %1 +RETURN +JUMP %_END_IF_in_set_1 +:ELSE_in_set_1 +:_END_IF_in_set_1 +LOAD_BASE_ADDRESS_eax %-8 +PUSH_eax #_common_recursion +LOAD_BASE_ADDRESS_eax %-8 +LOAD_INTEGER +PUSH_eax #_common_recursion +LOAD_IMMEDIATE_eax %1 +POP_ebx # _common_recursion +ADD_ebx_to_eax +POP_ebx # _common_recursion +STORE_INTEGER +JUMP %WHILE_in_set_0 +:END_WHILE_in_set_0 +LOAD_IMMEDIATE_eax %0 +RETURN # Defining function preserve_keyword :FUNCTION_preserve_keyword :WHILE_preserve_keyword_0 - -LOAD_IMMEDIATE_eax %97 -PUSH_eax #_common_recursion -LOAD_EFFECTIVE_ADDRESS %8 -LOAD_INTEGER -POP_ebx # _common_recursion -CMP -SETLE -MOVEZBL -PUSH_eax #_common_recursion -LOAD_EFFECTIVE_ADDRESS %8 -LOAD_INTEGER -PUSH_eax #_common_recursion -LOAD_IMMEDIATE_eax %122 -POP_ebx # _common_recursion -CMP -SETLE -MOVEZBL -POP_ebx # _common_recursion -AND_eax_ebx -PUSH_eax #_common_recursion -LOAD_IMMEDIATE_eax %65 -PUSH_eax #_common_recursion -LOAD_EFFECTIVE_ADDRESS %12 -LOAD_INTEGER -POP_ebx # _common_recursion -CMP -SETLE -MOVEZBL -PUSH_eax #_common_recursion -LOAD_EFFECTIVE_ADDRESS %12 -LOAD_INTEGER -PUSH_eax #_common_recursion -LOAD_IMMEDIATE_eax %90 -POP_ebx # _common_recursion -CMP -SETLE -MOVEZBL -POP_ebx # _common_recursion -AND_eax_ebx -POP_ebx # _common_recursion -OR_eax_ebx -PUSH_eax #_common_recursion -LOAD_IMMEDIATE_eax %48 -PUSH_eax #_common_recursion -LOAD_EFFECTIVE_ADDRESS %12 -LOAD_INTEGER -POP_ebx # _common_recursion -CMP -SETLE -MOVEZBL -PUSH_eax #_common_recursion -LOAD_EFFECTIVE_ADDRESS %12 -LOAD_INTEGER -PUSH_eax #_common_recursion -LOAD_IMMEDIATE_eax %57 -POP_ebx # _common_recursion -CMP -SETLE -MOVEZBL -POP_ebx # _common_recursion -AND_eax_ebx -POP_ebx # _common_recursion -OR_eax_ebx -PUSH_eax #_common_recursion -LOAD_EFFECTIVE_ADDRESS %8 -LOAD_INTEGER -PUSH_eax #_common_recursion -LOAD_IMMEDIATE_eax %95 -POP_ebx # _common_recursion -CMP -SETE -MOVEZBL -POP_ebx # _common_recursion -OR_eax_ebx -TEST -JUMP_EQ %END_WHILE_preserve_keyword_0 - -# THEN_while_preserve_keyword_0 - -LOAD_EFFECTIVE_ADDRESS %4 -PUSH_eax #_common_recursion -LOAD_EFFECTIVE_ADDRESS %12 +PUSH_edi # Prevent overwriting in recursion +PUSH_ebp # Protect the old base pointer +COPY_esp_to_edi # Copy new base pointer +LOAD_BASE_ADDRESS_eax %-4 LOAD_INTEGER PUSH_eax #_process_expression1 -LOAD_EFFECTIVE_ADDRESS %12 -LOAD_INTEGER +LOAD_IMMEDIATE_eax &STRING_preserve_keyword_1 PUSH_eax #_process_expression2 +COPY_edi_to_ebp +CALL_IMMEDIATE %FUNCTION_in_set +POP_ebx # _process_expression_locals +POP_ebx # _process_expression_locals +POP_ebp # Restore old base pointer +POP_edi # Prevent overwrite +TEST +JUMP_EQ %END_WHILE_preserve_keyword_0 +# THEN_while_preserve_keyword_0 +LOAD_BASE_ADDRESS_eax %-4 +PUSH_eax #_common_recursion +PUSH_edi # Prevent overwriting in recursion +PUSH_ebp # Protect the old base pointer +COPY_esp_to_edi # Copy new base pointer +LOAD_BASE_ADDRESS_eax %-4 +LOAD_INTEGER +PUSH_eax #_process_expression1 +COPY_edi_to_ebp CALL_IMMEDIATE %FUNCTION_consume_byte POP_ebx # _process_expression_locals -POP_ebx # _process_expression_locals +POP_ebp # Restore old base pointer +POP_edi # Prevent overwrite POP_ebx # _common_recursion STORE_INTEGER JUMP %WHILE_preserve_keyword_0 - :END_WHILE_preserve_keyword_0 - -# IF_preserve_keyword_1 +# IF_preserve_keyword_2 LOAD_IMMEDIATE_eax %58 PUSH_eax #_common_recursion -LOAD_EFFECTIVE_ADDRESS %8 +LOAD_BASE_ADDRESS_eax %-4 LOAD_INTEGER POP_ebx # _common_recursion CMP SETE MOVEZBL TEST -JUMP_EQ %ELSE_preserve_keyword_1 -LOAD_EFFECTIVE_ADDRESS %8 -LOAD_INTEGER -PUSH_eax #_process_expression1 +JUMP_EQ %ELSE_preserve_keyword_2 +PUSH_edi # Prevent overwriting in recursion +PUSH_ebp # Protect the old base pointer +COPY_esp_to_edi # Copy new base pointer +COPY_edi_to_ebp CALL_IMMEDIATE %FUNCTION_fixup_label -POP_ebx # _process_expression_locals +POP_ebp # Restore old base pointer +POP_edi # Prevent overwrite LOAD_IMMEDIATE_eax %32 RETURN -JUMP %_END_IF_preserve_keyword_1 -:ELSE_preserve_keyword_1 -:_END_IF_preserve_keyword_1 -LOAD_EFFECTIVE_ADDRESS %4 +JUMP %_END_IF_preserve_keyword_2 +:ELSE_preserve_keyword_2 +:_END_IF_preserve_keyword_2 +LOAD_BASE_ADDRESS_eax %-4 LOAD_INTEGER RETURN # Defining function preserve_symbol :FUNCTION_preserve_symbol :WHILE_preserve_symbol_0 - -LOAD_EFFECTIVE_ADDRESS %4 -LOAD_INTEGER -PUSH_eax #_common_recursion -LOAD_IMMEDIATE_eax %60 -POP_ebx # _common_recursion -CMP -SETE -MOVEZBL -PUSH_eax #_common_recursion -LOAD_EFFECTIVE_ADDRESS %8 -LOAD_INTEGER -PUSH_eax #_common_recursion -LOAD_IMMEDIATE_eax %61 -POP_ebx # _common_recursion -CMP -SETE -MOVEZBL -POP_ebx # _common_recursion -OR_eax_ebx -PUSH_eax #_common_recursion -LOAD_EFFECTIVE_ADDRESS %8 -LOAD_INTEGER -PUSH_eax #_common_recursion -LOAD_IMMEDIATE_eax %62 -POP_ebx # _common_recursion -CMP -SETE -MOVEZBL -POP_ebx # _common_recursion -OR_eax_ebx -PUSH_eax #_common_recursion -LOAD_EFFECTIVE_ADDRESS %8 -LOAD_INTEGER -PUSH_eax #_common_recursion -LOAD_IMMEDIATE_eax %124 -POP_ebx # _common_recursion -CMP -SETE -MOVEZBL -POP_ebx # _common_recursion -OR_eax_ebx -PUSH_eax #_common_recursion -LOAD_EFFECTIVE_ADDRESS %8 -LOAD_INTEGER -PUSH_eax #_common_recursion -LOAD_IMMEDIATE_eax %38 -POP_ebx # _common_recursion -CMP -SETE -MOVEZBL -POP_ebx # _common_recursion -OR_eax_ebx -PUSH_eax #_common_recursion -LOAD_EFFECTIVE_ADDRESS %8 -LOAD_INTEGER -PUSH_eax #_common_recursion -LOAD_IMMEDIATE_eax %33 -POP_ebx # _common_recursion -CMP -SETE -MOVEZBL -POP_ebx # _common_recursion -OR_eax_ebx -PUSH_eax #_common_recursion -LOAD_EFFECTIVE_ADDRESS %8 -LOAD_INTEGER -PUSH_eax #_common_recursion -LOAD_IMMEDIATE_eax %45 -POP_ebx # _common_recursion -CMP -SETE -MOVEZBL -POP_ebx # _common_recursion -OR_eax_ebx -TEST -JUMP_EQ %END_WHILE_preserve_symbol_0 - -# THEN_while_preserve_symbol_0 - -LOAD_EFFECTIVE_ADDRESS %4 -PUSH_eax #_common_recursion -LOAD_EFFECTIVE_ADDRESS %12 +PUSH_edi # Prevent overwriting in recursion +PUSH_ebp # Protect the old base pointer +COPY_esp_to_edi # Copy new base pointer +LOAD_BASE_ADDRESS_eax %-4 LOAD_INTEGER PUSH_eax #_process_expression1 -LOAD_EFFECTIVE_ADDRESS %12 -LOAD_INTEGER +LOAD_IMMEDIATE_eax &STRING_preserve_symbol_1 PUSH_eax #_process_expression2 +COPY_edi_to_ebp +CALL_IMMEDIATE %FUNCTION_in_set +POP_ebx # _process_expression_locals +POP_ebx # _process_expression_locals +POP_ebp # Restore old base pointer +POP_edi # Prevent overwrite +TEST +JUMP_EQ %END_WHILE_preserve_symbol_0 +# THEN_while_preserve_symbol_0 +LOAD_BASE_ADDRESS_eax %-4 +PUSH_eax #_common_recursion +PUSH_edi # Prevent overwriting in recursion +PUSH_ebp # Protect the old base pointer +COPY_esp_to_edi # Copy new base pointer +LOAD_BASE_ADDRESS_eax %-4 +LOAD_INTEGER +PUSH_eax #_process_expression1 +COPY_edi_to_ebp CALL_IMMEDIATE %FUNCTION_consume_byte POP_ebx # _process_expression_locals -POP_ebx # _process_expression_locals +POP_ebp # Restore old base pointer +POP_edi # Prevent overwrite POP_ebx # _common_recursion STORE_INTEGER JUMP %WHILE_preserve_symbol_0 - :END_WHILE_preserve_symbol_0 - -LOAD_EFFECTIVE_ADDRESS %4 +LOAD_BASE_ADDRESS_eax %-4 LOAD_INTEGER RETURN # Defining function purge_macro :FUNCTION_purge_macro :WHILE_purge_macro_0 - LOAD_IMMEDIATE_eax %10 PUSH_eax #_common_recursion -LOAD_EFFECTIVE_ADDRESS %8 +LOAD_BASE_ADDRESS_eax %-4 LOAD_INTEGER POP_ebx # _common_recursion CMP @@ -2030,73 +1979,124 @@ SETNE MOVEZBL TEST JUMP_EQ %END_WHILE_purge_macro_0 - # THEN_while_purge_macro_0 - -LOAD_EFFECTIVE_ADDRESS %4 +LOAD_BASE_ADDRESS_eax %-4 PUSH_eax #_common_recursion +PUSH_edi # Prevent overwriting in recursion +PUSH_ebp # Protect the old base pointer +COPY_esp_to_edi # Copy new base pointer LOAD_IMMEDIATE_eax &GLOBAL_input LOAD_INTEGER PUSH_eax #_process_expression1 +COPY_edi_to_ebp CALL_IMMEDIATE %FUNCTION_fgetc POP_ebx # _process_expression_locals +POP_ebp # Restore old base pointer +POP_edi # Prevent overwrite POP_ebx # _common_recursion STORE_INTEGER JUMP %WHILE_purge_macro_0 - :END_WHILE_purge_macro_0 - -LOAD_EFFECTIVE_ADDRESS %4 +LOAD_BASE_ADDRESS_eax %-4 LOAD_INTEGER RETURN +# Defining function reset_hold_string +:FUNCTION_reset_hold_string +# Defining local i +LOAD_IMMEDIATE_eax &GLOBAL_string_index +LOAD_INTEGER +PUSH_eax #_common_recursion +LOAD_IMMEDIATE_eax %2 +POP_ebx # _common_recursion +ADD_ebx_to_eax +PUSH_eax #i +:WHILE_reset_hold_string_0 +LOAD_IMMEDIATE_eax %0 +PUSH_eax #_common_recursion +LOAD_BASE_ADDRESS_eax %-8 +LOAD_INTEGER +POP_ebx # _common_recursion +CMP +SETNE +MOVEZBL +TEST +JUMP_EQ %END_WHILE_reset_hold_string_0 +# THEN_while_reset_hold_string_0 +LOAD_IMMEDIATE_eax &GLOBAL_hold_string +LOAD_INTEGER +PUSH_eax #_common_recursion +LOAD_BASE_ADDRESS_eax %-8 +LOAD_INTEGER +POP_ebx # _common_recursion +ADD_ebx_to_eax +PUSH_eax #_common_recursion +LOAD_IMMEDIATE_eax %0 +POP_ebx # _common_recursion +STORE_CHAR +LOAD_BASE_ADDRESS_eax %-8 +PUSH_eax #_common_recursion +LOAD_BASE_ADDRESS_eax %-8 +LOAD_INTEGER +PUSH_eax #_common_recursion +LOAD_IMMEDIATE_eax %1 +POP_ebx # _common_recursion +SUBTRACT_eax_from_ebx_into_ebx +MOVE_ebx_to_eax +POP_ebx # _common_recursion +STORE_INTEGER +JUMP %WHILE_reset_hold_string_0 +:END_WHILE_reset_hold_string_0 +POP_ebx # _recursive_statement_locals +RETURN # Defining function get_token :FUNCTION_get_token # Defining local current +PUSH_edi # Prevent overwriting in recursion +PUSH_ebp # Protect the old base pointer +COPY_esp_to_edi # Copy new base pointer LOAD_IMMEDIATE_eax %1 PUSH_eax #_process_expression1 -LOAD_IMMEDIATE_eax %28 +LOAD_IMMEDIATE_eax %20 PUSH_eax #_process_expression2 +COPY_edi_to_ebp CALL_IMMEDIATE %FUNCTION_calloc POP_ebx # _process_expression_locals POP_ebx # _process_expression_locals +POP_ebp # Restore old base pointer +POP_edi # Prevent overwrite PUSH_eax #current -LOAD_EFFECTIVE_ADDRESS %0 - -LOAD_INTEGER -# looking up offset -# -> offset calculation -LOAD_IMMEDIATE_ebx %8 -ADD_ebx_to_eax -PUSH_eax #_common_recursion -LOAD_IMMEDIATE_eax %4096 -PUSH_eax #_process_expression1 -LOAD_IMMEDIATE_eax %1 -PUSH_eax #_process_expression2 -CALL_IMMEDIATE %FUNCTION_calloc -POP_ebx # _process_expression_locals -POP_ebx # _process_expression_locals -POP_ebx # _common_recursion -STORE_INTEGER :reset #C goto label +PUSH_edi # Prevent overwriting in recursion +PUSH_ebp # Protect the old base pointer +COPY_esp_to_edi # Copy new base pointer +COPY_edi_to_ebp +CALL_IMMEDIATE %FUNCTION_reset_hold_string +POP_ebp # Restore old base pointer +POP_edi # Prevent overwrite LOAD_IMMEDIATE_eax &GLOBAL_string_index PUSH_eax #_common_recursion LOAD_IMMEDIATE_eax %0 POP_ebx # _common_recursion STORE_INTEGER -LOAD_EFFECTIVE_ADDRESS %8 +LOAD_BASE_ADDRESS_eax %-4 PUSH_eax #_common_recursion -LOAD_EFFECTIVE_ADDRESS %12 +PUSH_edi # Prevent overwriting in recursion +PUSH_ebp # Protect the old base pointer +COPY_esp_to_edi # Copy new base pointer +LOAD_BASE_ADDRESS_eax %-4 LOAD_INTEGER PUSH_eax #_process_expression1 +COPY_edi_to_ebp CALL_IMMEDIATE %FUNCTION_clearWhiteSpace POP_ebx # _process_expression_locals +POP_ebp # Restore old base pointer +POP_edi # Prevent overwrite POP_ebx # _common_recursion STORE_INTEGER # IF_get_token_0 - LOAD_IMMEDIATE_eax %35 PUSH_eax #_common_recursion -LOAD_EFFECTIVE_ADDRESS %12 +LOAD_BASE_ADDRESS_eax %-4 LOAD_INTEGER POP_ebx # _common_recursion CMP @@ -2104,309 +2104,208 @@ SETE MOVEZBL TEST JUMP_EQ %ELSE_get_token_0 - -LOAD_EFFECTIVE_ADDRESS %8 +LOAD_BASE_ADDRESS_eax %-4 PUSH_eax #_common_recursion -LOAD_EFFECTIVE_ADDRESS %12 +PUSH_edi # Prevent overwriting in recursion +PUSH_ebp # Protect the old base pointer +COPY_esp_to_edi # Copy new base pointer +LOAD_BASE_ADDRESS_eax %-4 LOAD_INTEGER PUSH_eax #_process_expression1 +COPY_edi_to_ebp CALL_IMMEDIATE %FUNCTION_purge_macro POP_ebx # _process_expression_locals +POP_ebp # Restore old base pointer +POP_edi # Prevent overwrite POP_ebx # _common_recursion STORE_INTEGER JUMP %reset JUMP %_END_IF_get_token_0 - :ELSE_get_token_0 - # IF_get_token_1 -LOAD_IMMEDIATE_eax %97 -PUSH_eax #_common_recursion -LOAD_EFFECTIVE_ADDRESS %12 -LOAD_INTEGER -POP_ebx # _common_recursion -CMP -SETLE -MOVEZBL -PUSH_eax #_common_recursion -LOAD_EFFECTIVE_ADDRESS %12 -LOAD_INTEGER -PUSH_eax #_common_recursion -LOAD_IMMEDIATE_eax %122 -POP_ebx # _common_recursion -CMP -SETLE -MOVEZBL -POP_ebx # _common_recursion -AND_eax_ebx -PUSH_eax #_common_recursion -LOAD_IMMEDIATE_eax %65 -PUSH_eax #_common_recursion -LOAD_EFFECTIVE_ADDRESS %16 -LOAD_INTEGER -POP_ebx # _common_recursion -CMP -SETLE -MOVEZBL -PUSH_eax #_common_recursion -LOAD_EFFECTIVE_ADDRESS %16 -LOAD_INTEGER -PUSH_eax #_common_recursion -LOAD_IMMEDIATE_eax %90 -POP_ebx # _common_recursion -CMP -SETLE -MOVEZBL -POP_ebx # _common_recursion -AND_eax_ebx -POP_ebx # _common_recursion -OR_eax_ebx -PUSH_eax #_common_recursion -LOAD_IMMEDIATE_eax %48 -PUSH_eax #_common_recursion -LOAD_EFFECTIVE_ADDRESS %16 -LOAD_INTEGER -POP_ebx # _common_recursion -CMP -SETLE -MOVEZBL -PUSH_eax #_common_recursion -LOAD_EFFECTIVE_ADDRESS %16 -LOAD_INTEGER -PUSH_eax #_common_recursion -LOAD_IMMEDIATE_eax %57 -POP_ebx # _common_recursion -CMP -SETLE -MOVEZBL -POP_ebx # _common_recursion -AND_eax_ebx -POP_ebx # _common_recursion -OR_eax_ebx -PUSH_eax #_common_recursion -LOAD_EFFECTIVE_ADDRESS %12 -LOAD_INTEGER -PUSH_eax #_common_recursion -LOAD_IMMEDIATE_eax %95 -POP_ebx # _common_recursion -CMP -SETE -MOVEZBL -POP_ebx # _common_recursion -OR_eax_ebx -TEST -JUMP_EQ %ELSE_get_token_1 -LOAD_EFFECTIVE_ADDRESS %8 -PUSH_eax #_common_recursion -LOAD_EFFECTIVE_ADDRESS %4 +PUSH_edi # Prevent overwriting in recursion +PUSH_ebp # Protect the old base pointer +COPY_esp_to_edi # Copy new base pointer +LOAD_BASE_ADDRESS_eax %-4 LOAD_INTEGER PUSH_eax #_process_expression1 -LOAD_EFFECTIVE_ADDRESS %16 -LOAD_INTEGER +LOAD_IMMEDIATE_eax &STRING_get_token_2 PUSH_eax #_process_expression2 +COPY_edi_to_ebp +CALL_IMMEDIATE %FUNCTION_in_set +POP_ebx # _process_expression_locals +POP_ebx # _process_expression_locals +POP_ebp # Restore old base pointer +POP_edi # Prevent overwrite +TEST +JUMP_EQ %ELSE_get_token_1 +LOAD_BASE_ADDRESS_eax %-4 +PUSH_eax #_common_recursion +PUSH_edi # Prevent overwriting in recursion +PUSH_ebp # Protect the old base pointer +COPY_esp_to_edi # Copy new base pointer +LOAD_BASE_ADDRESS_eax %-4 +LOAD_INTEGER +PUSH_eax #_process_expression1 +COPY_edi_to_ebp CALL_IMMEDIATE %FUNCTION_preserve_keyword POP_ebx # _process_expression_locals -POP_ebx # _process_expression_locals +POP_ebp # Restore old base pointer +POP_edi # Prevent overwrite POP_ebx # _common_recursion STORE_INTEGER JUMP %_END_IF_get_token_1 :ELSE_get_token_1 -# IF_get_token_2 -LOAD_EFFECTIVE_ADDRESS %8 -LOAD_INTEGER -PUSH_eax #_common_recursion -LOAD_IMMEDIATE_eax %60 -POP_ebx # _common_recursion -CMP -SETE -MOVEZBL -PUSH_eax #_common_recursion -LOAD_EFFECTIVE_ADDRESS %12 -LOAD_INTEGER -PUSH_eax #_common_recursion -LOAD_IMMEDIATE_eax %61 -POP_ebx # _common_recursion -CMP -SETE -MOVEZBL -POP_ebx # _common_recursion -OR_eax_ebx -PUSH_eax #_common_recursion -LOAD_EFFECTIVE_ADDRESS %12 -LOAD_INTEGER -PUSH_eax #_common_recursion -LOAD_IMMEDIATE_eax %62 -POP_ebx # _common_recursion -CMP -SETE -MOVEZBL -POP_ebx # _common_recursion -OR_eax_ebx -PUSH_eax #_common_recursion -LOAD_EFFECTIVE_ADDRESS %12 -LOAD_INTEGER -PUSH_eax #_common_recursion -LOAD_IMMEDIATE_eax %124 -POP_ebx # _common_recursion -CMP -SETE -MOVEZBL -POP_ebx # _common_recursion -OR_eax_ebx -PUSH_eax #_common_recursion -LOAD_EFFECTIVE_ADDRESS %12 -LOAD_INTEGER -PUSH_eax #_common_recursion -LOAD_IMMEDIATE_eax %38 -POP_ebx # _common_recursion -CMP -SETE -MOVEZBL -POP_ebx # _common_recursion -OR_eax_ebx -PUSH_eax #_common_recursion -LOAD_EFFECTIVE_ADDRESS %12 -LOAD_INTEGER -PUSH_eax #_common_recursion -LOAD_IMMEDIATE_eax %33 -POP_ebx # _common_recursion -CMP -SETE -MOVEZBL -POP_ebx # _common_recursion -OR_eax_ebx -PUSH_eax #_common_recursion -LOAD_EFFECTIVE_ADDRESS %12 -LOAD_INTEGER -PUSH_eax #_common_recursion -LOAD_IMMEDIATE_eax %45 -POP_ebx # _common_recursion -CMP -SETE -MOVEZBL -POP_ebx # _common_recursion -OR_eax_ebx -TEST -JUMP_EQ %ELSE_get_token_2 -LOAD_EFFECTIVE_ADDRESS %8 -PUSH_eax #_common_recursion -LOAD_EFFECTIVE_ADDRESS %4 +# IF_get_token_3 +PUSH_edi # Prevent overwriting in recursion +PUSH_ebp # Protect the old base pointer +COPY_esp_to_edi # Copy new base pointer +LOAD_BASE_ADDRESS_eax %-4 LOAD_INTEGER PUSH_eax #_process_expression1 -LOAD_EFFECTIVE_ADDRESS %16 -LOAD_INTEGER +LOAD_IMMEDIATE_eax &STRING_get_token_4 PUSH_eax #_process_expression2 -CALL_IMMEDIATE %FUNCTION_preserve_symbol +COPY_edi_to_ebp +CALL_IMMEDIATE %FUNCTION_in_set POP_ebx # _process_expression_locals POP_ebx # _process_expression_locals -POP_ebx # _common_recursion -STORE_INTEGER -JUMP %_END_IF_get_token_2 -:ELSE_get_token_2 -# IF_get_token_3 -LOAD_EFFECTIVE_ADDRESS %8 -LOAD_INTEGER -PUSH_eax #_common_recursion -LOAD_IMMEDIATE_eax %39 -POP_ebx # _common_recursion -CMP -SETE -MOVEZBL +POP_ebp # Restore old base pointer +POP_edi # Prevent overwrite TEST JUMP_EQ %ELSE_get_token_3 -LOAD_EFFECTIVE_ADDRESS %8 +LOAD_BASE_ADDRESS_eax %-4 PUSH_eax #_common_recursion -LOAD_EFFECTIVE_ADDRESS %4 +PUSH_edi # Prevent overwriting in recursion +PUSH_ebp # Protect the old base pointer +COPY_esp_to_edi # Copy new base pointer +LOAD_BASE_ADDRESS_eax %-4 LOAD_INTEGER PUSH_eax #_process_expression1 -LOAD_EFFECTIVE_ADDRESS %16 -LOAD_INTEGER -PUSH_eax #_process_expression2 -LOAD_IMMEDIATE_eax %39 -PUSH_eax #_process_expression2 -CALL_IMMEDIATE %FUNCTION_consume_word -POP_ebx # _process_expression_locals -POP_ebx # _process_expression_locals +COPY_edi_to_ebp +CALL_IMMEDIATE %FUNCTION_preserve_symbol POP_ebx # _process_expression_locals +POP_ebp # Restore old base pointer +POP_edi # Prevent overwrite POP_ebx # _common_recursion STORE_INTEGER JUMP %_END_IF_get_token_3 :ELSE_get_token_3 -# IF_get_token_4 -LOAD_EFFECTIVE_ADDRESS %8 -LOAD_INTEGER -PUSH_eax #_common_recursion -LOAD_IMMEDIATE_eax %34 -POP_ebx # _common_recursion -CMP -SETE -MOVEZBL -TEST -JUMP_EQ %ELSE_get_token_4 -LOAD_EFFECTIVE_ADDRESS %8 -PUSH_eax #_common_recursion -LOAD_EFFECTIVE_ADDRESS %4 -LOAD_INTEGER -PUSH_eax #_process_expression1 -LOAD_EFFECTIVE_ADDRESS %16 -LOAD_INTEGER -PUSH_eax #_process_expression2 -LOAD_IMMEDIATE_eax %34 -PUSH_eax #_process_expression2 -CALL_IMMEDIATE %FUNCTION_consume_word -POP_ebx # _process_expression_locals -POP_ebx # _process_expression_locals -POP_ebx # _process_expression_locals -POP_ebx # _common_recursion -STORE_INTEGER -JUMP %_END_IF_get_token_4 -:ELSE_get_token_4 # IF_get_token_5 -LOAD_EFFECTIVE_ADDRESS %8 +LOAD_BASE_ADDRESS_eax %-4 LOAD_INTEGER PUSH_eax #_common_recursion -LOAD_IMMEDIATE_eax %47 +LOAD_IMMEDIATE_eax %39 POP_ebx # _common_recursion CMP SETE MOVEZBL TEST JUMP_EQ %ELSE_get_token_5 -LOAD_EFFECTIVE_ADDRESS %8 +LOAD_BASE_ADDRESS_eax %-4 PUSH_eax #_common_recursion -LOAD_EFFECTIVE_ADDRESS %4 +PUSH_edi # Prevent overwriting in recursion +PUSH_ebp # Protect the old base pointer +COPY_esp_to_edi # Copy new base pointer +LOAD_BASE_ADDRESS_eax %-4 LOAD_INTEGER PUSH_eax #_process_expression1 -LOAD_EFFECTIVE_ADDRESS %16 -LOAD_INTEGER +LOAD_IMMEDIATE_eax %39 PUSH_eax #_process_expression2 -CALL_IMMEDIATE %FUNCTION_consume_byte +COPY_edi_to_ebp +CALL_IMMEDIATE %FUNCTION_consume_word POP_ebx # _process_expression_locals POP_ebx # _process_expression_locals +POP_ebp # Restore old base pointer +POP_edi # Prevent overwrite POP_ebx # _common_recursion STORE_INTEGER +JUMP %_END_IF_get_token_5 +:ELSE_get_token_5 # IF_get_token_6 -LOAD_EFFECTIVE_ADDRESS %8 +LOAD_BASE_ADDRESS_eax %-4 LOAD_INTEGER PUSH_eax #_common_recursion -LOAD_IMMEDIATE_eax %42 +LOAD_IMMEDIATE_eax %34 POP_ebx # _common_recursion CMP SETE MOVEZBL TEST JUMP_EQ %ELSE_get_token_6 -LOAD_EFFECTIVE_ADDRESS %8 +LOAD_BASE_ADDRESS_eax %-4 PUSH_eax #_common_recursion +PUSH_edi # Prevent overwriting in recursion +PUSH_ebp # Protect the old base pointer +COPY_esp_to_edi # Copy new base pointer +LOAD_BASE_ADDRESS_eax %-4 +LOAD_INTEGER +PUSH_eax #_process_expression1 +LOAD_IMMEDIATE_eax %34 +PUSH_eax #_process_expression2 +COPY_edi_to_ebp +CALL_IMMEDIATE %FUNCTION_consume_word +POP_ebx # _process_expression_locals +POP_ebx # _process_expression_locals +POP_ebp # Restore old base pointer +POP_edi # Prevent overwrite +POP_ebx # _common_recursion +STORE_INTEGER +JUMP %_END_IF_get_token_6 +:ELSE_get_token_6 +# IF_get_token_7 +LOAD_BASE_ADDRESS_eax %-4 +LOAD_INTEGER +PUSH_eax #_common_recursion +LOAD_IMMEDIATE_eax %47 +POP_ebx # _common_recursion +CMP +SETE +MOVEZBL +TEST +JUMP_EQ %ELSE_get_token_7 +LOAD_BASE_ADDRESS_eax %-4 +PUSH_eax #_common_recursion +PUSH_edi # Prevent overwriting in recursion +PUSH_ebp # Protect the old base pointer +COPY_esp_to_edi # Copy new base pointer +LOAD_BASE_ADDRESS_eax %-4 +LOAD_INTEGER +PUSH_eax #_process_expression1 +COPY_edi_to_ebp +CALL_IMMEDIATE %FUNCTION_consume_byte +POP_ebx # _process_expression_locals +POP_ebp # Restore old base pointer +POP_edi # Prevent overwrite +POP_ebx # _common_recursion +STORE_INTEGER +# IF_get_token_8 +LOAD_BASE_ADDRESS_eax %-4 +LOAD_INTEGER +PUSH_eax #_common_recursion +LOAD_IMMEDIATE_eax %42 +POP_ebx # _common_recursion +CMP +SETE +MOVEZBL +TEST +JUMP_EQ %ELSE_get_token_8 +LOAD_BASE_ADDRESS_eax %-4 +PUSH_eax #_common_recursion +PUSH_edi # Prevent overwriting in recursion +PUSH_ebp # Protect the old base pointer +COPY_esp_to_edi # Copy new base pointer LOAD_IMMEDIATE_eax &GLOBAL_input LOAD_INTEGER PUSH_eax #_process_expression1 +COPY_edi_to_ebp CALL_IMMEDIATE %FUNCTION_fgetc POP_ebx # _process_expression_locals +POP_ebp # Restore old base pointer +POP_edi # Prevent overwrite POP_ebx # _common_recursion STORE_INTEGER -:WHILE_get_token_7 -LOAD_EFFECTIVE_ADDRESS %8 +:WHILE_get_token_9 +LOAD_BASE_ADDRESS_eax %-4 LOAD_INTEGER PUSH_eax #_common_recursion LOAD_IMMEDIATE_eax %47 @@ -2415,10 +2314,10 @@ CMP SETNE MOVEZBL TEST -JUMP_EQ %END_WHILE_get_token_7 -# THEN_while_get_token_7 -:WHILE_get_token_8 -LOAD_EFFECTIVE_ADDRESS %8 +JUMP_EQ %END_WHILE_get_token_9 +# THEN_while_get_token_9 +:WHILE_get_token_10 +LOAD_BASE_ADDRESS_eax %-4 LOAD_INTEGER PUSH_eax #_common_recursion LOAD_IMMEDIATE_eax %42 @@ -2427,28 +2326,34 @@ CMP SETNE MOVEZBL TEST -JUMP_EQ %END_WHILE_get_token_8 -# THEN_while_get_token_8 -LOAD_EFFECTIVE_ADDRESS %8 +JUMP_EQ %END_WHILE_get_token_10 +# THEN_while_get_token_10 +LOAD_BASE_ADDRESS_eax %-4 PUSH_eax #_common_recursion +PUSH_edi # Prevent overwriting in recursion +PUSH_ebp # Protect the old base pointer +COPY_esp_to_edi # Copy new base pointer LOAD_IMMEDIATE_eax &GLOBAL_input LOAD_INTEGER PUSH_eax #_process_expression1 +COPY_edi_to_ebp CALL_IMMEDIATE %FUNCTION_fgetc POP_ebx # _process_expression_locals +POP_ebp # Restore old base pointer +POP_edi # Prevent overwrite POP_ebx # _common_recursion STORE_INTEGER -# IF_get_token_9 +# IF_get_token_11 LOAD_IMMEDIATE_eax %10 PUSH_eax #_common_recursion -LOAD_EFFECTIVE_ADDRESS %12 +LOAD_BASE_ADDRESS_eax %-4 LOAD_INTEGER POP_ebx # _common_recursion CMP SETE MOVEZBL TEST -JUMP_EQ %ELSE_get_token_9 +JUMP_EQ %ELSE_get_token_11 LOAD_IMMEDIATE_eax &GLOBAL_line PUSH_eax #_common_recursion LOAD_IMMEDIATE_eax &GLOBAL_line @@ -2459,31 +2364,37 @@ POP_ebx # _common_recursion ADD_ebx_to_eax POP_ebx # _common_recursion STORE_INTEGER -JUMP %_END_IF_get_token_9 -:ELSE_get_token_9 -:_END_IF_get_token_9 -JUMP %WHILE_get_token_8 -:END_WHILE_get_token_8 -LOAD_EFFECTIVE_ADDRESS %8 +JUMP %_END_IF_get_token_11 +:ELSE_get_token_11 +:_END_IF_get_token_11 +JUMP %WHILE_get_token_10 +:END_WHILE_get_token_10 +LOAD_BASE_ADDRESS_eax %-4 PUSH_eax #_common_recursion +PUSH_edi # Prevent overwriting in recursion +PUSH_ebp # Protect the old base pointer +COPY_esp_to_edi # Copy new base pointer LOAD_IMMEDIATE_eax &GLOBAL_input LOAD_INTEGER PUSH_eax #_process_expression1 +COPY_edi_to_ebp CALL_IMMEDIATE %FUNCTION_fgetc POP_ebx # _process_expression_locals +POP_ebp # Restore old base pointer +POP_edi # Prevent overwrite POP_ebx # _common_recursion STORE_INTEGER -# IF_get_token_10 +# IF_get_token_12 LOAD_IMMEDIATE_eax %10 PUSH_eax #_common_recursion -LOAD_EFFECTIVE_ADDRESS %12 +LOAD_BASE_ADDRESS_eax %-4 LOAD_INTEGER POP_ebx # _common_recursion CMP SETE MOVEZBL TEST -JUMP_EQ %ELSE_get_token_10 +JUMP_EQ %ELSE_get_token_12 LOAD_IMMEDIATE_eax &GLOBAL_line PUSH_eax #_common_recursion LOAD_IMMEDIATE_eax &GLOBAL_line @@ -2494,25 +2405,31 @@ POP_ebx # _common_recursion ADD_ebx_to_eax POP_ebx # _common_recursion STORE_INTEGER -JUMP %_END_IF_get_token_10 -:ELSE_get_token_10 -:_END_IF_get_token_10 -JUMP %WHILE_get_token_7 -:END_WHILE_get_token_7 -LOAD_EFFECTIVE_ADDRESS %8 +JUMP %_END_IF_get_token_12 +:ELSE_get_token_12 +:_END_IF_get_token_12 +JUMP %WHILE_get_token_9 +:END_WHILE_get_token_9 +LOAD_BASE_ADDRESS_eax %-4 PUSH_eax #_common_recursion +PUSH_edi # Prevent overwriting in recursion +PUSH_ebp # Protect the old base pointer +COPY_esp_to_edi # Copy new base pointer LOAD_IMMEDIATE_eax &GLOBAL_input LOAD_INTEGER PUSH_eax #_process_expression1 +COPY_edi_to_ebp CALL_IMMEDIATE %FUNCTION_fgetc POP_ebx # _process_expression_locals +POP_ebp # Restore old base pointer +POP_edi # Prevent overwrite POP_ebx # _common_recursion STORE_INTEGER JUMP %reset -JUMP %_END_IF_get_token_6 -:ELSE_get_token_6 -# IF_get_token_11 -LOAD_EFFECTIVE_ADDRESS %8 +JUMP %_END_IF_get_token_8 +:ELSE_get_token_8 +# IF_get_token_13 +LOAD_BASE_ADDRESS_eax %-4 LOAD_INTEGER PUSH_eax #_common_recursion LOAD_IMMEDIATE_eax %47 @@ -2521,69 +2438,127 @@ CMP SETE MOVEZBL TEST -JUMP_EQ %ELSE_get_token_11 -LOAD_EFFECTIVE_ADDRESS %8 +JUMP_EQ %ELSE_get_token_13 +LOAD_BASE_ADDRESS_eax %-4 PUSH_eax #_common_recursion +PUSH_edi # Prevent overwriting in recursion +PUSH_ebp # Protect the old base pointer +COPY_esp_to_edi # Copy new base pointer LOAD_IMMEDIATE_eax &GLOBAL_input LOAD_INTEGER PUSH_eax #_process_expression1 +COPY_edi_to_ebp CALL_IMMEDIATE %FUNCTION_fgetc POP_ebx # _process_expression_locals +POP_ebp # Restore old base pointer +POP_edi # Prevent overwrite POP_ebx # _common_recursion STORE_INTEGER JUMP %reset -JUMP %_END_IF_get_token_11 -:ELSE_get_token_11 -:_END_IF_get_token_11 -:_END_IF_get_token_6 -JUMP %_END_IF_get_token_5 -:ELSE_get_token_5 -# IF_get_token_12 -LOAD_EFFECTIVE_ADDRESS %8 +JUMP %_END_IF_get_token_13 +:ELSE_get_token_13 +:_END_IF_get_token_13 +:_END_IF_get_token_8 +JUMP %_END_IF_get_token_7 +:ELSE_get_token_7 +# IF_get_token_14 +LOAD_BASE_ADDRESS_eax %-4 LOAD_INTEGER PUSH_eax #_common_recursion -LOAD_IMMEDIATE_eax %0 +LOAD_IMMEDIATE_eax %0xFFFFFFFF POP_ebx # _common_recursion CMP -SETL +SETE MOVEZBL TEST -JUMP_EQ %ELSE_get_token_12 -LOAD_EFFECTIVE_ADDRESS %0 - +JUMP_EQ %ELSE_get_token_14 +PUSH_edi # Prevent overwriting in recursion +PUSH_ebp # Protect the old base pointer +COPY_esp_to_edi # Copy new base pointer +LOAD_BASE_ADDRESS_eax %-12 LOAD_INTEGER PUSH_eax #_process_expression1 +COPY_edi_to_ebp CALL_IMMEDIATE %FUNCTION_free POP_ebx # _process_expression_locals -LOAD_EFFECTIVE_ADDRESS %8 +POP_ebp # Restore old base pointer +POP_edi # Prevent overwrite +LOAD_BASE_ADDRESS_eax %-4 LOAD_INTEGER POP_ebx # _return_result_locals RETURN -JUMP %_END_IF_get_token_12 -:ELSE_get_token_12 -LOAD_EFFECTIVE_ADDRESS %8 +JUMP %_END_IF_get_token_14 +:ELSE_get_token_14 +LOAD_BASE_ADDRESS_eax %-4 PUSH_eax #_common_recursion -LOAD_EFFECTIVE_ADDRESS %4 +PUSH_edi # Prevent overwriting in recursion +PUSH_ebp # Protect the old base pointer +COPY_esp_to_edi # Copy new base pointer +LOAD_BASE_ADDRESS_eax %-4 LOAD_INTEGER PUSH_eax #_process_expression1 -LOAD_EFFECTIVE_ADDRESS %16 -LOAD_INTEGER -PUSH_eax #_process_expression2 +COPY_edi_to_ebp CALL_IMMEDIATE %FUNCTION_consume_byte POP_ebx # _process_expression_locals -POP_ebx # _process_expression_locals +POP_ebp # Restore old base pointer +POP_edi # Prevent overwrite POP_ebx # _common_recursion STORE_INTEGER -:_END_IF_get_token_12 +:_END_IF_get_token_14 +:_END_IF_get_token_7 +:_END_IF_get_token_6 :_END_IF_get_token_5 -:_END_IF_get_token_4 :_END_IF_get_token_3 -:_END_IF_get_token_2 :_END_IF_get_token_1 :_END_IF_get_token_0 - -LOAD_EFFECTIVE_ADDRESS %0 - +LOAD_BASE_ADDRESS_eax %-12 +LOAD_INTEGER +# looking up offset +# -> offset calculation +LOAD_IMMEDIATE_ebx %8 +ADD_ebx_to_eax +PUSH_eax #_common_recursion +PUSH_edi # Prevent overwriting in recursion +PUSH_ebp # Protect the old base pointer +COPY_esp_to_edi # Copy new base pointer +LOAD_IMMEDIATE_eax &GLOBAL_string_index +LOAD_INTEGER +PUSH_eax #_common_recursion +LOAD_IMMEDIATE_eax %2 +POP_ebx # _common_recursion +ADD_ebx_to_eax +PUSH_eax #_process_expression1 +LOAD_IMMEDIATE_eax %1 +PUSH_eax #_process_expression2 +COPY_edi_to_ebp +CALL_IMMEDIATE %FUNCTION_calloc +POP_ebx # _process_expression_locals +POP_ebx # _process_expression_locals +POP_ebp # Restore old base pointer +POP_edi # Prevent overwrite +POP_ebx # _common_recursion +STORE_INTEGER +PUSH_edi # Prevent overwriting in recursion +PUSH_ebp # Protect the old base pointer +COPY_esp_to_edi # Copy new base pointer +LOAD_BASE_ADDRESS_eax %-12 +LOAD_INTEGER +# looking up offset +# -> offset calculation +LOAD_IMMEDIATE_ebx %8 +ADD_ebx_to_eax +LOAD_INTEGER +PUSH_eax #_process_expression1 +LOAD_IMMEDIATE_eax &GLOBAL_hold_string +LOAD_INTEGER +PUSH_eax #_process_expression2 +COPY_edi_to_ebp +CALL_IMMEDIATE %FUNCTION_copy_string +POP_ebx # _process_expression_locals +POP_ebx # _process_expression_locals +POP_ebp # Restore old base pointer +POP_edi # Prevent overwrite +LOAD_BASE_ADDRESS_eax %-12 LOAD_INTEGER # looking up offset # -> offset calculation @@ -2594,8 +2569,7 @@ LOAD_IMMEDIATE_eax &GLOBAL_token LOAD_INTEGER POP_ebx # _common_recursion STORE_INTEGER -LOAD_EFFECTIVE_ADDRESS %0 - +LOAD_BASE_ADDRESS_eax %-12 LOAD_INTEGER # looking up offset PUSH_eax #_common_recursion @@ -2603,8 +2577,7 @@ LOAD_IMMEDIATE_eax &GLOBAL_token LOAD_INTEGER POP_ebx # _common_recursion STORE_INTEGER -LOAD_EFFECTIVE_ADDRESS %0 - +LOAD_BASE_ADDRESS_eax %-12 LOAD_INTEGER # looking up offset # -> offset calculation @@ -2615,8 +2588,7 @@ LOAD_IMMEDIATE_eax &GLOBAL_line LOAD_INTEGER POP_ebx # _common_recursion STORE_INTEGER -LOAD_EFFECTIVE_ADDRESS %0 - +LOAD_BASE_ADDRESS_eax %-12 LOAD_INTEGER # looking up offset # -> offset calculation @@ -2629,11 +2601,11 @@ POP_ebx # _common_recursion STORE_INTEGER LOAD_IMMEDIATE_eax &GLOBAL_token PUSH_eax #_common_recursion -LOAD_EFFECTIVE_ADDRESS %4 +LOAD_BASE_ADDRESS_eax %-12 LOAD_INTEGER POP_ebx # _common_recursion STORE_INTEGER -LOAD_EFFECTIVE_ADDRESS %8 +LOAD_BASE_ADDRESS_eax %-4 LOAD_INTEGER POP_ebx # _return_result_locals RETURN @@ -2643,10 +2615,9 @@ RETURN LOAD_IMMEDIATE_eax %0 PUSH_eax #root :WHILE_reverse_list_0 - LOAD_IMMEDIATE_eax %0 PUSH_eax #_common_recursion -LOAD_EFFECTIVE_ADDRESS %12 +LOAD_BASE_ADDRESS_eax %-4 LOAD_INTEGER POP_ebx # _common_recursion CMP @@ -2654,42 +2625,37 @@ SETNE MOVEZBL TEST JUMP_EQ %END_WHILE_reverse_list_0 - # THEN_while_reverse_list_0 - # Defining local next -LOAD_EFFECTIVE_ADDRESS %8 +LOAD_BASE_ADDRESS_eax %-4 LOAD_INTEGER # looking up offset LOAD_INTEGER PUSH_eax #next -LOAD_EFFECTIVE_ADDRESS %12 +LOAD_BASE_ADDRESS_eax %-4 LOAD_INTEGER # looking up offset PUSH_eax #_common_recursion -LOAD_EFFECTIVE_ADDRESS %8 +LOAD_BASE_ADDRESS_eax %-12 LOAD_INTEGER POP_ebx # _common_recursion STORE_INTEGER -LOAD_EFFECTIVE_ADDRESS %4 +LOAD_BASE_ADDRESS_eax %-12 PUSH_eax #_common_recursion -LOAD_EFFECTIVE_ADDRESS %16 +LOAD_BASE_ADDRESS_eax %-4 LOAD_INTEGER POP_ebx # _common_recursion STORE_INTEGER -LOAD_EFFECTIVE_ADDRESS %12 +LOAD_BASE_ADDRESS_eax %-4 PUSH_eax #_common_recursion -LOAD_EFFECTIVE_ADDRESS %4 +LOAD_BASE_ADDRESS_eax %-16 LOAD_INTEGER POP_ebx # _common_recursion STORE_INTEGER POP_ebx # _recursive_statement_locals JUMP %WHILE_reverse_list_0 - :END_WHILE_reverse_list_0 - -LOAD_EFFECTIVE_ADDRESS %0 - +LOAD_BASE_ADDRESS_eax %-12 LOAD_INTEGER POP_ebx # _return_result_locals RETURN @@ -2697,7 +2663,7 @@ RETURN :FUNCTION_read_all_tokens LOAD_IMMEDIATE_eax &GLOBAL_input PUSH_eax #_common_recursion -LOAD_EFFECTIVE_ADDRESS %16 +LOAD_BASE_ADDRESS_eax %-4 LOAD_INTEGER POP_ebx # _common_recursion STORE_INTEGER @@ -2708,28 +2674,33 @@ POP_ebx # _common_recursion STORE_INTEGER LOAD_IMMEDIATE_eax &GLOBAL_file PUSH_eax #_common_recursion -LOAD_EFFECTIVE_ADDRESS %8 +LOAD_BASE_ADDRESS_eax %-12 LOAD_INTEGER POP_ebx # _common_recursion STORE_INTEGER LOAD_IMMEDIATE_eax &GLOBAL_token PUSH_eax #_common_recursion -LOAD_EFFECTIVE_ADDRESS %12 +LOAD_BASE_ADDRESS_eax %-8 LOAD_INTEGER POP_ebx # _common_recursion STORE_INTEGER # Defining local ch +PUSH_edi # Prevent overwriting in recursion +PUSH_ebp # Protect the old base pointer +COPY_esp_to_edi # Copy new base pointer LOAD_IMMEDIATE_eax &GLOBAL_input LOAD_INTEGER PUSH_eax #_process_expression1 +COPY_edi_to_ebp CALL_IMMEDIATE %FUNCTION_fgetc POP_ebx # _process_expression_locals +POP_ebp # Restore old base pointer +POP_edi # Prevent overwrite PUSH_eax #ch :WHILE_read_all_tokens_0 - LOAD_IMMEDIATE_eax %0xFFFFFFFF PUSH_eax #_common_recursion -LOAD_EFFECTIVE_ADDRESS %4 +LOAD_BASE_ADDRESS_eax %-20 LOAD_INTEGER POP_ebx # _common_recursion CMP @@ -2737,23 +2708,24 @@ SETNE MOVEZBL TEST JUMP_EQ %END_WHILE_read_all_tokens_0 - # THEN_while_read_all_tokens_0 - -LOAD_EFFECTIVE_ADDRESS %0 - +LOAD_BASE_ADDRESS_eax %-20 PUSH_eax #_common_recursion -LOAD_EFFECTIVE_ADDRESS %4 +PUSH_edi # Prevent overwriting in recursion +PUSH_ebp # Protect the old base pointer +COPY_esp_to_edi # Copy new base pointer +LOAD_BASE_ADDRESS_eax %-20 LOAD_INTEGER PUSH_eax #_process_expression1 +COPY_edi_to_ebp CALL_IMMEDIATE %FUNCTION_get_token POP_ebx # _process_expression_locals +POP_ebp # Restore old base pointer +POP_edi # Prevent overwrite POP_ebx # _common_recursion STORE_INTEGER JUMP %WHILE_read_all_tokens_0 - :END_WHILE_read_all_tokens_0 - LOAD_IMMEDIATE_eax &GLOBAL_token LOAD_INTEGER POP_ebx # _return_result_locals @@ -2761,32 +2733,25 @@ RETURN # Defining function upcase :FUNCTION_upcase # IF_upcase_0 - -LOAD_IMMEDIATE_eax %97 -PUSH_eax #_common_recursion -LOAD_EFFECTIVE_ADDRESS %8 +PUSH_edi # Prevent overwriting in recursion +PUSH_ebp # Protect the old base pointer +COPY_esp_to_edi # Copy new base pointer +LOAD_BASE_ADDRESS_eax %-4 LOAD_INTEGER -POP_ebx # _common_recursion -CMP -SETLE -MOVEZBL -PUSH_eax #_common_recursion -LOAD_IMMEDIATE_eax %122 -PUSH_eax #_common_recursion -LOAD_EFFECTIVE_ADDRESS %12 -LOAD_INTEGER -POP_ebx # _common_recursion -CMP -SETGE -MOVEZBL -POP_ebx # _common_recursion -AND_eax_ebx +PUSH_eax #_process_expression1 +LOAD_IMMEDIATE_eax &STRING_upcase_1 +PUSH_eax #_process_expression2 +COPY_edi_to_ebp +CALL_IMMEDIATE %FUNCTION_in_set +POP_ebx # _process_expression_locals +POP_ebx # _process_expression_locals +POP_ebp # Restore old base pointer +POP_edi # Prevent overwrite TEST JUMP_EQ %ELSE_upcase_0 - -LOAD_EFFECTIVE_ADDRESS %4 +LOAD_BASE_ADDRESS_eax %-4 PUSH_eax #_common_recursion -LOAD_EFFECTIVE_ADDRESS %8 +LOAD_BASE_ADDRESS_eax %-4 LOAD_INTEGER PUSH_eax #_common_recursion LOAD_IMMEDIATE_eax %32 @@ -2796,28 +2761,30 @@ MOVE_ebx_to_eax POP_ebx # _common_recursion STORE_INTEGER JUMP %_END_IF_upcase_0 - :ELSE_upcase_0 - :_END_IF_upcase_0 - -LOAD_EFFECTIVE_ADDRESS %4 +LOAD_BASE_ADDRESS_eax %-4 LOAD_INTEGER RETURN # Defining function hexify :FUNCTION_hexify # Defining local i -LOAD_EFFECTIVE_ADDRESS %8 +PUSH_edi # Prevent overwriting in recursion +PUSH_ebp # Protect the old base pointer +COPY_esp_to_edi # Copy new base pointer +LOAD_BASE_ADDRESS_eax %-4 LOAD_INTEGER PUSH_eax #_process_expression1 +COPY_edi_to_ebp CALL_IMMEDIATE %FUNCTION_char2hex POP_ebx # _process_expression_locals +POP_ebp # Restore old base pointer +POP_edi # Prevent overwrite PUSH_eax #i # IF_hexify_0 - LOAD_IMMEDIATE_eax %0 PUSH_eax #_common_recursion -LOAD_EFFECTIVE_ADDRESS %4 +LOAD_BASE_ADDRESS_eax %-16 LOAD_INTEGER POP_ebx # _common_recursion CMP @@ -2825,57 +2792,74 @@ SETG MOVEZBL TEST JUMP_EQ %ELSE_hexify_0 - -LOAD_IMMEDIATE_eax &STRING_0 - +PUSH_edi # Prevent overwriting in recursion +PUSH_ebp # Protect the old base pointer +COPY_esp_to_edi # Copy new base pointer +LOAD_IMMEDIATE_eax &STRING_hexify_1 PUSH_eax #_process_expression1 LOAD_IMMEDIATE_eax %2 PUSH_eax #_process_expression2 +COPY_edi_to_ebp CALL_IMMEDIATE %FUNCTION_file_print POP_ebx # _process_expression_locals POP_ebx # _process_expression_locals +POP_ebp # Restore old base pointer +POP_edi # Prevent overwrite +PUSH_edi # Prevent overwriting in recursion +PUSH_ebp # Protect the old base pointer +COPY_esp_to_edi # Copy new base pointer LOAD_IMMEDIATE_eax %1 PUSH_eax #_process_expression1 +COPY_edi_to_ebp CALL_IMMEDIATE %FUNCTION_exit POP_ebx # _process_expression_locals +POP_ebp # Restore old base pointer +POP_edi # Prevent overwrite JUMP %_END_IF_hexify_0 - :ELSE_hexify_0 - :_END_IF_hexify_0 - -# IF_hexify_1 -LOAD_EFFECTIVE_ADDRESS %8 +# IF_hexify_2 +LOAD_BASE_ADDRESS_eax %-8 LOAD_INTEGER TEST -JUMP_EQ %ELSE_hexify_1 -LOAD_EFFECTIVE_ADDRESS %0 - +JUMP_EQ %ELSE_hexify_2 +LOAD_BASE_ADDRESS_eax %-16 PUSH_eax #_common_recursion -LOAD_EFFECTIVE_ADDRESS %4 +LOAD_BASE_ADDRESS_eax %-16 LOAD_INTEGER PUSH_eax #_common_recursion LOAD_IMMEDIATE_eax %4 +POP_ebx # _common_recursion COPY_eax_to_ecx -POP_eax +COPY_ebx_to_eax SAL_eax_cl POP_ebx # _common_recursion STORE_INTEGER -JUMP %_END_IF_hexify_1 -:ELSE_hexify_1 -:_END_IF_hexify_1 -LOAD_EFFECTIVE_ADDRESS %0 - +JUMP %_END_IF_hexify_2 +:ELSE_hexify_2 +:_END_IF_hexify_2 +LOAD_BASE_ADDRESS_eax %-16 LOAD_INTEGER POP_ebx # _return_result_locals RETURN # Defining function weird :FUNCTION_weird -# IF_weird_0 - -LOAD_IMMEDIATE_eax %0 +# Defining local c +PUSH_eax #c +LOAD_BASE_ADDRESS_eax %-4 PUSH_eax #_common_recursion -LOAD_EFFECTIVE_ADDRESS %8 +LOAD_BASE_ADDRESS_eax %-4 +LOAD_INTEGER +PUSH_eax #_common_recursion +LOAD_IMMEDIATE_eax %1 +POP_ebx # _common_recursion +ADD_ebx_to_eax +POP_ebx # _common_recursion +STORE_INTEGER +:weird_reset #C goto label +LOAD_BASE_ADDRESS_eax %-12 +PUSH_eax #_common_recursion +LOAD_BASE_ADDRESS_eax %-4 LOAD_INTEGER PUSH_eax #_common_recursion LOAD_IMMEDIATE_eax %0 @@ -2883,40 +2867,54 @@ POP_ebx # _common_recursion ADD_ebx_to_eax LOAD_BYTE POP_ebx # _common_recursion +STORE_INTEGER +# IF_weird_0 +LOAD_IMMEDIATE_eax %0 +PUSH_eax #_common_recursion +LOAD_BASE_ADDRESS_eax %-12 +LOAD_INTEGER +POP_ebx # _common_recursion CMP SETE MOVEZBL TEST JUMP_EQ %ELSE_weird_0 - LOAD_IMMEDIATE_eax %0 +POP_ebx # _return_result_locals RETURN JUMP %_END_IF_weird_0 - :ELSE_weird_0 - :_END_IF_weird_0 - # IF_weird_1 LOAD_IMMEDIATE_eax %92 PUSH_eax #_common_recursion -LOAD_EFFECTIVE_ADDRESS %8 +LOAD_BASE_ADDRESS_eax %-12 LOAD_INTEGER -PUSH_eax #_common_recursion -LOAD_IMMEDIATE_eax %0 -POP_ebx # _common_recursion -ADD_ebx_to_eax -LOAD_BYTE POP_ebx # _common_recursion CMP SETE MOVEZBL TEST JUMP_EQ %ELSE_weird_1 +LOAD_BASE_ADDRESS_eax %-12 +PUSH_eax #_common_recursion +PUSH_edi # Prevent overwriting in recursion +PUSH_ebp # Protect the old base pointer +COPY_esp_to_edi # Copy new base pointer +LOAD_BASE_ADDRESS_eax %-4 +LOAD_INTEGER +PUSH_eax #_process_expression1 +COPY_edi_to_ebp +CALL_IMMEDIATE %FUNCTION_escape_lookup +POP_ebx # _process_expression_locals +POP_ebp # Restore old base pointer +POP_edi # Prevent overwrite +POP_ebx # _common_recursion +STORE_INTEGER # IF_weird_2 LOAD_IMMEDIATE_eax %120 PUSH_eax #_common_recursion -LOAD_EFFECTIVE_ADDRESS %8 +LOAD_BASE_ADDRESS_eax %-4 LOAD_INTEGER PUSH_eax #_common_recursion LOAD_IMMEDIATE_eax %1 @@ -2929,597 +2927,142 @@ SETE MOVEZBL TEST JUMP_EQ %ELSE_weird_2 -# IF_weird_3 -LOAD_IMMEDIATE_eax %48 +LOAD_BASE_ADDRESS_eax %-4 PUSH_eax #_common_recursion -LOAD_EFFECTIVE_ADDRESS %8 +LOAD_BASE_ADDRESS_eax %-4 LOAD_INTEGER PUSH_eax #_common_recursion LOAD_IMMEDIATE_eax %2 POP_ebx # _common_recursion ADD_ebx_to_eax -LOAD_BYTE POP_ebx # _common_recursion -CMP -SETE -MOVEZBL -TEST -JUMP_EQ %ELSE_weird_3 -LOAD_IMMEDIATE_eax %1 -RETURN -JUMP %_END_IF_weird_3 -:ELSE_weird_3 -# IF_weird_4 -LOAD_IMMEDIATE_eax %49 -PUSH_eax #_common_recursion -LOAD_EFFECTIVE_ADDRESS %8 -LOAD_INTEGER -PUSH_eax #_common_recursion -LOAD_IMMEDIATE_eax %2 -POP_ebx # _common_recursion -ADD_ebx_to_eax -LOAD_BYTE -POP_ebx # _common_recursion -CMP -SETE -MOVEZBL -TEST -JUMP_EQ %ELSE_weird_4 -LOAD_IMMEDIATE_eax %1 -RETURN -JUMP %_END_IF_weird_4 -:ELSE_weird_4 -# IF_weird_5 -LOAD_IMMEDIATE_eax %50 -PUSH_eax #_common_recursion -LOAD_EFFECTIVE_ADDRESS %8 -LOAD_INTEGER -PUSH_eax #_common_recursion -LOAD_IMMEDIATE_eax %2 -POP_ebx # _common_recursion -ADD_ebx_to_eax -LOAD_BYTE -POP_ebx # _common_recursion -CMP -SETE -MOVEZBL -TEST -JUMP_EQ %ELSE_weird_5 -# IF_weird_6 -LOAD_IMMEDIATE_eax %50 -PUSH_eax #_common_recursion -LOAD_EFFECTIVE_ADDRESS %8 -LOAD_INTEGER -PUSH_eax #_common_recursion -LOAD_IMMEDIATE_eax %3 -POP_ebx # _common_recursion -ADD_ebx_to_eax -LOAD_BYTE -POP_ebx # _common_recursion -CMP -SETE -MOVEZBL -TEST -JUMP_EQ %ELSE_weird_6 -LOAD_IMMEDIATE_eax %1 -RETURN -JUMP %_END_IF_weird_6 -:ELSE_weird_6 -LOAD_EFFECTIVE_ADDRESS %4 -LOAD_INTEGER -PUSH_eax #_common_recursion -LOAD_IMMEDIATE_eax %3 -POP_ebx # _common_recursion -ADD_ebx_to_eax -PUSH_eax #_process_expression1 -CALL_IMMEDIATE %FUNCTION_weird -POP_ebx # _process_expression_locals -RETURN -:_END_IF_weird_6 -JUMP %_END_IF_weird_5 -:ELSE_weird_5 -# IF_weird_7 -LOAD_IMMEDIATE_eax %51 -PUSH_eax #_common_recursion -LOAD_EFFECTIVE_ADDRESS %8 -LOAD_INTEGER -PUSH_eax #_common_recursion -LOAD_IMMEDIATE_eax %2 -POP_ebx # _common_recursion -ADD_ebx_to_eax -LOAD_BYTE -POP_ebx # _common_recursion -CMP -SETE -MOVEZBL -TEST -JUMP_EQ %ELSE_weird_7 -# IF_weird_8 -LOAD_IMMEDIATE_eax %65 -PUSH_eax #_common_recursion -LOAD_EFFECTIVE_ADDRESS %8 -LOAD_INTEGER -PUSH_eax #_common_recursion -LOAD_IMMEDIATE_eax %3 -POP_ebx # _common_recursion -ADD_ebx_to_eax -LOAD_BYTE -POP_ebx # _common_recursion -CMP -SETE -MOVEZBL -TEST -JUMP_EQ %ELSE_weird_8 -LOAD_IMMEDIATE_eax %1 -RETURN -JUMP %_END_IF_weird_8 -:ELSE_weird_8 -LOAD_EFFECTIVE_ADDRESS %4 -LOAD_INTEGER -PUSH_eax #_common_recursion -LOAD_IMMEDIATE_eax %3 -POP_ebx # _common_recursion -ADD_ebx_to_eax -PUSH_eax #_process_expression1 -CALL_IMMEDIATE %FUNCTION_weird -POP_ebx # _process_expression_locals -RETURN -:_END_IF_weird_8 -JUMP %_END_IF_weird_7 -:ELSE_weird_7 -# IF_weird_9 -LOAD_IMMEDIATE_eax %56 -PUSH_eax #_common_recursion -LOAD_EFFECTIVE_ADDRESS %8 -LOAD_INTEGER -PUSH_eax #_common_recursion -LOAD_IMMEDIATE_eax %2 -POP_ebx # _common_recursion -ADD_ebx_to_eax -LOAD_BYTE -POP_ebx # _common_recursion -CMP -SETE -MOVEZBL -TEST -JUMP_EQ %ELSE_weird_9 -LOAD_IMMEDIATE_eax %1 -RETURN -JUMP %_END_IF_weird_9 -:ELSE_weird_9 -# IF_weird_10 -LOAD_IMMEDIATE_eax %57 -PUSH_eax #_common_recursion -LOAD_EFFECTIVE_ADDRESS %8 -LOAD_INTEGER -PUSH_eax #_common_recursion -LOAD_IMMEDIATE_eax %2 -POP_ebx # _common_recursion -ADD_ebx_to_eax -LOAD_BYTE -POP_ebx # _common_recursion -CMP -SETE -MOVEZBL -TEST -JUMP_EQ %ELSE_weird_10 -LOAD_IMMEDIATE_eax %1 -RETURN -JUMP %_END_IF_weird_10 -:ELSE_weird_10 -# IF_weird_11 -LOAD_IMMEDIATE_eax %97 -PUSH_eax #_common_recursion -LOAD_EFFECTIVE_ADDRESS %8 -LOAD_INTEGER -PUSH_eax #_common_recursion -LOAD_IMMEDIATE_eax %2 -POP_ebx # _common_recursion -ADD_ebx_to_eax -LOAD_BYTE -POP_ebx # _common_recursion -CMP -SETE -MOVEZBL -TEST -JUMP_EQ %ELSE_weird_11 -LOAD_IMMEDIATE_eax %1 -RETURN -JUMP %_END_IF_weird_11 -:ELSE_weird_11 -# IF_weird_12 -LOAD_IMMEDIATE_eax %65 -PUSH_eax #_common_recursion -LOAD_EFFECTIVE_ADDRESS %8 -LOAD_INTEGER -PUSH_eax #_common_recursion -LOAD_IMMEDIATE_eax %2 -POP_ebx # _common_recursion -ADD_ebx_to_eax -LOAD_BYTE -POP_ebx # _common_recursion -CMP -SETE -MOVEZBL -TEST -JUMP_EQ %ELSE_weird_12 -LOAD_IMMEDIATE_eax %1 -RETURN -JUMP %_END_IF_weird_12 -:ELSE_weird_12 -# IF_weird_13 -LOAD_IMMEDIATE_eax %98 -PUSH_eax #_common_recursion -LOAD_EFFECTIVE_ADDRESS %8 -LOAD_INTEGER -PUSH_eax #_common_recursion -LOAD_IMMEDIATE_eax %2 -POP_ebx # _common_recursion -ADD_ebx_to_eax -LOAD_BYTE -POP_ebx # _common_recursion -CMP -SETE -MOVEZBL -TEST -JUMP_EQ %ELSE_weird_13 -LOAD_IMMEDIATE_eax %1 -RETURN -JUMP %_END_IF_weird_13 -:ELSE_weird_13 -# IF_weird_14 -LOAD_IMMEDIATE_eax %66 -PUSH_eax #_common_recursion -LOAD_EFFECTIVE_ADDRESS %8 -LOAD_INTEGER -PUSH_eax #_common_recursion -LOAD_IMMEDIATE_eax %2 -POP_ebx # _common_recursion -ADD_ebx_to_eax -LOAD_BYTE -POP_ebx # _common_recursion -CMP -SETE -MOVEZBL -TEST -JUMP_EQ %ELSE_weird_14 -LOAD_IMMEDIATE_eax %1 -RETURN -JUMP %_END_IF_weird_14 -:ELSE_weird_14 -# IF_weird_15 -LOAD_IMMEDIATE_eax %99 -PUSH_eax #_common_recursion -LOAD_EFFECTIVE_ADDRESS %8 -LOAD_INTEGER -PUSH_eax #_common_recursion -LOAD_IMMEDIATE_eax %2 -POP_ebx # _common_recursion -ADD_ebx_to_eax -LOAD_BYTE -POP_ebx # _common_recursion -CMP -SETE -MOVEZBL -TEST -JUMP_EQ %ELSE_weird_15 -LOAD_IMMEDIATE_eax %1 -RETURN -JUMP %_END_IF_weird_15 -:ELSE_weird_15 -# IF_weird_16 -LOAD_IMMEDIATE_eax %67 -PUSH_eax #_common_recursion -LOAD_EFFECTIVE_ADDRESS %8 -LOAD_INTEGER -PUSH_eax #_common_recursion -LOAD_IMMEDIATE_eax %2 -POP_ebx # _common_recursion -ADD_ebx_to_eax -LOAD_BYTE -POP_ebx # _common_recursion -CMP -SETE -MOVEZBL -TEST -JUMP_EQ %ELSE_weird_16 -LOAD_IMMEDIATE_eax %1 -RETURN -JUMP %_END_IF_weird_16 -:ELSE_weird_16 -# IF_weird_17 -LOAD_IMMEDIATE_eax %100 -PUSH_eax #_common_recursion -LOAD_EFFECTIVE_ADDRESS %8 -LOAD_INTEGER -PUSH_eax #_common_recursion -LOAD_IMMEDIATE_eax %2 -POP_ebx # _common_recursion -ADD_ebx_to_eax -LOAD_BYTE -POP_ebx # _common_recursion -CMP -SETE -MOVEZBL -TEST -JUMP_EQ %ELSE_weird_17 -LOAD_IMMEDIATE_eax %1 -RETURN -JUMP %_END_IF_weird_17 -:ELSE_weird_17 -# IF_weird_18 -LOAD_IMMEDIATE_eax %68 -PUSH_eax #_common_recursion -LOAD_EFFECTIVE_ADDRESS %8 -LOAD_INTEGER -PUSH_eax #_common_recursion -LOAD_IMMEDIATE_eax %2 -POP_ebx # _common_recursion -ADD_ebx_to_eax -LOAD_BYTE -POP_ebx # _common_recursion -CMP -SETE -MOVEZBL -TEST -JUMP_EQ %ELSE_weird_18 -LOAD_IMMEDIATE_eax %1 -RETURN -JUMP %_END_IF_weird_18 -:ELSE_weird_18 -# IF_weird_19 -LOAD_IMMEDIATE_eax %101 -PUSH_eax #_common_recursion -LOAD_EFFECTIVE_ADDRESS %8 -LOAD_INTEGER -PUSH_eax #_common_recursion -LOAD_IMMEDIATE_eax %2 -POP_ebx # _common_recursion -ADD_ebx_to_eax -LOAD_BYTE -POP_ebx # _common_recursion -CMP -SETE -MOVEZBL -TEST -JUMP_EQ %ELSE_weird_19 -LOAD_IMMEDIATE_eax %1 -RETURN -JUMP %_END_IF_weird_19 -:ELSE_weird_19 -# IF_weird_20 -LOAD_IMMEDIATE_eax %69 -PUSH_eax #_common_recursion -LOAD_EFFECTIVE_ADDRESS %8 -LOAD_INTEGER -PUSH_eax #_common_recursion -LOAD_IMMEDIATE_eax %2 -POP_ebx # _common_recursion -ADD_ebx_to_eax -LOAD_BYTE -POP_ebx # _common_recursion -CMP -SETE -MOVEZBL -TEST -JUMP_EQ %ELSE_weird_20 -LOAD_IMMEDIATE_eax %1 -RETURN -JUMP %_END_IF_weird_20 -:ELSE_weird_20 -# IF_weird_21 -LOAD_IMMEDIATE_eax %102 -PUSH_eax #_common_recursion -LOAD_EFFECTIVE_ADDRESS %8 -LOAD_INTEGER -PUSH_eax #_common_recursion -LOAD_IMMEDIATE_eax %2 -POP_ebx # _common_recursion -ADD_ebx_to_eax -LOAD_BYTE -POP_ebx # _common_recursion -CMP -SETE -MOVEZBL -TEST -JUMP_EQ %ELSE_weird_21 -LOAD_IMMEDIATE_eax %1 -RETURN -JUMP %_END_IF_weird_21 -:ELSE_weird_21 -# IF_weird_22 -LOAD_IMMEDIATE_eax %70 -PUSH_eax #_common_recursion -LOAD_EFFECTIVE_ADDRESS %8 -LOAD_INTEGER -PUSH_eax #_common_recursion -LOAD_IMMEDIATE_eax %2 -POP_ebx # _common_recursion -ADD_ebx_to_eax -LOAD_BYTE -POP_ebx # _common_recursion -CMP -SETE -MOVEZBL -TEST -JUMP_EQ %ELSE_weird_22 -LOAD_IMMEDIATE_eax %1 -RETURN -JUMP %_END_IF_weird_22 -:ELSE_weird_22 -LOAD_EFFECTIVE_ADDRESS %4 -LOAD_INTEGER -PUSH_eax #_common_recursion -LOAD_IMMEDIATE_eax %3 -POP_ebx # _common_recursion -ADD_ebx_to_eax -PUSH_eax #_process_expression1 -CALL_IMMEDIATE %FUNCTION_weird -POP_ebx # _process_expression_locals -RETURN -:_END_IF_weird_22 -:_END_IF_weird_21 -:_END_IF_weird_20 -:_END_IF_weird_19 -:_END_IF_weird_18 -:_END_IF_weird_17 -:_END_IF_weird_16 -:_END_IF_weird_15 -:_END_IF_weird_14 -:_END_IF_weird_13 -:_END_IF_weird_12 -:_END_IF_weird_11 -:_END_IF_weird_10 -:_END_IF_weird_9 -:_END_IF_weird_7 -:_END_IF_weird_5 -:_END_IF_weird_4 -:_END_IF_weird_3 +STORE_INTEGER JUMP %_END_IF_weird_2 :ELSE_weird_2 -# IF_weird_23 -LOAD_IMMEDIATE_eax %110 -PUSH_eax #_common_recursion -LOAD_EFFECTIVE_ADDRESS %8 -LOAD_INTEGER -PUSH_eax #_common_recursion -LOAD_IMMEDIATE_eax %1 -POP_ebx # _common_recursion -ADD_ebx_to_eax -LOAD_BYTE -POP_ebx # _common_recursion -CMP -SETE -MOVEZBL -TEST -JUMP_EQ %ELSE_weird_23 -# IF_weird_24 -LOAD_IMMEDIATE_eax %58 -PUSH_eax #_common_recursion -LOAD_EFFECTIVE_ADDRESS %8 -LOAD_INTEGER -PUSH_eax #_common_recursion -LOAD_IMMEDIATE_eax %2 -POP_ebx # _common_recursion -ADD_ebx_to_eax -LOAD_BYTE -POP_ebx # _common_recursion -CMP -SETE -MOVEZBL -TEST -JUMP_EQ %ELSE_weird_24 -LOAD_IMMEDIATE_eax %1 -RETURN -JUMP %_END_IF_weird_24 -:ELSE_weird_24 -:_END_IF_weird_24 -LOAD_EFFECTIVE_ADDRESS %4 -LOAD_INTEGER -PUSH_eax #_common_recursion -LOAD_IMMEDIATE_eax %2 -POP_ebx # _common_recursion -ADD_ebx_to_eax -PUSH_eax #_process_expression1 -CALL_IMMEDIATE %FUNCTION_weird -POP_ebx # _process_expression_locals -RETURN -JUMP %_END_IF_weird_23 -:ELSE_weird_23 -# IF_weird_25 -LOAD_IMMEDIATE_eax %116 -PUSH_eax #_common_recursion -LOAD_EFFECTIVE_ADDRESS %8 -LOAD_INTEGER -PUSH_eax #_common_recursion -LOAD_IMMEDIATE_eax %1 -POP_ebx # _common_recursion -ADD_ebx_to_eax -LOAD_BYTE -POP_ebx # _common_recursion -CMP -SETE -MOVEZBL -TEST -JUMP_EQ %ELSE_weird_25 -LOAD_EFFECTIVE_ADDRESS %4 -LOAD_INTEGER -PUSH_eax #_common_recursion -LOAD_IMMEDIATE_eax %2 -POP_ebx # _common_recursion -ADD_ebx_to_eax -PUSH_eax #_process_expression1 -CALL_IMMEDIATE %FUNCTION_weird -POP_ebx # _process_expression_locals -RETURN -JUMP %_END_IF_weird_25 -:ELSE_weird_25 -# IF_weird_26 -LOAD_IMMEDIATE_eax %34 -PUSH_eax #_common_recursion -LOAD_EFFECTIVE_ADDRESS %8 -LOAD_INTEGER -PUSH_eax #_common_recursion -LOAD_IMMEDIATE_eax %1 -POP_ebx # _common_recursion -ADD_ebx_to_eax -LOAD_BYTE -POP_ebx # _common_recursion -CMP -SETE -MOVEZBL -TEST -JUMP_EQ %ELSE_weird_26 -LOAD_IMMEDIATE_eax %1 -RETURN -JUMP %_END_IF_weird_26 -:ELSE_weird_26 -LOAD_EFFECTIVE_ADDRESS %4 -LOAD_INTEGER -PUSH_eax #_common_recursion -LOAD_IMMEDIATE_eax %3 -POP_ebx # _common_recursion -ADD_ebx_to_eax -PUSH_eax #_process_expression1 -CALL_IMMEDIATE %FUNCTION_weird -POP_ebx # _process_expression_locals -RETURN -:_END_IF_weird_26 -:_END_IF_weird_25 -:_END_IF_weird_23 :_END_IF_weird_2 +LOAD_BASE_ADDRESS_eax %-4 +PUSH_eax #_common_recursion +LOAD_BASE_ADDRESS_eax %-4 +LOAD_INTEGER +PUSH_eax #_common_recursion +LOAD_IMMEDIATE_eax %1 +POP_ebx # _common_recursion +ADD_ebx_to_eax +POP_ebx # _common_recursion +STORE_INTEGER JUMP %_END_IF_weird_1 :ELSE_weird_1 :_END_IF_weird_1 -LOAD_EFFECTIVE_ADDRESS %4 +# IF_weird_3 +LOAD_IMMEDIATE_eax %1 +PUSH_eax #_common_recursion +PUSH_edi # Prevent overwriting in recursion +PUSH_ebp # Protect the old base pointer +COPY_esp_to_edi # Copy new base pointer +LOAD_BASE_ADDRESS_eax %-12 +LOAD_INTEGER +PUSH_eax #_process_expression1 +LOAD_IMMEDIATE_eax &STRING_weird_4 +PUSH_eax #_process_expression2 +COPY_edi_to_ebp +CALL_IMMEDIATE %FUNCTION_in_set +POP_ebx # _process_expression_locals +POP_ebx # _process_expression_locals +POP_ebp # Restore old base pointer +POP_edi # Prevent overwrite +POP_ebx # _common_recursion +XOR_ebx_eax_into_eax +TEST +JUMP_EQ %ELSE_weird_3 +LOAD_IMMEDIATE_eax %1 +POP_ebx # _return_result_locals +RETURN +JUMP %_END_IF_weird_3 +:ELSE_weird_3 +:_END_IF_weird_3 +# IF_weird_5 +PUSH_edi # Prevent overwriting in recursion +PUSH_ebp # Protect the old base pointer +COPY_esp_to_edi # Copy new base pointer +LOAD_BASE_ADDRESS_eax %-12 +LOAD_INTEGER +PUSH_eax #_process_expression1 +LOAD_IMMEDIATE_eax &STRING_weird_6 +PUSH_eax #_process_expression2 +COPY_edi_to_ebp +CALL_IMMEDIATE %FUNCTION_in_set +POP_ebx # _process_expression_locals +POP_ebx # _process_expression_locals +POP_ebp # Restore old base pointer +POP_edi # Prevent overwrite +PUSH_eax #_common_recursion +LOAD_IMMEDIATE_eax %58 +PUSH_eax #_common_recursion +LOAD_BASE_ADDRESS_eax %-4 LOAD_INTEGER PUSH_eax #_common_recursion LOAD_IMMEDIATE_eax %1 POP_ebx # _common_recursion ADD_ebx_to_eax -PUSH_eax #_process_expression1 -CALL_IMMEDIATE %FUNCTION_weird -POP_ebx # _process_expression_locals +LOAD_BYTE +POP_ebx # _common_recursion +CMP +SETE +MOVEZBL +POP_ebx # _common_recursion +AND_eax_ebx +TEST +JUMP_EQ %ELSE_weird_5 +LOAD_IMMEDIATE_eax %1 +POP_ebx # _return_result_locals +RETURN +JUMP %_END_IF_weird_5 +:ELSE_weird_5 +:_END_IF_weird_5 +LOAD_BASE_ADDRESS_eax %-4 +PUSH_eax #_common_recursion +LOAD_BASE_ADDRESS_eax %-4 +LOAD_INTEGER +PUSH_eax #_common_recursion +LOAD_IMMEDIATE_eax %1 +POP_ebx # _common_recursion +ADD_ebx_to_eax +POP_ebx # _common_recursion +STORE_INTEGER +JUMP %weird_reset +POP_ebx # _recursive_statement_locals RETURN # Defining function escape_lookup :FUNCTION_escape_lookup # IF_escape_lookup_0 - -LOAD_EFFECTIVE_ADDRESS %4 +LOAD_IMMEDIATE_eax %92 +PUSH_eax #_common_recursion +LOAD_BASE_ADDRESS_eax %-4 LOAD_INTEGER PUSH_eax #_common_recursion LOAD_IMMEDIATE_eax %0 POP_ebx # _common_recursion ADD_ebx_to_eax LOAD_BYTE -PUSH_eax #_common_recursion -LOAD_IMMEDIATE_eax %92 POP_ebx # _common_recursion CMP -SETE +SETNE MOVEZBL +TEST +JUMP_EQ %ELSE_escape_lookup_0 +LOAD_BASE_ADDRESS_eax %-4 +LOAD_INTEGER PUSH_eax #_common_recursion -LOAD_EFFECTIVE_ADDRESS %8 +LOAD_IMMEDIATE_eax %0 +POP_ebx # _common_recursion +ADD_ebx_to_eax +LOAD_BYTE +RETURN +JUMP %_END_IF_escape_lookup_0 +:ELSE_escape_lookup_0 +:_END_IF_escape_lookup_0 +# IF_escape_lookup_1 +LOAD_BASE_ADDRESS_eax %-4 LOAD_INTEGER PUSH_eax #_common_recursion LOAD_IMMEDIATE_eax %1 @@ -3532,13 +3075,13 @@ POP_ebx # _common_recursion CMP SETE MOVEZBL -POP_ebx # _common_recursion -AND_eax_ebx TEST -JUMP_EQ %ELSE_escape_lookup_0 - +JUMP_EQ %ELSE_escape_lookup_1 # Defining local t1 -LOAD_EFFECTIVE_ADDRESS %4 +PUSH_edi # Prevent overwriting in recursion +PUSH_ebp # Protect the old base pointer +COPY_esp_to_edi # Copy new base pointer +LOAD_BASE_ADDRESS_eax %-4 LOAD_INTEGER PUSH_eax #_common_recursion LOAD_IMMEDIATE_eax %2 @@ -3548,12 +3091,18 @@ LOAD_BYTE PUSH_eax #_process_expression1 LOAD_IMMEDIATE_eax %1 PUSH_eax #_process_expression2 +COPY_edi_to_ebp CALL_IMMEDIATE %FUNCTION_hexify POP_ebx # _process_expression_locals POP_ebx # _process_expression_locals +POP_ebp # Restore old base pointer +POP_edi # Prevent overwrite PUSH_eax #t1 # Defining local t2 -LOAD_EFFECTIVE_ADDRESS %8 +PUSH_edi # Prevent overwriting in recursion +PUSH_ebp # Protect the old base pointer +COPY_esp_to_edi # Copy new base pointer +LOAD_BASE_ADDRESS_eax %-4 LOAD_INTEGER PUSH_eax #_common_recursion LOAD_IMMEDIATE_eax %3 @@ -3563,40 +3112,27 @@ LOAD_BYTE PUSH_eax #_process_expression1 LOAD_IMMEDIATE_eax %0 PUSH_eax #_process_expression2 +COPY_edi_to_ebp CALL_IMMEDIATE %FUNCTION_hexify POP_ebx # _process_expression_locals POP_ebx # _process_expression_locals +POP_ebp # Restore old base pointer +POP_edi # Prevent overwrite PUSH_eax #t2 -LOAD_EFFECTIVE_ADDRESS %4 +LOAD_BASE_ADDRESS_eax %-12 LOAD_INTEGER PUSH_eax #_common_recursion -LOAD_EFFECTIVE_ADDRESS %4 +LOAD_BASE_ADDRESS_eax %-16 LOAD_INTEGER POP_ebx # _common_recursion ADD_ebx_to_eax POP_ebx # _return_result_locals POP_ebx # _return_result_locals RETURN -JUMP %_END_IF_escape_lookup_0 - -:ELSE_escape_lookup_0 - -# IF_escape_lookup_1 -LOAD_EFFECTIVE_ADDRESS %4 -LOAD_INTEGER -PUSH_eax #_common_recursion -LOAD_IMMEDIATE_eax %0 -POP_ebx # _common_recursion -ADD_ebx_to_eax -LOAD_BYTE -PUSH_eax #_common_recursion -LOAD_IMMEDIATE_eax %92 -POP_ebx # _common_recursion -CMP -SETE -MOVEZBL -PUSH_eax #_common_recursion -LOAD_EFFECTIVE_ADDRESS %8 +JUMP %_END_IF_escape_lookup_1 +:ELSE_escape_lookup_1 +# IF_escape_lookup_2 +LOAD_BASE_ADDRESS_eax %-4 LOAD_INTEGER PUSH_eax #_common_recursion LOAD_IMMEDIATE_eax %1 @@ -3609,30 +3145,14 @@ POP_ebx # _common_recursion CMP SETE MOVEZBL -POP_ebx # _common_recursion -AND_eax_ebx TEST -JUMP_EQ %ELSE_escape_lookup_1 +JUMP_EQ %ELSE_escape_lookup_2 LOAD_IMMEDIATE_eax %10 RETURN -JUMP %_END_IF_escape_lookup_1 -:ELSE_escape_lookup_1 -# IF_escape_lookup_2 -LOAD_EFFECTIVE_ADDRESS %4 -LOAD_INTEGER -PUSH_eax #_common_recursion -LOAD_IMMEDIATE_eax %0 -POP_ebx # _common_recursion -ADD_ebx_to_eax -LOAD_BYTE -PUSH_eax #_common_recursion -LOAD_IMMEDIATE_eax %92 -POP_ebx # _common_recursion -CMP -SETE -MOVEZBL -PUSH_eax #_common_recursion -LOAD_EFFECTIVE_ADDRESS %8 +JUMP %_END_IF_escape_lookup_2 +:ELSE_escape_lookup_2 +# IF_escape_lookup_3 +LOAD_BASE_ADDRESS_eax %-4 LOAD_INTEGER PUSH_eax #_common_recursion LOAD_IMMEDIATE_eax %1 @@ -3645,55 +3165,17 @@ POP_ebx # _common_recursion CMP SETE MOVEZBL -POP_ebx # _common_recursion -AND_eax_ebx -TEST -JUMP_EQ %ELSE_escape_lookup_2 -LOAD_IMMEDIATE_eax %9 -RETURN -JUMP %_END_IF_escape_lookup_2 -:ELSE_escape_lookup_2 -# IF_escape_lookup_3 -LOAD_EFFECTIVE_ADDRESS %4 -LOAD_INTEGER -PUSH_eax #_common_recursion -LOAD_IMMEDIATE_eax %0 -POP_ebx # _common_recursion -ADD_ebx_to_eax -LOAD_BYTE -PUSH_eax #_common_recursion -LOAD_IMMEDIATE_eax %92 -POP_ebx # _common_recursion -CMP -SETE -MOVEZBL -PUSH_eax #_common_recursion -LOAD_EFFECTIVE_ADDRESS %8 -LOAD_INTEGER -PUSH_eax #_common_recursion -LOAD_IMMEDIATE_eax %1 -POP_ebx # _common_recursion -ADD_ebx_to_eax -LOAD_BYTE -PUSH_eax #_common_recursion -LOAD_IMMEDIATE_eax %92 -POP_ebx # _common_recursion -CMP -SETE -MOVEZBL -POP_ebx # _common_recursion -AND_eax_ebx TEST JUMP_EQ %ELSE_escape_lookup_3 -LOAD_IMMEDIATE_eax %92 +LOAD_IMMEDIATE_eax %9 RETURN JUMP %_END_IF_escape_lookup_3 :ELSE_escape_lookup_3 # IF_escape_lookup_4 -LOAD_EFFECTIVE_ADDRESS %4 +LOAD_BASE_ADDRESS_eax %-4 LOAD_INTEGER PUSH_eax #_common_recursion -LOAD_IMMEDIATE_eax %0 +LOAD_IMMEDIATE_eax %1 POP_ebx # _common_recursion ADD_ebx_to_eax LOAD_BYTE @@ -3703,44 +3185,34 @@ POP_ebx # _common_recursion CMP SETE MOVEZBL -PUSH_eax #_common_recursion -LOAD_EFFECTIVE_ADDRESS %8 -LOAD_INTEGER -PUSH_eax #_common_recursion -LOAD_IMMEDIATE_eax %1 -POP_ebx # _common_recursion -ADD_ebx_to_eax -LOAD_BYTE -PUSH_eax #_common_recursion -LOAD_IMMEDIATE_eax %39 -POP_ebx # _common_recursion -CMP -SETE -MOVEZBL -POP_ebx # _common_recursion -AND_eax_ebx TEST JUMP_EQ %ELSE_escape_lookup_4 -LOAD_IMMEDIATE_eax %39 +LOAD_IMMEDIATE_eax %92 RETURN JUMP %_END_IF_escape_lookup_4 :ELSE_escape_lookup_4 # IF_escape_lookup_5 -LOAD_EFFECTIVE_ADDRESS %4 +LOAD_BASE_ADDRESS_eax %-4 LOAD_INTEGER PUSH_eax #_common_recursion -LOAD_IMMEDIATE_eax %0 +LOAD_IMMEDIATE_eax %1 POP_ebx # _common_recursion ADD_ebx_to_eax LOAD_BYTE PUSH_eax #_common_recursion -LOAD_IMMEDIATE_eax %92 +LOAD_IMMEDIATE_eax %39 POP_ebx # _common_recursion CMP SETE MOVEZBL -PUSH_eax #_common_recursion -LOAD_EFFECTIVE_ADDRESS %8 +TEST +JUMP_EQ %ELSE_escape_lookup_5 +LOAD_IMMEDIATE_eax %39 +RETURN +JUMP %_END_IF_escape_lookup_5 +:ELSE_escape_lookup_5 +# IF_escape_lookup_6 +LOAD_BASE_ADDRESS_eax %-4 LOAD_INTEGER PUSH_eax #_common_recursion LOAD_IMMEDIATE_eax %1 @@ -3753,30 +3225,14 @@ POP_ebx # _common_recursion CMP SETE MOVEZBL -POP_ebx # _common_recursion -AND_eax_ebx TEST -JUMP_EQ %ELSE_escape_lookup_5 +JUMP_EQ %ELSE_escape_lookup_6 LOAD_IMMEDIATE_eax %34 RETURN -JUMP %_END_IF_escape_lookup_5 -:ELSE_escape_lookup_5 -# IF_escape_lookup_6 -LOAD_EFFECTIVE_ADDRESS %4 -LOAD_INTEGER -PUSH_eax #_common_recursion -LOAD_IMMEDIATE_eax %0 -POP_ebx # _common_recursion -ADD_ebx_to_eax -LOAD_BYTE -PUSH_eax #_common_recursion -LOAD_IMMEDIATE_eax %92 -POP_ebx # _common_recursion -CMP -SETE -MOVEZBL -PUSH_eax #_common_recursion -LOAD_EFFECTIVE_ADDRESS %8 +JUMP %_END_IF_escape_lookup_6 +:ELSE_escape_lookup_6 +# IF_escape_lookup_7 +LOAD_BASE_ADDRESS_eax %-4 LOAD_INTEGER PUSH_eax #_common_recursion LOAD_IMMEDIATE_eax %1 @@ -3789,84 +3245,199 @@ POP_ebx # _common_recursion CMP SETE MOVEZBL -POP_ebx # _common_recursion -AND_eax_ebx TEST -JUMP_EQ %ELSE_escape_lookup_6 +JUMP_EQ %ELSE_escape_lookup_7 LOAD_IMMEDIATE_eax %13 RETURN -JUMP %_END_IF_escape_lookup_6 -:ELSE_escape_lookup_6 +JUMP %_END_IF_escape_lookup_7 +:ELSE_escape_lookup_7 +:_END_IF_escape_lookup_7 :_END_IF_escape_lookup_6 :_END_IF_escape_lookup_5 :_END_IF_escape_lookup_4 :_END_IF_escape_lookup_3 :_END_IF_escape_lookup_2 :_END_IF_escape_lookup_1 -:_END_IF_escape_lookup_0 - -LOAD_IMMEDIATE_eax &STRING_1 +PUSH_edi # Prevent overwriting in recursion +PUSH_ebp # Protect the old base pointer +COPY_esp_to_edi # Copy new base pointer +LOAD_IMMEDIATE_eax &STRING_escape_lookup_8 PUSH_eax #_process_expression1 LOAD_IMMEDIATE_eax %2 PUSH_eax #_process_expression2 +COPY_edi_to_ebp CALL_IMMEDIATE %FUNCTION_file_print POP_ebx # _process_expression_locals POP_ebx # _process_expression_locals -LOAD_EFFECTIVE_ADDRESS %4 +POP_ebp # Restore old base pointer +POP_edi # Prevent overwrite +PUSH_edi # Prevent overwriting in recursion +PUSH_ebp # Protect the old base pointer +COPY_esp_to_edi # Copy new base pointer +LOAD_BASE_ADDRESS_eax %-4 LOAD_INTEGER PUSH_eax #_process_expression1 LOAD_IMMEDIATE_eax %2 PUSH_eax #_process_expression2 +COPY_edi_to_ebp CALL_IMMEDIATE %FUNCTION_file_print POP_ebx # _process_expression_locals POP_ebx # _process_expression_locals -LOAD_IMMEDIATE_eax &STRING_2 +POP_ebp # Restore old base pointer +POP_edi # Prevent overwrite +PUSH_edi # Prevent overwriting in recursion +PUSH_ebp # Protect the old base pointer +COPY_esp_to_edi # Copy new base pointer +LOAD_IMMEDIATE_eax &STRING_escape_lookup_9 PUSH_eax #_process_expression1 LOAD_IMMEDIATE_eax %2 PUSH_eax #_process_expression2 +COPY_edi_to_ebp CALL_IMMEDIATE %FUNCTION_file_print POP_ebx # _process_expression_locals POP_ebx # _process_expression_locals +POP_ebp # Restore old base pointer +POP_edi # Prevent overwrite +PUSH_edi # Prevent overwriting in recursion +PUSH_ebp # Protect the old base pointer +COPY_esp_to_edi # Copy new base pointer LOAD_IMMEDIATE_eax %1 PUSH_eax #_process_expression1 +COPY_edi_to_ebp CALL_IMMEDIATE %FUNCTION_exit POP_ebx # _process_expression_locals +POP_ebp # Restore old base pointer +POP_edi # Prevent overwrite RETURN # Defining function collect_regular_string :FUNCTION_collect_regular_string -# Defining local j +LOAD_IMMEDIATE_eax &GLOBAL_string_index +PUSH_eax #_common_recursion LOAD_IMMEDIATE_eax %0 -PUSH_eax #j -# Defining local i -LOAD_IMMEDIATE_eax %0 -PUSH_eax #i -# Defining local message -LOAD_IMMEDIATE_eax %4096 -PUSH_eax #_process_expression1 -LOAD_IMMEDIATE_eax %1 -PUSH_eax #_process_expression2 -CALL_IMMEDIATE %FUNCTION_calloc -POP_ebx # _process_expression_locals -POP_ebx # _process_expression_locals -PUSH_eax #message -LOAD_EFFECTIVE_ADDRESS %0 - +POP_ebx # _common_recursion +STORE_INTEGER +:collect_regular_string_reset #C goto label +# IF_collect_regular_string_0 +LOAD_BASE_ADDRESS_eax %-4 LOAD_INTEGER PUSH_eax #_common_recursion LOAD_IMMEDIATE_eax %0 POP_ebx # _common_recursion ADD_ebx_to_eax +LOAD_BYTE PUSH_eax #_common_recursion -LOAD_IMMEDIATE_eax %34 +LOAD_IMMEDIATE_eax %92 +POP_ebx # _common_recursion +CMP +SETE +MOVEZBL +TEST +JUMP_EQ %ELSE_collect_regular_string_0 +LOAD_IMMEDIATE_eax &GLOBAL_hold_string +LOAD_INTEGER +PUSH_eax #_common_recursion +LOAD_IMMEDIATE_eax &GLOBAL_string_index +LOAD_INTEGER +POP_ebx # _common_recursion +ADD_ebx_to_eax +PUSH_eax #_common_recursion +PUSH_edi # Prevent overwriting in recursion +PUSH_ebp # Protect the old base pointer +COPY_esp_to_edi # Copy new base pointer +LOAD_BASE_ADDRESS_eax %-4 +LOAD_INTEGER +PUSH_eax #_process_expression1 +COPY_edi_to_ebp +CALL_IMMEDIATE %FUNCTION_escape_lookup +POP_ebx # _process_expression_locals +POP_ebp # Restore old base pointer +POP_edi # Prevent overwrite POP_ebx # _common_recursion STORE_CHAR -:WHILE_collect_regular_string_0 - -LOAD_EFFECTIVE_ADDRESS %16 +# IF_collect_regular_string_1 +LOAD_BASE_ADDRESS_eax %-4 LOAD_INTEGER PUSH_eax #_common_recursion -LOAD_EFFECTIVE_ADDRESS %12 +LOAD_IMMEDIATE_eax %1 +POP_ebx # _common_recursion +ADD_ebx_to_eax +LOAD_BYTE +PUSH_eax #_common_recursion +LOAD_IMMEDIATE_eax %120 +POP_ebx # _common_recursion +CMP +SETE +MOVEZBL +TEST +JUMP_EQ %ELSE_collect_regular_string_1 +LOAD_BASE_ADDRESS_eax %-4 +PUSH_eax #_common_recursion +LOAD_BASE_ADDRESS_eax %-4 LOAD_INTEGER +PUSH_eax #_common_recursion +LOAD_IMMEDIATE_eax %2 +POP_ebx # _common_recursion +ADD_ebx_to_eax +POP_ebx # _common_recursion +STORE_INTEGER +JUMP %_END_IF_collect_regular_string_1 +:ELSE_collect_regular_string_1 +:_END_IF_collect_regular_string_1 +LOAD_BASE_ADDRESS_eax %-4 +PUSH_eax #_common_recursion +LOAD_BASE_ADDRESS_eax %-4 +LOAD_INTEGER +PUSH_eax #_common_recursion +LOAD_IMMEDIATE_eax %2 +POP_ebx # _common_recursion +ADD_ebx_to_eax +POP_ebx # _common_recursion +STORE_INTEGER +JUMP %_END_IF_collect_regular_string_0 +:ELSE_collect_regular_string_0 +LOAD_IMMEDIATE_eax &GLOBAL_hold_string +LOAD_INTEGER +PUSH_eax #_common_recursion +LOAD_IMMEDIATE_eax &GLOBAL_string_index +LOAD_INTEGER +POP_ebx # _common_recursion +ADD_ebx_to_eax +PUSH_eax #_common_recursion +LOAD_BASE_ADDRESS_eax %-4 +LOAD_INTEGER +PUSH_eax #_common_recursion +LOAD_IMMEDIATE_eax %0 +POP_ebx # _common_recursion +ADD_ebx_to_eax +LOAD_BYTE +POP_ebx # _common_recursion +STORE_CHAR +LOAD_BASE_ADDRESS_eax %-4 +PUSH_eax #_common_recursion +LOAD_BASE_ADDRESS_eax %-4 +LOAD_INTEGER +PUSH_eax #_common_recursion +LOAD_IMMEDIATE_eax %1 +POP_ebx # _common_recursion +ADD_ebx_to_eax +POP_ebx # _common_recursion +STORE_INTEGER +:_END_IF_collect_regular_string_0 +LOAD_IMMEDIATE_eax &GLOBAL_string_index +PUSH_eax #_common_recursion +LOAD_IMMEDIATE_eax &GLOBAL_string_index +LOAD_INTEGER +PUSH_eax #_common_recursion +LOAD_IMMEDIATE_eax %1 +POP_ebx # _common_recursion +ADD_ebx_to_eax +POP_ebx # _common_recursion +STORE_INTEGER +# IF_collect_regular_string_2 +LOAD_BASE_ADDRESS_eax %-4 +LOAD_INTEGER +PUSH_eax #_common_recursion +LOAD_IMMEDIATE_eax %0 POP_ebx # _common_recursion ADD_ebx_to_eax LOAD_BYTE @@ -3877,181 +3448,15 @@ CMP SETNE MOVEZBL TEST -JUMP_EQ %END_WHILE_collect_regular_string_0 - -# THEN_while_collect_regular_string_0 - -# IF_collect_regular_string_1 -LOAD_EFFECTIVE_ADDRESS %16 -LOAD_INTEGER -PUSH_eax #_common_recursion -LOAD_EFFECTIVE_ADDRESS %12 -LOAD_INTEGER -POP_ebx # _common_recursion -ADD_ebx_to_eax -LOAD_BYTE -PUSH_eax #_common_recursion -LOAD_IMMEDIATE_eax %92 -POP_ebx # _common_recursion -CMP -SETE -MOVEZBL -PUSH_eax #_common_recursion -LOAD_EFFECTIVE_ADDRESS %20 -LOAD_INTEGER -PUSH_eax #_common_recursion -LOAD_EFFECTIVE_ADDRESS %16 -LOAD_INTEGER -PUSH_eax #_common_recursion -LOAD_IMMEDIATE_eax %1 -POP_ebx # _common_recursion -ADD_ebx_to_eax -POP_ebx # _common_recursion -ADD_ebx_to_eax -LOAD_BYTE -PUSH_eax #_common_recursion -LOAD_IMMEDIATE_eax %120 -POP_ebx # _common_recursion -CMP -SETE -MOVEZBL -POP_ebx # _common_recursion -AND_eax_ebx -TEST -JUMP_EQ %ELSE_collect_regular_string_1 -LOAD_EFFECTIVE_ADDRESS %0 - -LOAD_INTEGER -PUSH_eax #_common_recursion -LOAD_EFFECTIVE_ADDRESS %8 -LOAD_INTEGER -POP_ebx # _common_recursion -ADD_ebx_to_eax -PUSH_eax #_common_recursion -LOAD_EFFECTIVE_ADDRESS %20 -LOAD_INTEGER -PUSH_eax #_common_recursion -LOAD_EFFECTIVE_ADDRESS %16 -LOAD_INTEGER -POP_ebx # _common_recursion -ADD_ebx_to_eax -PUSH_eax #_process_expression1 -CALL_IMMEDIATE %FUNCTION_escape_lookup -POP_ebx # _process_expression_locals -POP_ebx # _common_recursion -STORE_CHAR -LOAD_EFFECTIVE_ADDRESS %8 -PUSH_eax #_common_recursion -LOAD_EFFECTIVE_ADDRESS %12 -LOAD_INTEGER -PUSH_eax #_common_recursion -LOAD_IMMEDIATE_eax %4 -POP_ebx # _common_recursion -ADD_ebx_to_eax -POP_ebx # _common_recursion -STORE_INTEGER -JUMP %_END_IF_collect_regular_string_1 -:ELSE_collect_regular_string_1 -# IF_collect_regular_string_2 -LOAD_EFFECTIVE_ADDRESS %16 -LOAD_INTEGER -PUSH_eax #_common_recursion -LOAD_EFFECTIVE_ADDRESS %12 -LOAD_INTEGER -POP_ebx # _common_recursion -ADD_ebx_to_eax -LOAD_BYTE -PUSH_eax #_common_recursion -LOAD_IMMEDIATE_eax %92 -POP_ebx # _common_recursion -CMP -SETE -MOVEZBL -TEST JUMP_EQ %ELSE_collect_regular_string_2 -LOAD_EFFECTIVE_ADDRESS %0 - -LOAD_INTEGER -PUSH_eax #_common_recursion -LOAD_EFFECTIVE_ADDRESS %8 -LOAD_INTEGER -POP_ebx # _common_recursion -ADD_ebx_to_eax -PUSH_eax #_common_recursion -LOAD_EFFECTIVE_ADDRESS %20 -LOAD_INTEGER -PUSH_eax #_common_recursion -LOAD_EFFECTIVE_ADDRESS %16 -LOAD_INTEGER -POP_ebx # _common_recursion -ADD_ebx_to_eax -PUSH_eax #_process_expression1 -CALL_IMMEDIATE %FUNCTION_escape_lookup -POP_ebx # _process_expression_locals -POP_ebx # _common_recursion -STORE_CHAR -LOAD_EFFECTIVE_ADDRESS %8 -PUSH_eax #_common_recursion -LOAD_EFFECTIVE_ADDRESS %12 -LOAD_INTEGER -PUSH_eax #_common_recursion -LOAD_IMMEDIATE_eax %2 -POP_ebx # _common_recursion -ADD_ebx_to_eax -POP_ebx # _common_recursion -STORE_INTEGER +JUMP %collect_regular_string_reset JUMP %_END_IF_collect_regular_string_2 :ELSE_collect_regular_string_2 -LOAD_EFFECTIVE_ADDRESS %0 - -LOAD_INTEGER -PUSH_eax #_common_recursion -LOAD_EFFECTIVE_ADDRESS %8 -LOAD_INTEGER -POP_ebx # _common_recursion -ADD_ebx_to_eax -PUSH_eax #_common_recursion -LOAD_EFFECTIVE_ADDRESS %20 -LOAD_INTEGER -PUSH_eax #_common_recursion -LOAD_EFFECTIVE_ADDRESS %16 -LOAD_INTEGER -POP_ebx # _common_recursion -ADD_ebx_to_eax -LOAD_BYTE -POP_ebx # _common_recursion -STORE_CHAR -LOAD_EFFECTIVE_ADDRESS %8 -PUSH_eax #_common_recursion -LOAD_EFFECTIVE_ADDRESS %12 -LOAD_INTEGER -PUSH_eax #_common_recursion -LOAD_IMMEDIATE_eax %1 -POP_ebx # _common_recursion -ADD_ebx_to_eax -POP_ebx # _common_recursion -STORE_INTEGER :_END_IF_collect_regular_string_2 -:_END_IF_collect_regular_string_1 -LOAD_EFFECTIVE_ADDRESS %4 -PUSH_eax #_common_recursion -LOAD_EFFECTIVE_ADDRESS %8 +LOAD_IMMEDIATE_eax &GLOBAL_hold_string LOAD_INTEGER PUSH_eax #_common_recursion -LOAD_IMMEDIATE_eax %1 -POP_ebx # _common_recursion -ADD_ebx_to_eax -POP_ebx # _common_recursion -STORE_INTEGER -JUMP %WHILE_collect_regular_string_0 - -:END_WHILE_collect_regular_string_0 - -LOAD_EFFECTIVE_ADDRESS %0 - -LOAD_INTEGER -PUSH_eax #_common_recursion -LOAD_EFFECTIVE_ADDRESS %8 +LOAD_IMMEDIATE_eax &GLOBAL_string_index LOAD_INTEGER POP_ebx # _common_recursion ADD_ebx_to_eax @@ -4059,11 +3464,10 @@ PUSH_eax #_common_recursion LOAD_IMMEDIATE_eax %34 POP_ebx # _common_recursion STORE_CHAR -LOAD_EFFECTIVE_ADDRESS %0 - +LOAD_IMMEDIATE_eax &GLOBAL_hold_string LOAD_INTEGER PUSH_eax #_common_recursion -LOAD_EFFECTIVE_ADDRESS %8 +LOAD_IMMEDIATE_eax &GLOBAL_string_index LOAD_INTEGER PUSH_eax #_common_recursion LOAD_IMMEDIATE_eax %1 @@ -4075,35 +3479,65 @@ PUSH_eax #_common_recursion LOAD_IMMEDIATE_eax %10 POP_ebx # _common_recursion STORE_CHAR -LOAD_EFFECTIVE_ADDRESS %0 - +# Defining local message +PUSH_edi # Prevent overwriting in recursion +PUSH_ebp # Protect the old base pointer +COPY_esp_to_edi # Copy new base pointer +LOAD_IMMEDIATE_eax &GLOBAL_string_index +LOAD_INTEGER +PUSH_eax #_common_recursion +LOAD_IMMEDIATE_eax %3 +POP_ebx # _common_recursion +ADD_ebx_to_eax +PUSH_eax #_process_expression1 +LOAD_IMMEDIATE_eax %1 +PUSH_eax #_process_expression2 +COPY_edi_to_ebp +CALL_IMMEDIATE %FUNCTION_calloc +POP_ebx # _process_expression_locals +POP_ebx # _process_expression_locals +POP_ebp # Restore old base pointer +POP_edi # Prevent overwrite +PUSH_eax #message +PUSH_edi # Prevent overwriting in recursion +PUSH_ebp # Protect the old base pointer +COPY_esp_to_edi # Copy new base pointer +LOAD_BASE_ADDRESS_eax %-12 +LOAD_INTEGER +PUSH_eax #_process_expression1 +LOAD_IMMEDIATE_eax &GLOBAL_hold_string +LOAD_INTEGER +PUSH_eax #_process_expression2 +COPY_edi_to_ebp +CALL_IMMEDIATE %FUNCTION_copy_string +POP_ebx # _process_expression_locals +POP_ebx # _process_expression_locals +POP_ebp # Restore old base pointer +POP_edi # Prevent overwrite +PUSH_edi # Prevent overwriting in recursion +PUSH_ebp # Protect the old base pointer +COPY_esp_to_edi # Copy new base pointer +COPY_edi_to_ebp +CALL_IMMEDIATE %FUNCTION_reset_hold_string +POP_ebp # Restore old base pointer +POP_edi # Prevent overwrite +LOAD_BASE_ADDRESS_eax %-12 LOAD_INTEGER -POP_ebx # _return_result_locals -POP_ebx # _return_result_locals POP_ebx # _return_result_locals RETURN # Defining function collect_weird_string :FUNCTION_collect_weird_string -# Defining local j +LOAD_IMMEDIATE_eax &GLOBAL_string_index +PUSH_eax #_common_recursion LOAD_IMMEDIATE_eax %1 -PUSH_eax #j -# Defining local k -LOAD_IMMEDIATE_eax %1 -PUSH_eax #k +POP_ebx # _common_recursion +STORE_INTEGER +# Defining local temp +PUSH_eax #temp # Defining local table -LOAD_IMMEDIATE_eax &STRING_3 +LOAD_IMMEDIATE_eax &STRING_collect_weird_string_0 PUSH_eax #table -# Defining local hold -LOAD_IMMEDIATE_eax %4096 -PUSH_eax #_process_expression1 -LOAD_IMMEDIATE_eax %1 -PUSH_eax #_process_expression2 -CALL_IMMEDIATE %FUNCTION_calloc -POP_ebx # _process_expression_locals -POP_ebx # _process_expression_locals -PUSH_eax #hold -LOAD_EFFECTIVE_ADDRESS %0 - +LOAD_IMMEDIATE_eax &GLOBAL_hold_string LOAD_INTEGER PUSH_eax #_common_recursion LOAD_IMMEDIATE_eax %0 @@ -4113,32 +3547,21 @@ PUSH_eax #_common_recursion LOAD_IMMEDIATE_eax %39 POP_ebx # _common_recursion STORE_CHAR -:WHILE_collect_weird_string_0 - -LOAD_EFFECTIVE_ADDRESS %20 +:collect_weird_string_reset #C goto label +LOAD_BASE_ADDRESS_eax %-4 +PUSH_eax #_common_recursion +LOAD_BASE_ADDRESS_eax %-4 LOAD_INTEGER PUSH_eax #_common_recursion -LOAD_EFFECTIVE_ADDRESS %16 -LOAD_INTEGER +LOAD_IMMEDIATE_eax %1 POP_ebx # _common_recursion ADD_ebx_to_eax -LOAD_BYTE -PUSH_eax #_common_recursion -LOAD_IMMEDIATE_eax %0 POP_ebx # _common_recursion -CMP -SETNE -MOVEZBL -TEST -JUMP_EQ %END_WHILE_collect_weird_string_0 - -# THEN_while_collect_weird_string_0 - -LOAD_EFFECTIVE_ADDRESS %0 - +STORE_INTEGER +LOAD_IMMEDIATE_eax &GLOBAL_hold_string LOAD_INTEGER PUSH_eax #_common_recursion -LOAD_EFFECTIVE_ADDRESS %12 +LOAD_IMMEDIATE_eax &GLOBAL_string_index LOAD_INTEGER POP_ebx # _common_recursion ADD_ebx_to_eax @@ -4146,49 +3569,25 @@ PUSH_eax #_common_recursion LOAD_IMMEDIATE_eax %32 POP_ebx # _common_recursion STORE_CHAR -# IF_collect_weird_string_1 -LOAD_EFFECTIVE_ADDRESS %20 +LOAD_BASE_ADDRESS_eax %-12 +PUSH_eax #_common_recursion +PUSH_edi # Prevent overwriting in recursion +PUSH_ebp # Protect the old base pointer +COPY_esp_to_edi # Copy new base pointer +LOAD_BASE_ADDRESS_eax %-4 +LOAD_INTEGER +PUSH_eax #_process_expression1 +COPY_edi_to_ebp +CALL_IMMEDIATE %FUNCTION_escape_lookup +POP_ebx # _process_expression_locals +POP_ebp # Restore old base pointer +POP_edi # Prevent overwrite +POP_ebx # _common_recursion +STORE_INTEGER +LOAD_IMMEDIATE_eax &GLOBAL_hold_string LOAD_INTEGER PUSH_eax #_common_recursion -LOAD_EFFECTIVE_ADDRESS %16 -LOAD_INTEGER -POP_ebx # _common_recursion -ADD_ebx_to_eax -LOAD_BYTE -PUSH_eax #_common_recursion -LOAD_IMMEDIATE_eax %92 -POP_ebx # _common_recursion -CMP -SETE -MOVEZBL -PUSH_eax #_common_recursion -LOAD_EFFECTIVE_ADDRESS %24 -LOAD_INTEGER -PUSH_eax #_common_recursion -LOAD_EFFECTIVE_ADDRESS %20 -LOAD_INTEGER -PUSH_eax #_common_recursion -LOAD_IMMEDIATE_eax %1 -POP_ebx # _common_recursion -ADD_ebx_to_eax -POP_ebx # _common_recursion -ADD_ebx_to_eax -LOAD_BYTE -PUSH_eax #_common_recursion -LOAD_IMMEDIATE_eax %120 -POP_ebx # _common_recursion -CMP -SETE -MOVEZBL -POP_ebx # _common_recursion -AND_eax_ebx -TEST -JUMP_EQ %ELSE_collect_weird_string_1 -LOAD_EFFECTIVE_ADDRESS %0 - -LOAD_INTEGER -PUSH_eax #_common_recursion -LOAD_EFFECTIVE_ADDRESS %12 +LOAD_IMMEDIATE_eax &GLOBAL_string_index LOAD_INTEGER PUSH_eax #_common_recursion LOAD_IMMEDIATE_eax %1 @@ -4197,268 +3596,26 @@ ADD_ebx_to_eax POP_ebx # _common_recursion ADD_ebx_to_eax PUSH_eax #_common_recursion -LOAD_EFFECTIVE_ADDRESS %24 +LOAD_BASE_ADDRESS_eax %-16 LOAD_INTEGER PUSH_eax #_common_recursion -LOAD_EFFECTIVE_ADDRESS %20 -LOAD_INTEGER -PUSH_eax #_common_recursion -LOAD_IMMEDIATE_eax %2 -POP_ebx # _common_recursion -ADD_ebx_to_eax -POP_ebx # _common_recursion -ADD_ebx_to_eax -LOAD_BYTE -PUSH_eax #_process_expression1 -CALL_IMMEDIATE %FUNCTION_upcase -POP_ebx # _process_expression_locals -POP_ebx # _common_recursion -STORE_CHAR -LOAD_EFFECTIVE_ADDRESS %0 - -LOAD_INTEGER -PUSH_eax #_common_recursion -LOAD_EFFECTIVE_ADDRESS %12 -LOAD_INTEGER -PUSH_eax #_common_recursion -LOAD_IMMEDIATE_eax %2 -POP_ebx # _common_recursion -ADD_ebx_to_eax -POP_ebx # _common_recursion -ADD_ebx_to_eax -PUSH_eax #_common_recursion -LOAD_EFFECTIVE_ADDRESS %24 -LOAD_INTEGER -PUSH_eax #_common_recursion -LOAD_EFFECTIVE_ADDRESS %20 -LOAD_INTEGER -PUSH_eax #_common_recursion -LOAD_IMMEDIATE_eax %3 -POP_ebx # _common_recursion -ADD_ebx_to_eax -POP_ebx # _common_recursion -ADD_ebx_to_eax -LOAD_BYTE -PUSH_eax #_process_expression1 -CALL_IMMEDIATE %FUNCTION_upcase -POP_ebx # _process_expression_locals -POP_ebx # _common_recursion -STORE_CHAR -LOAD_EFFECTIVE_ADDRESS %12 -PUSH_eax #_common_recursion -LOAD_EFFECTIVE_ADDRESS %16 +LOAD_BASE_ADDRESS_eax %-12 LOAD_INTEGER PUSH_eax #_common_recursion LOAD_IMMEDIATE_eax %4 POP_ebx # _common_recursion -ADD_ebx_to_eax -POP_ebx # _common_recursion -STORE_INTEGER -JUMP %_END_IF_collect_weird_string_1 -:ELSE_collect_weird_string_1 -# IF_collect_weird_string_2 -LOAD_EFFECTIVE_ADDRESS %20 -LOAD_INTEGER -PUSH_eax #_common_recursion -LOAD_EFFECTIVE_ADDRESS %16 -LOAD_INTEGER -POP_ebx # _common_recursion -ADD_ebx_to_eax -LOAD_BYTE -PUSH_eax #_common_recursion -LOAD_IMMEDIATE_eax %92 -POP_ebx # _common_recursion -CMP -SETE -MOVEZBL -PUSH_eax #_common_recursion -LOAD_EFFECTIVE_ADDRESS %24 -LOAD_INTEGER -PUSH_eax #_common_recursion -LOAD_EFFECTIVE_ADDRESS %20 -LOAD_INTEGER -PUSH_eax #_common_recursion -LOAD_IMMEDIATE_eax %1 -POP_ebx # _common_recursion -ADD_ebx_to_eax -POP_ebx # _common_recursion -ADD_ebx_to_eax -LOAD_BYTE -PUSH_eax #_common_recursion -LOAD_IMMEDIATE_eax %110 -POP_ebx # _common_recursion -CMP -SETE -MOVEZBL -POP_ebx # _common_recursion -AND_eax_ebx -TEST -JUMP_EQ %ELSE_collect_weird_string_2 -LOAD_EFFECTIVE_ADDRESS %0 - -LOAD_INTEGER -PUSH_eax #_common_recursion -LOAD_EFFECTIVE_ADDRESS %12 -LOAD_INTEGER -PUSH_eax #_common_recursion -LOAD_IMMEDIATE_eax %1 -POP_ebx # _common_recursion -ADD_ebx_to_eax -POP_ebx # _common_recursion -ADD_ebx_to_eax -PUSH_eax #_common_recursion -LOAD_IMMEDIATE_eax %48 -POP_ebx # _common_recursion -STORE_CHAR -LOAD_EFFECTIVE_ADDRESS %0 - -LOAD_INTEGER -PUSH_eax #_common_recursion -LOAD_EFFECTIVE_ADDRESS %12 -LOAD_INTEGER -PUSH_eax #_common_recursion -LOAD_IMMEDIATE_eax %2 -POP_ebx # _common_recursion -ADD_ebx_to_eax -POP_ebx # _common_recursion -ADD_ebx_to_eax -PUSH_eax #_common_recursion -LOAD_IMMEDIATE_eax %65 -POP_ebx # _common_recursion -STORE_CHAR -LOAD_EFFECTIVE_ADDRESS %12 -PUSH_eax #_common_recursion -LOAD_EFFECTIVE_ADDRESS %16 -LOAD_INTEGER -PUSH_eax #_common_recursion -LOAD_IMMEDIATE_eax %2 -POP_ebx # _common_recursion -ADD_ebx_to_eax -POP_ebx # _common_recursion -STORE_INTEGER -JUMP %_END_IF_collect_weird_string_2 -:ELSE_collect_weird_string_2 -# IF_collect_weird_string_3 -LOAD_EFFECTIVE_ADDRESS %20 -LOAD_INTEGER -PUSH_eax #_common_recursion -LOAD_EFFECTIVE_ADDRESS %16 -LOAD_INTEGER -POP_ebx # _common_recursion -ADD_ebx_to_eax -LOAD_BYTE -PUSH_eax #_common_recursion -LOAD_IMMEDIATE_eax %92 -POP_ebx # _common_recursion -CMP -SETE -MOVEZBL -PUSH_eax #_common_recursion -LOAD_EFFECTIVE_ADDRESS %24 -LOAD_INTEGER -PUSH_eax #_common_recursion -LOAD_EFFECTIVE_ADDRESS %20 -LOAD_INTEGER -PUSH_eax #_common_recursion -LOAD_IMMEDIATE_eax %1 -POP_ebx # _common_recursion -ADD_ebx_to_eax -POP_ebx # _common_recursion -ADD_ebx_to_eax -LOAD_BYTE -PUSH_eax #_common_recursion -LOAD_IMMEDIATE_eax %116 -POP_ebx # _common_recursion -CMP -SETE -MOVEZBL -POP_ebx # _common_recursion -AND_eax_ebx -TEST -JUMP_EQ %ELSE_collect_weird_string_3 -LOAD_EFFECTIVE_ADDRESS %0 - -LOAD_INTEGER -PUSH_eax #_common_recursion -LOAD_EFFECTIVE_ADDRESS %12 -LOAD_INTEGER -PUSH_eax #_common_recursion -LOAD_IMMEDIATE_eax %1 -POP_ebx # _common_recursion -ADD_ebx_to_eax -POP_ebx # _common_recursion -ADD_ebx_to_eax -PUSH_eax #_common_recursion -LOAD_IMMEDIATE_eax %48 -POP_ebx # _common_recursion -STORE_CHAR -LOAD_EFFECTIVE_ADDRESS %0 - -LOAD_INTEGER -PUSH_eax #_common_recursion -LOAD_EFFECTIVE_ADDRESS %12 -LOAD_INTEGER -PUSH_eax #_common_recursion -LOAD_IMMEDIATE_eax %2 -POP_ebx # _common_recursion -ADD_ebx_to_eax -POP_ebx # _common_recursion -ADD_ebx_to_eax -PUSH_eax #_common_recursion -LOAD_IMMEDIATE_eax %57 -POP_ebx # _common_recursion -STORE_CHAR -LOAD_EFFECTIVE_ADDRESS %12 -PUSH_eax #_common_recursion -LOAD_EFFECTIVE_ADDRESS %16 -LOAD_INTEGER -PUSH_eax #_common_recursion -LOAD_IMMEDIATE_eax %2 -POP_ebx # _common_recursion -ADD_ebx_to_eax -POP_ebx # _common_recursion -STORE_INTEGER -JUMP %_END_IF_collect_weird_string_3 -:ELSE_collect_weird_string_3 -LOAD_EFFECTIVE_ADDRESS %0 - -LOAD_INTEGER -PUSH_eax #_common_recursion -LOAD_EFFECTIVE_ADDRESS %12 -LOAD_INTEGER -PUSH_eax #_common_recursion -LOAD_IMMEDIATE_eax %1 -POP_ebx # _common_recursion -ADD_ebx_to_eax -POP_ebx # _common_recursion -ADD_ebx_to_eax -PUSH_eax #_common_recursion -LOAD_EFFECTIVE_ADDRESS %8 -LOAD_INTEGER -PUSH_eax #_common_recursion -LOAD_EFFECTIVE_ADDRESS %28 -LOAD_INTEGER -PUSH_eax #_common_recursion -LOAD_EFFECTIVE_ADDRESS %24 -LOAD_INTEGER -POP_ebx # _common_recursion -ADD_ebx_to_eax -LOAD_BYTE -PUSH_eax #_common_recursion -LOAD_IMMEDIATE_eax %4 COPY_eax_to_ecx -POP_eax +COPY_ebx_to_eax SAR_eax_cl POP_ebx # _common_recursion ADD_ebx_to_eax LOAD_BYTE POP_ebx # _common_recursion STORE_CHAR -LOAD_EFFECTIVE_ADDRESS %0 - +LOAD_IMMEDIATE_eax &GLOBAL_hold_string LOAD_INTEGER PUSH_eax #_common_recursion -LOAD_EFFECTIVE_ADDRESS %12 +LOAD_IMMEDIATE_eax &GLOBAL_string_index LOAD_INTEGER PUSH_eax #_common_recursion LOAD_IMMEDIATE_eax %2 @@ -4467,18 +3624,12 @@ ADD_ebx_to_eax POP_ebx # _common_recursion ADD_ebx_to_eax PUSH_eax #_common_recursion -LOAD_EFFECTIVE_ADDRESS %8 +LOAD_BASE_ADDRESS_eax %-16 LOAD_INTEGER PUSH_eax #_common_recursion -LOAD_EFFECTIVE_ADDRESS %28 +LOAD_BASE_ADDRESS_eax %-12 LOAD_INTEGER PUSH_eax #_common_recursion -LOAD_EFFECTIVE_ADDRESS %24 -LOAD_INTEGER -POP_ebx # _common_recursion -ADD_ebx_to_eax -LOAD_BYTE -PUSH_eax #_common_recursion LOAD_IMMEDIATE_eax %15 POP_ebx # _common_recursion AND_eax_ebx @@ -4487,9 +3638,54 @@ ADD_ebx_to_eax LOAD_BYTE POP_ebx # _common_recursion STORE_CHAR -LOAD_EFFECTIVE_ADDRESS %12 +# IF_collect_weird_string_1 +LOAD_BASE_ADDRESS_eax %-4 +LOAD_INTEGER PUSH_eax #_common_recursion -LOAD_EFFECTIVE_ADDRESS %16 +LOAD_IMMEDIATE_eax %0 +POP_ebx # _common_recursion +ADD_ebx_to_eax +LOAD_BYTE +PUSH_eax #_common_recursion +LOAD_IMMEDIATE_eax %92 +POP_ebx # _common_recursion +CMP +SETE +MOVEZBL +TEST +JUMP_EQ %ELSE_collect_weird_string_1 +# IF_collect_weird_string_2 +LOAD_BASE_ADDRESS_eax %-4 +LOAD_INTEGER +PUSH_eax #_common_recursion +LOAD_IMMEDIATE_eax %1 +POP_ebx # _common_recursion +ADD_ebx_to_eax +LOAD_BYTE +PUSH_eax #_common_recursion +LOAD_IMMEDIATE_eax %120 +POP_ebx # _common_recursion +CMP +SETE +MOVEZBL +TEST +JUMP_EQ %ELSE_collect_weird_string_2 +LOAD_BASE_ADDRESS_eax %-4 +PUSH_eax #_common_recursion +LOAD_BASE_ADDRESS_eax %-4 +LOAD_INTEGER +PUSH_eax #_common_recursion +LOAD_IMMEDIATE_eax %2 +POP_ebx # _common_recursion +ADD_ebx_to_eax +POP_ebx # _common_recursion +STORE_INTEGER +JUMP %_END_IF_collect_weird_string_2 +:ELSE_collect_weird_string_2 +:_END_IF_collect_weird_string_2 +LOAD_BASE_ADDRESS_eax %-4 +PUSH_eax #_common_recursion +LOAD_BASE_ADDRESS_eax %-4 LOAD_INTEGER PUSH_eax #_common_recursion LOAD_IMMEDIATE_eax %1 @@ -4497,12 +3693,12 @@ POP_ebx # _common_recursion ADD_ebx_to_eax POP_ebx # _common_recursion STORE_INTEGER -:_END_IF_collect_weird_string_3 -:_END_IF_collect_weird_string_2 +JUMP %_END_IF_collect_weird_string_1 +:ELSE_collect_weird_string_1 :_END_IF_collect_weird_string_1 -LOAD_EFFECTIVE_ADDRESS %8 +LOAD_IMMEDIATE_eax &GLOBAL_string_index PUSH_eax #_common_recursion -LOAD_EFFECTIVE_ADDRESS %12 +LOAD_IMMEDIATE_eax &GLOBAL_string_index LOAD_INTEGER PUSH_eax #_common_recursion LOAD_IMMEDIATE_eax %3 @@ -4510,15 +3706,30 @@ POP_ebx # _common_recursion ADD_ebx_to_eax POP_ebx # _common_recursion STORE_INTEGER -JUMP %WHILE_collect_weird_string_0 - -:END_WHILE_collect_weird_string_0 - -LOAD_EFFECTIVE_ADDRESS %0 - +# IF_collect_weird_string_3 +LOAD_BASE_ADDRESS_eax %-4 LOAD_INTEGER PUSH_eax #_common_recursion -LOAD_EFFECTIVE_ADDRESS %12 +LOAD_IMMEDIATE_eax %1 +POP_ebx # _common_recursion +ADD_ebx_to_eax +LOAD_BYTE +PUSH_eax #_common_recursion +LOAD_IMMEDIATE_eax %0 +POP_ebx # _common_recursion +CMP +SETNE +MOVEZBL +TEST +JUMP_EQ %ELSE_collect_weird_string_3 +JUMP %collect_weird_string_reset +JUMP %_END_IF_collect_weird_string_3 +:ELSE_collect_weird_string_3 +:_END_IF_collect_weird_string_3 +LOAD_IMMEDIATE_eax &GLOBAL_hold_string +LOAD_INTEGER +PUSH_eax #_common_recursion +LOAD_IMMEDIATE_eax &GLOBAL_string_index LOAD_INTEGER POP_ebx # _common_recursion ADD_ebx_to_eax @@ -4526,11 +3737,10 @@ PUSH_eax #_common_recursion LOAD_IMMEDIATE_eax %32 POP_ebx # _common_recursion STORE_CHAR -LOAD_EFFECTIVE_ADDRESS %0 - +LOAD_IMMEDIATE_eax &GLOBAL_hold_string LOAD_INTEGER PUSH_eax #_common_recursion -LOAD_EFFECTIVE_ADDRESS %12 +LOAD_IMMEDIATE_eax &GLOBAL_string_index LOAD_INTEGER PUSH_eax #_common_recursion LOAD_IMMEDIATE_eax %1 @@ -4542,11 +3752,10 @@ PUSH_eax #_common_recursion LOAD_IMMEDIATE_eax %48 POP_ebx # _common_recursion STORE_CHAR -LOAD_EFFECTIVE_ADDRESS %0 - +LOAD_IMMEDIATE_eax &GLOBAL_hold_string LOAD_INTEGER PUSH_eax #_common_recursion -LOAD_EFFECTIVE_ADDRESS %12 +LOAD_IMMEDIATE_eax &GLOBAL_string_index LOAD_INTEGER PUSH_eax #_common_recursion LOAD_IMMEDIATE_eax %2 @@ -4558,11 +3767,10 @@ PUSH_eax #_common_recursion LOAD_IMMEDIATE_eax %48 POP_ebx # _common_recursion STORE_CHAR -LOAD_EFFECTIVE_ADDRESS %0 - +LOAD_IMMEDIATE_eax &GLOBAL_hold_string LOAD_INTEGER PUSH_eax #_common_recursion -LOAD_EFFECTIVE_ADDRESS %12 +LOAD_IMMEDIATE_eax &GLOBAL_string_index LOAD_INTEGER PUSH_eax #_common_recursion LOAD_IMMEDIATE_eax %3 @@ -4574,11 +3782,10 @@ PUSH_eax #_common_recursion LOAD_IMMEDIATE_eax %39 POP_ebx # _common_recursion STORE_CHAR -LOAD_EFFECTIVE_ADDRESS %0 - +LOAD_IMMEDIATE_eax &GLOBAL_hold_string LOAD_INTEGER PUSH_eax #_common_recursion -LOAD_EFFECTIVE_ADDRESS %12 +LOAD_IMMEDIATE_eax &GLOBAL_string_index LOAD_INTEGER PUSH_eax #_common_recursion LOAD_IMMEDIATE_eax %4 @@ -4590,10 +3797,50 @@ PUSH_eax #_common_recursion LOAD_IMMEDIATE_eax %10 POP_ebx # _common_recursion STORE_CHAR -LOAD_EFFECTIVE_ADDRESS %0 - +# Defining local hold +PUSH_edi # Prevent overwriting in recursion +PUSH_ebp # Protect the old base pointer +COPY_esp_to_edi # Copy new base pointer +LOAD_IMMEDIATE_eax &GLOBAL_string_index +LOAD_INTEGER +PUSH_eax #_common_recursion +LOAD_IMMEDIATE_eax %6 +POP_ebx # _common_recursion +ADD_ebx_to_eax +PUSH_eax #_process_expression1 +LOAD_IMMEDIATE_eax %1 +PUSH_eax #_process_expression2 +COPY_edi_to_ebp +CALL_IMMEDIATE %FUNCTION_calloc +POP_ebx # _process_expression_locals +POP_ebx # _process_expression_locals +POP_ebp # Restore old base pointer +POP_edi # Prevent overwrite +PUSH_eax #hold +PUSH_edi # Prevent overwriting in recursion +PUSH_ebp # Protect the old base pointer +COPY_esp_to_edi # Copy new base pointer +LOAD_BASE_ADDRESS_eax %-20 +LOAD_INTEGER +PUSH_eax #_process_expression1 +LOAD_IMMEDIATE_eax &GLOBAL_hold_string +LOAD_INTEGER +PUSH_eax #_process_expression2 +COPY_edi_to_ebp +CALL_IMMEDIATE %FUNCTION_copy_string +POP_ebx # _process_expression_locals +POP_ebx # _process_expression_locals +POP_ebp # Restore old base pointer +POP_edi # Prevent overwrite +PUSH_edi # Prevent overwriting in recursion +PUSH_ebp # Protect the old base pointer +COPY_esp_to_edi # Copy new base pointer +COPY_edi_to_ebp +CALL_IMMEDIATE %FUNCTION_reset_hold_string +POP_ebp # Restore old base pointer +POP_edi # Prevent overwrite +LOAD_BASE_ADDRESS_eax %-20 LOAD_INTEGER -POP_ebx # _return_result_locals POP_ebx # _return_result_locals POP_ebx # _return_result_locals POP_ebx # _return_result_locals @@ -4601,61 +3848,64 @@ RETURN # Defining function parse_string :FUNCTION_parse_string # IF_parse_string_0 - -LOAD_EFFECTIVE_ADDRESS %4 +PUSH_edi # Prevent overwriting in recursion +PUSH_ebp # Protect the old base pointer +COPY_esp_to_edi # Copy new base pointer +LOAD_BASE_ADDRESS_eax %-4 LOAD_INTEGER PUSH_eax #_process_expression1 +COPY_edi_to_ebp CALL_IMMEDIATE %FUNCTION_weird POP_ebx # _process_expression_locals -PUSH_eax #_common_recursion -LOAD_IMMEDIATE_eax %58 -PUSH_eax #_common_recursion -LOAD_EFFECTIVE_ADDRESS %12 -LOAD_INTEGER -PUSH_eax #_common_recursion -LOAD_IMMEDIATE_eax %1 -POP_ebx # _common_recursion -ADD_ebx_to_eax -LOAD_BYTE -POP_ebx # _common_recursion -CMP -SETE -MOVEZBL -POP_ebx # _common_recursion -OR_eax_ebx +POP_ebp # Restore old base pointer +POP_edi # Prevent overwrite TEST JUMP_EQ %ELSE_parse_string_0 - -LOAD_EFFECTIVE_ADDRESS %4 +PUSH_edi # Prevent overwriting in recursion +PUSH_ebp # Protect the old base pointer +COPY_esp_to_edi # Copy new base pointer +LOAD_BASE_ADDRESS_eax %-4 LOAD_INTEGER PUSH_eax #_process_expression1 +COPY_edi_to_ebp CALL_IMMEDIATE %FUNCTION_collect_weird_string POP_ebx # _process_expression_locals +POP_ebp # Restore old base pointer +POP_edi # Prevent overwrite RETURN JUMP %_END_IF_parse_string_0 - :ELSE_parse_string_0 - -LOAD_EFFECTIVE_ADDRESS %4 +PUSH_edi # Prevent overwriting in recursion +PUSH_ebp # Protect the old base pointer +COPY_esp_to_edi # Copy new base pointer +LOAD_BASE_ADDRESS_eax %-4 LOAD_INTEGER PUSH_eax #_process_expression1 +COPY_edi_to_ebp CALL_IMMEDIATE %FUNCTION_collect_regular_string POP_ebx # _process_expression_locals +POP_ebp # Restore old base pointer +POP_edi # Prevent overwrite RETURN :_END_IF_parse_string_0 - RETURN # Defining function initialize_types :FUNCTION_initialize_types LOAD_IMMEDIATE_eax &GLOBAL_global_types PUSH_eax #_common_recursion +PUSH_edi # Prevent overwriting in recursion +PUSH_ebp # Protect the old base pointer +COPY_esp_to_edi # Copy new base pointer LOAD_IMMEDIATE_eax %1 PUSH_eax #_process_expression1 LOAD_IMMEDIATE_eax %28 PUSH_eax #_process_expression2 +COPY_edi_to_ebp CALL_IMMEDIATE %FUNCTION_calloc POP_ebx # _process_expression_locals POP_ebx # _process_expression_locals +POP_ebp # Restore old base pointer +POP_edi # Prevent overwrite POP_ebx # _common_recursion STORE_INTEGER LOAD_IMMEDIATE_eax &GLOBAL_global_types @@ -4665,7 +3915,7 @@ LOAD_INTEGER LOAD_IMMEDIATE_ebx %24 ADD_ebx_to_eax PUSH_eax #_common_recursion -LOAD_IMMEDIATE_eax &STRING_4 +LOAD_IMMEDIATE_eax &STRING_initialize_types_0 POP_ebx # _common_recursion STORE_INTEGER LOAD_IMMEDIATE_eax &GLOBAL_global_types @@ -4701,27 +3951,31 @@ LOAD_INTEGER POP_ebx # _common_recursion STORE_INTEGER # Defining local a +PUSH_edi # Prevent overwriting in recursion +PUSH_ebp # Protect the old base pointer +COPY_esp_to_edi # Copy new base pointer LOAD_IMMEDIATE_eax %1 PUSH_eax #_process_expression1 LOAD_IMMEDIATE_eax %28 PUSH_eax #_process_expression2 +COPY_edi_to_ebp CALL_IMMEDIATE %FUNCTION_calloc POP_ebx # _process_expression_locals POP_ebx # _process_expression_locals +POP_ebp # Restore old base pointer +POP_edi # Prevent overwrite PUSH_eax #a -LOAD_EFFECTIVE_ADDRESS %0 - +LOAD_BASE_ADDRESS_eax %-8 LOAD_INTEGER # looking up offset # -> offset calculation LOAD_IMMEDIATE_ebx %24 ADD_ebx_to_eax PUSH_eax #_common_recursion -LOAD_IMMEDIATE_eax &STRING_5 +LOAD_IMMEDIATE_eax &STRING_initialize_types_1 POP_ebx # _common_recursion STORE_INTEGER -LOAD_EFFECTIVE_ADDRESS %0 - +LOAD_BASE_ADDRESS_eax %-8 LOAD_INTEGER # looking up offset # -> offset calculation @@ -4731,52 +3985,54 @@ PUSH_eax #_common_recursion LOAD_IMMEDIATE_eax %4 POP_ebx # _common_recursion STORE_INTEGER -LOAD_EFFECTIVE_ADDRESS %0 - +LOAD_BASE_ADDRESS_eax %-8 LOAD_INTEGER # looking up offset # -> offset calculation LOAD_IMMEDIATE_ebx %12 ADD_ebx_to_eax PUSH_eax #_common_recursion -LOAD_EFFECTIVE_ADDRESS %4 +LOAD_BASE_ADDRESS_eax %-8 LOAD_INTEGER POP_ebx # _common_recursion STORE_INTEGER -LOAD_EFFECTIVE_ADDRESS %0 - +LOAD_BASE_ADDRESS_eax %-8 LOAD_INTEGER # looking up offset # -> offset calculation LOAD_IMMEDIATE_ebx %20 ADD_ebx_to_eax PUSH_eax #_common_recursion -LOAD_EFFECTIVE_ADDRESS %4 +LOAD_BASE_ADDRESS_eax %-8 LOAD_INTEGER POP_ebx # _common_recursion STORE_INTEGER # Defining local b +PUSH_edi # Prevent overwriting in recursion +PUSH_ebp # Protect the old base pointer +COPY_esp_to_edi # Copy new base pointer LOAD_IMMEDIATE_eax %1 PUSH_eax #_process_expression1 LOAD_IMMEDIATE_eax %28 PUSH_eax #_process_expression2 +COPY_edi_to_ebp CALL_IMMEDIATE %FUNCTION_calloc POP_ebx # _process_expression_locals POP_ebx # _process_expression_locals +POP_ebp # Restore old base pointer +POP_edi # Prevent overwrite PUSH_eax #b -LOAD_EFFECTIVE_ADDRESS %0 - +LOAD_BASE_ADDRESS_eax %-12 LOAD_INTEGER # looking up offset # -> offset calculation LOAD_IMMEDIATE_ebx %24 ADD_ebx_to_eax PUSH_eax #_common_recursion -LOAD_IMMEDIATE_eax &STRING_6 +LOAD_IMMEDIATE_eax &STRING_initialize_types_2 POP_ebx # _common_recursion STORE_INTEGER -LOAD_EFFECTIVE_ADDRESS %0 - +LOAD_BASE_ADDRESS_eax %-12 LOAD_INTEGER # looking up offset # -> offset calculation @@ -4786,40 +4042,43 @@ PUSH_eax #_common_recursion LOAD_IMMEDIATE_eax %4 POP_ebx # _common_recursion STORE_INTEGER -LOAD_EFFECTIVE_ADDRESS %0 - +LOAD_BASE_ADDRESS_eax %-12 LOAD_INTEGER # looking up offset # -> offset calculation LOAD_IMMEDIATE_ebx %20 ADD_ebx_to_eax PUSH_eax #_common_recursion -LOAD_EFFECTIVE_ADDRESS %4 +LOAD_BASE_ADDRESS_eax %-12 LOAD_INTEGER POP_ebx # _common_recursion STORE_INTEGER # Defining local c +PUSH_edi # Prevent overwriting in recursion +PUSH_ebp # Protect the old base pointer +COPY_esp_to_edi # Copy new base pointer LOAD_IMMEDIATE_eax %1 PUSH_eax #_process_expression1 LOAD_IMMEDIATE_eax %28 PUSH_eax #_process_expression2 +COPY_edi_to_ebp CALL_IMMEDIATE %FUNCTION_calloc POP_ebx # _process_expression_locals POP_ebx # _process_expression_locals +POP_ebp # Restore old base pointer +POP_edi # Prevent overwrite PUSH_eax #c -LOAD_EFFECTIVE_ADDRESS %0 - +LOAD_BASE_ADDRESS_eax %-16 LOAD_INTEGER # looking up offset # -> offset calculation LOAD_IMMEDIATE_ebx %24 ADD_ebx_to_eax PUSH_eax #_common_recursion -LOAD_IMMEDIATE_eax &STRING_7 +LOAD_IMMEDIATE_eax &STRING_initialize_types_3 POP_ebx # _common_recursion STORE_INTEGER -LOAD_EFFECTIVE_ADDRESS %0 - +LOAD_BASE_ADDRESS_eax %-16 LOAD_INTEGER # looking up offset # -> offset calculation @@ -4829,63 +4088,43 @@ PUSH_eax #_common_recursion LOAD_IMMEDIATE_eax %1 POP_ebx # _common_recursion STORE_INTEGER -LOAD_EFFECTIVE_ADDRESS %0 - +LOAD_BASE_ADDRESS_eax %-16 LOAD_INTEGER # looking up offset # -> offset calculation LOAD_IMMEDIATE_ebx %20 ADD_ebx_to_eax PUSH_eax #_common_recursion -LOAD_EFFECTIVE_ADDRESS %4 -LOAD_INTEGER -POP_ebx # _common_recursion -STORE_INTEGER -LOAD_EFFECTIVE_ADDRESS %0 - -LOAD_INTEGER -# looking up offset -# -> offset calculation -LOAD_IMMEDIATE_ebx %12 -ADD_ebx_to_eax -PUSH_eax #_common_recursion -LOAD_EFFECTIVE_ADDRESS %8 -LOAD_INTEGER -POP_ebx # _common_recursion -STORE_INTEGER -LOAD_EFFECTIVE_ADDRESS %4 -LOAD_INTEGER -# looking up offset -# -> offset calculation -LOAD_IMMEDIATE_ebx %12 -ADD_ebx_to_eax -PUSH_eax #_common_recursion -LOAD_EFFECTIVE_ADDRESS %4 +LOAD_BASE_ADDRESS_eax %-16 LOAD_INTEGER POP_ebx # _common_recursion STORE_INTEGER # Defining local d +PUSH_edi # Prevent overwriting in recursion +PUSH_ebp # Protect the old base pointer +COPY_esp_to_edi # Copy new base pointer LOAD_IMMEDIATE_eax %1 PUSH_eax #_process_expression1 LOAD_IMMEDIATE_eax %28 PUSH_eax #_process_expression2 +COPY_edi_to_ebp CALL_IMMEDIATE %FUNCTION_calloc POP_ebx # _process_expression_locals POP_ebx # _process_expression_locals +POP_ebp # Restore old base pointer +POP_edi # Prevent overwrite PUSH_eax #d -LOAD_EFFECTIVE_ADDRESS %0 - +LOAD_BASE_ADDRESS_eax %-20 LOAD_INTEGER # looking up offset # -> offset calculation LOAD_IMMEDIATE_ebx %24 ADD_ebx_to_eax PUSH_eax #_common_recursion -LOAD_IMMEDIATE_eax &STRING_8 +LOAD_IMMEDIATE_eax &STRING_initialize_types_4 POP_ebx # _common_recursion STORE_INTEGER -LOAD_EFFECTIVE_ADDRESS %0 - +LOAD_BASE_ADDRESS_eax %-20 LOAD_INTEGER # looking up offset # -> offset calculation @@ -4895,52 +4134,76 @@ PUSH_eax #_common_recursion LOAD_IMMEDIATE_eax %4 POP_ebx # _common_recursion STORE_INTEGER -LOAD_EFFECTIVE_ADDRESS %0 - +LOAD_BASE_ADDRESS_eax %-20 LOAD_INTEGER # looking up offset # -> offset calculation LOAD_IMMEDIATE_ebx %20 ADD_ebx_to_eax PUSH_eax #_common_recursion -LOAD_EFFECTIVE_ADDRESS %4 +LOAD_BASE_ADDRESS_eax %-16 LOAD_INTEGER POP_ebx # _common_recursion STORE_INTEGER -LOAD_EFFECTIVE_ADDRESS %0 - +LOAD_BASE_ADDRESS_eax %-20 LOAD_INTEGER # looking up offset # -> offset calculation LOAD_IMMEDIATE_ebx %12 ADD_ebx_to_eax PUSH_eax #_common_recursion -LOAD_EFFECTIVE_ADDRESS %4 +LOAD_BASE_ADDRESS_eax %-20 +LOAD_INTEGER +POP_ebx # _common_recursion +STORE_INTEGER +LOAD_BASE_ADDRESS_eax %-16 +LOAD_INTEGER +# looking up offset +# -> offset calculation +LOAD_IMMEDIATE_ebx %12 +ADD_ebx_to_eax +PUSH_eax #_common_recursion +LOAD_BASE_ADDRESS_eax %-12 +LOAD_INTEGER +POP_ebx # _common_recursion +STORE_INTEGER +LOAD_BASE_ADDRESS_eax %-12 +LOAD_INTEGER +# looking up offset +# -> offset calculation +LOAD_IMMEDIATE_ebx %12 +ADD_ebx_to_eax +PUSH_eax #_common_recursion +LOAD_BASE_ADDRESS_eax %-20 LOAD_INTEGER POP_ebx # _common_recursion STORE_INTEGER # Defining local e +PUSH_edi # Prevent overwriting in recursion +PUSH_ebp # Protect the old base pointer +COPY_esp_to_edi # Copy new base pointer LOAD_IMMEDIATE_eax %1 PUSH_eax #_process_expression1 LOAD_IMMEDIATE_eax %28 PUSH_eax #_process_expression2 +COPY_edi_to_ebp CALL_IMMEDIATE %FUNCTION_calloc POP_ebx # _process_expression_locals POP_ebx # _process_expression_locals +POP_ebp # Restore old base pointer +POP_edi # Prevent overwrite PUSH_eax #e -LOAD_EFFECTIVE_ADDRESS %0 - +LOAD_BASE_ADDRESS_eax %-24 LOAD_INTEGER # looking up offset # -> offset calculation LOAD_IMMEDIATE_ebx %24 ADD_ebx_to_eax PUSH_eax #_common_recursion -LOAD_IMMEDIATE_eax &STRING_9 +LOAD_IMMEDIATE_eax &STRING_initialize_types_5 POP_ebx # _common_recursion STORE_INTEGER -LOAD_EFFECTIVE_ADDRESS %0 - +LOAD_BASE_ADDRESS_eax %-24 LOAD_INTEGER # looking up offset # -> offset calculation @@ -4950,52 +4213,54 @@ PUSH_eax #_common_recursion LOAD_IMMEDIATE_eax %4 POP_ebx # _common_recursion STORE_INTEGER -LOAD_EFFECTIVE_ADDRESS %0 - +LOAD_BASE_ADDRESS_eax %-24 LOAD_INTEGER # looking up offset # -> offset calculation LOAD_IMMEDIATE_ebx %20 ADD_ebx_to_eax PUSH_eax #_common_recursion -LOAD_EFFECTIVE_ADDRESS %4 +LOAD_BASE_ADDRESS_eax %-24 LOAD_INTEGER POP_ebx # _common_recursion STORE_INTEGER -LOAD_EFFECTIVE_ADDRESS %0 - +LOAD_BASE_ADDRESS_eax %-24 LOAD_INTEGER # looking up offset # -> offset calculation LOAD_IMMEDIATE_ebx %12 ADD_ebx_to_eax PUSH_eax #_common_recursion -LOAD_EFFECTIVE_ADDRESS %4 +LOAD_BASE_ADDRESS_eax %-24 LOAD_INTEGER POP_ebx # _common_recursion STORE_INTEGER # Defining local f +PUSH_edi # Prevent overwriting in recursion +PUSH_ebp # Protect the old base pointer +COPY_esp_to_edi # Copy new base pointer LOAD_IMMEDIATE_eax %1 PUSH_eax #_process_expression1 LOAD_IMMEDIATE_eax %28 PUSH_eax #_process_expression2 +COPY_edi_to_ebp CALL_IMMEDIATE %FUNCTION_calloc POP_ebx # _process_expression_locals POP_ebx # _process_expression_locals +POP_ebp # Restore old base pointer +POP_edi # Prevent overwrite PUSH_eax #f -LOAD_EFFECTIVE_ADDRESS %0 - +LOAD_BASE_ADDRESS_eax %-28 LOAD_INTEGER # looking up offset # -> offset calculation LOAD_IMMEDIATE_ebx %24 ADD_ebx_to_eax PUSH_eax #_common_recursion -LOAD_IMMEDIATE_eax &STRING_10 +LOAD_IMMEDIATE_eax &STRING_initialize_types_6 POP_ebx # _common_recursion STORE_INTEGER -LOAD_EFFECTIVE_ADDRESS %0 - +LOAD_BASE_ADDRESS_eax %-28 LOAD_INTEGER # looking up offset # -> offset calculation @@ -5005,59 +4270,122 @@ PUSH_eax #_common_recursion LOAD_IMMEDIATE_eax %4 POP_ebx # _common_recursion STORE_INTEGER -LOAD_EFFECTIVE_ADDRESS %0 - +LOAD_BASE_ADDRESS_eax %-28 LOAD_INTEGER # looking up offset # -> offset calculation LOAD_IMMEDIATE_ebx %20 ADD_ebx_to_eax PUSH_eax #_common_recursion -LOAD_EFFECTIVE_ADDRESS %4 +LOAD_BASE_ADDRESS_eax %-28 LOAD_INTEGER POP_ebx # _common_recursion STORE_INTEGER -LOAD_EFFECTIVE_ADDRESS %0 - +LOAD_BASE_ADDRESS_eax %-28 LOAD_INTEGER # looking up offset # -> offset calculation LOAD_IMMEDIATE_ebx %12 ADD_ebx_to_eax PUSH_eax #_common_recursion -LOAD_EFFECTIVE_ADDRESS %4 +LOAD_BASE_ADDRESS_eax %-28 LOAD_INTEGER POP_ebx # _common_recursion STORE_INTEGER -LOAD_EFFECTIVE_ADDRESS %4 +# Defining local g +PUSH_edi # Prevent overwriting in recursion +PUSH_ebp # Protect the old base pointer +COPY_esp_to_edi # Copy new base pointer +LOAD_IMMEDIATE_eax %1 +PUSH_eax #_process_expression1 +LOAD_IMMEDIATE_eax %28 +PUSH_eax #_process_expression2 +COPY_edi_to_ebp +CALL_IMMEDIATE %FUNCTION_calloc +POP_ebx # _process_expression_locals +POP_ebx # _process_expression_locals +POP_ebp # Restore old base pointer +POP_edi # Prevent overwrite +PUSH_eax #g +LOAD_BASE_ADDRESS_eax %-32 LOAD_INTEGER # looking up offset +# -> offset calculation +LOAD_IMMEDIATE_ebx %24 +ADD_ebx_to_eax PUSH_eax #_common_recursion -LOAD_EFFECTIVE_ADDRESS %4 +LOAD_IMMEDIATE_eax &STRING_initialize_types_7 +POP_ebx # _common_recursion +STORE_INTEGER +LOAD_BASE_ADDRESS_eax %-32 +LOAD_INTEGER +# looking up offset +# -> offset calculation +LOAD_IMMEDIATE_ebx %4 +ADD_ebx_to_eax +PUSH_eax #_common_recursion +LOAD_IMMEDIATE_eax %4 +POP_ebx # _common_recursion +STORE_INTEGER +LOAD_BASE_ADDRESS_eax %-32 +LOAD_INTEGER +# looking up offset +# -> offset calculation +LOAD_IMMEDIATE_ebx %20 +ADD_ebx_to_eax +PUSH_eax #_common_recursion +LOAD_BASE_ADDRESS_eax %-32 LOAD_INTEGER POP_ebx # _common_recursion STORE_INTEGER -LOAD_EFFECTIVE_ADDRESS %8 +LOAD_BASE_ADDRESS_eax %-32 LOAD_INTEGER # looking up offset +# -> offset calculation +LOAD_IMMEDIATE_ebx %12 +ADD_ebx_to_eax PUSH_eax #_common_recursion -LOAD_EFFECTIVE_ADDRESS %8 +LOAD_BASE_ADDRESS_eax %-32 LOAD_INTEGER POP_ebx # _common_recursion STORE_INTEGER -LOAD_EFFECTIVE_ADDRESS %12 +LOAD_BASE_ADDRESS_eax %-28 LOAD_INTEGER # looking up offset PUSH_eax #_common_recursion -LOAD_EFFECTIVE_ADDRESS %12 +LOAD_BASE_ADDRESS_eax %-32 LOAD_INTEGER POP_ebx # _common_recursion STORE_INTEGER -LOAD_EFFECTIVE_ADDRESS %20 +LOAD_BASE_ADDRESS_eax %-24 LOAD_INTEGER # looking up offset PUSH_eax #_common_recursion -LOAD_EFFECTIVE_ADDRESS %16 +LOAD_BASE_ADDRESS_eax %-28 +LOAD_INTEGER +POP_ebx # _common_recursion +STORE_INTEGER +LOAD_BASE_ADDRESS_eax %-20 +LOAD_INTEGER +# looking up offset +PUSH_eax #_common_recursion +LOAD_BASE_ADDRESS_eax %-24 +LOAD_INTEGER +POP_ebx # _common_recursion +STORE_INTEGER +LOAD_BASE_ADDRESS_eax %-16 +LOAD_INTEGER +# looking up offset +PUSH_eax #_common_recursion +LOAD_BASE_ADDRESS_eax %-24 +LOAD_INTEGER +POP_ebx # _common_recursion +STORE_INTEGER +LOAD_BASE_ADDRESS_eax %-8 +LOAD_INTEGER +# looking up offset +PUSH_eax #_common_recursion +LOAD_BASE_ADDRESS_eax %-16 LOAD_INTEGER POP_ebx # _common_recursion STORE_INTEGER @@ -5065,10 +4393,17 @@ LOAD_IMMEDIATE_eax &GLOBAL_global_types LOAD_INTEGER # looking up offset PUSH_eax #_common_recursion -LOAD_EFFECTIVE_ADDRESS %24 +LOAD_BASE_ADDRESS_eax %-8 LOAD_INTEGER POP_ebx # _common_recursion STORE_INTEGER +LOAD_IMMEDIATE_eax &GLOBAL_prim_types +PUSH_eax #_common_recursion +LOAD_IMMEDIATE_eax &GLOBAL_global_types +LOAD_INTEGER +POP_ebx # _common_recursion +STORE_INTEGER +POP_ebx # _recursive_statement_locals POP_ebx # _recursive_statement_locals POP_ebx # _recursive_statement_locals POP_ebx # _recursive_statement_locals @@ -5081,19 +4416,16 @@ RETURN # Defining local i PUSH_eax #i # FOR_initialization_lookup_type_0 - -LOAD_EFFECTIVE_ADDRESS %0 - +LOAD_BASE_ADDRESS_eax %-16 PUSH_eax #_common_recursion -LOAD_IMMEDIATE_eax &GLOBAL_global_types +LOAD_BASE_ADDRESS_eax %-8 LOAD_INTEGER POP_ebx # _common_recursion STORE_INTEGER :FOR_lookup_type_0 - LOAD_IMMEDIATE_eax %0 PUSH_eax #_common_recursion -LOAD_EFFECTIVE_ADDRESS %4 +LOAD_BASE_ADDRESS_eax %-16 LOAD_INTEGER POP_ebx # _common_recursion CMP @@ -5101,27 +4433,23 @@ SETNE MOVEZBL TEST JUMP_EQ %FOR_END_lookup_type_0 - JUMP %FOR_THEN_lookup_type_0 - :FOR_ITER_lookup_type_0 - -LOAD_EFFECTIVE_ADDRESS %0 - +LOAD_BASE_ADDRESS_eax %-16 PUSH_eax #_common_recursion -LOAD_EFFECTIVE_ADDRESS %4 +LOAD_BASE_ADDRESS_eax %-16 LOAD_INTEGER # looking up offset LOAD_INTEGER POP_ebx # _common_recursion STORE_INTEGER JUMP %FOR_lookup_type_0 - :FOR_THEN_lookup_type_0 - # IF_lookup_type_1 -LOAD_EFFECTIVE_ADDRESS %0 - +PUSH_edi # Prevent overwriting in recursion +PUSH_ebp # Protect the old base pointer +COPY_esp_to_edi # Copy new base pointer +LOAD_BASE_ADDRESS_eax %-16 LOAD_INTEGER # looking up offset # -> offset calculation @@ -5129,16 +4457,18 @@ LOAD_IMMEDIATE_ebx %24 ADD_ebx_to_eax LOAD_INTEGER PUSH_eax #_process_expression1 -LOAD_EFFECTIVE_ADDRESS %12 +LOAD_BASE_ADDRESS_eax %-4 LOAD_INTEGER PUSH_eax #_process_expression2 +COPY_edi_to_ebp CALL_IMMEDIATE %FUNCTION_match POP_ebx # _process_expression_locals POP_ebx # _process_expression_locals +POP_ebp # Restore old base pointer +POP_edi # Prevent overwrite TEST JUMP_EQ %ELSE_lookup_type_1 -LOAD_EFFECTIVE_ADDRESS %0 - +LOAD_BASE_ADDRESS_eax %-16 LOAD_INTEGER POP_ebx # _return_result_locals RETURN @@ -5146,28 +4476,220 @@ JUMP %_END_IF_lookup_type_1 :ELSE_lookup_type_1 :_END_IF_lookup_type_1 JUMP %FOR_ITER_lookup_type_0 - :FOR_END_lookup_type_0 - LOAD_IMMEDIATE_eax %0 POP_ebx # _return_result_locals RETURN +# Defining function lookup_member +:FUNCTION_lookup_member +# Defining local i +PUSH_eax #i +# FOR_initialization_lookup_member_0 +LOAD_BASE_ADDRESS_eax %-16 +PUSH_eax #_common_recursion +LOAD_BASE_ADDRESS_eax %-4 +LOAD_INTEGER +# looking up offset +# -> offset calculation +LOAD_IMMEDIATE_ebx %16 +ADD_ebx_to_eax +LOAD_INTEGER +POP_ebx # _common_recursion +STORE_INTEGER +:FOR_lookup_member_0 +LOAD_IMMEDIATE_eax %0 +PUSH_eax #_common_recursion +LOAD_BASE_ADDRESS_eax %-16 +LOAD_INTEGER +POP_ebx # _common_recursion +CMP +SETNE +MOVEZBL +TEST +JUMP_EQ %FOR_END_lookup_member_0 +JUMP %FOR_THEN_lookup_member_0 +:FOR_ITER_lookup_member_0 +LOAD_BASE_ADDRESS_eax %-16 +PUSH_eax #_common_recursion +LOAD_BASE_ADDRESS_eax %-16 +LOAD_INTEGER +# looking up offset +# -> offset calculation +LOAD_IMMEDIATE_ebx %16 +ADD_ebx_to_eax +LOAD_INTEGER +POP_ebx # _common_recursion +STORE_INTEGER +JUMP %FOR_lookup_member_0 +:FOR_THEN_lookup_member_0 +# IF_lookup_member_1 +PUSH_edi # Prevent overwriting in recursion +PUSH_ebp # Protect the old base pointer +COPY_esp_to_edi # Copy new base pointer +LOAD_BASE_ADDRESS_eax %-16 +LOAD_INTEGER +# looking up offset +# -> offset calculation +LOAD_IMMEDIATE_ebx %24 +ADD_ebx_to_eax +LOAD_INTEGER +PUSH_eax #_process_expression1 +LOAD_BASE_ADDRESS_eax %-8 +LOAD_INTEGER +PUSH_eax #_process_expression2 +COPY_edi_to_ebp +CALL_IMMEDIATE %FUNCTION_match +POP_ebx # _process_expression_locals +POP_ebx # _process_expression_locals +POP_ebp # Restore old base pointer +POP_edi # Prevent overwrite +TEST +JUMP_EQ %ELSE_lookup_member_1 +LOAD_BASE_ADDRESS_eax %-16 +LOAD_INTEGER +POP_ebx # _return_result_locals +RETURN +JUMP %_END_IF_lookup_member_1 +:ELSE_lookup_member_1 +:_END_IF_lookup_member_1 +JUMP %FOR_ITER_lookup_member_0 +:FOR_END_lookup_member_0 +PUSH_edi # Prevent overwriting in recursion +PUSH_ebp # Protect the old base pointer +COPY_esp_to_edi # Copy new base pointer +LOAD_IMMEDIATE_eax &STRING_lookup_member_2 +PUSH_eax #_process_expression1 +LOAD_IMMEDIATE_eax %2 +PUSH_eax #_process_expression2 +COPY_edi_to_ebp +CALL_IMMEDIATE %FUNCTION_file_print +POP_ebx # _process_expression_locals +POP_ebx # _process_expression_locals +POP_ebp # Restore old base pointer +POP_edi # Prevent overwrite +PUSH_edi # Prevent overwriting in recursion +PUSH_ebp # Protect the old base pointer +COPY_esp_to_edi # Copy new base pointer +LOAD_BASE_ADDRESS_eax %-4 +LOAD_INTEGER +# looking up offset +# -> offset calculation +LOAD_IMMEDIATE_ebx %24 +ADD_ebx_to_eax +LOAD_INTEGER +PUSH_eax #_process_expression1 +LOAD_IMMEDIATE_eax %2 +PUSH_eax #_process_expression2 +COPY_edi_to_ebp +CALL_IMMEDIATE %FUNCTION_file_print +POP_ebx # _process_expression_locals +POP_ebx # _process_expression_locals +POP_ebp # Restore old base pointer +POP_edi # Prevent overwrite +PUSH_edi # Prevent overwriting in recursion +PUSH_ebp # Protect the old base pointer +COPY_esp_to_edi # Copy new base pointer +LOAD_IMMEDIATE_eax &STRING_lookup_member_3 +PUSH_eax #_process_expression1 +LOAD_IMMEDIATE_eax %2 +PUSH_eax #_process_expression2 +COPY_edi_to_ebp +CALL_IMMEDIATE %FUNCTION_file_print +POP_ebx # _process_expression_locals +POP_ebx # _process_expression_locals +POP_ebp # Restore old base pointer +POP_edi # Prevent overwrite +PUSH_edi # Prevent overwriting in recursion +PUSH_ebp # Protect the old base pointer +COPY_esp_to_edi # Copy new base pointer +LOAD_IMMEDIATE_eax &GLOBAL_global_token +LOAD_INTEGER +# looking up offset +# -> offset calculation +LOAD_IMMEDIATE_ebx %8 +ADD_ebx_to_eax +LOAD_INTEGER +PUSH_eax #_process_expression1 +LOAD_IMMEDIATE_eax %2 +PUSH_eax #_process_expression2 +COPY_edi_to_ebp +CALL_IMMEDIATE %FUNCTION_file_print +POP_ebx # _process_expression_locals +POP_ebx # _process_expression_locals +POP_ebp # Restore old base pointer +POP_edi # Prevent overwrite +PUSH_edi # Prevent overwriting in recursion +PUSH_ebp # Protect the old base pointer +COPY_esp_to_edi # Copy new base pointer +LOAD_IMMEDIATE_eax &STRING_lookup_member_4 +PUSH_eax #_process_expression1 +LOAD_IMMEDIATE_eax %2 +PUSH_eax #_process_expression2 +COPY_edi_to_ebp +CALL_IMMEDIATE %FUNCTION_file_print +POP_ebx # _process_expression_locals +POP_ebx # _process_expression_locals +POP_ebp # Restore old base pointer +POP_edi # Prevent overwrite +PUSH_edi # Prevent overwriting in recursion +PUSH_ebp # Protect the old base pointer +COPY_esp_to_edi # Copy new base pointer +COPY_edi_to_ebp +CALL_IMMEDIATE %FUNCTION_line_error +POP_ebp # Restore old base pointer +POP_edi # Prevent overwrite +PUSH_edi # Prevent overwriting in recursion +PUSH_ebp # Protect the old base pointer +COPY_esp_to_edi # Copy new base pointer +LOAD_IMMEDIATE_eax &STRING_lookup_member_5 +PUSH_eax #_process_expression1 +LOAD_IMMEDIATE_eax %2 +PUSH_eax #_process_expression2 +COPY_edi_to_ebp +CALL_IMMEDIATE %FUNCTION_file_print +POP_ebx # _process_expression_locals +POP_ebx # _process_expression_locals +POP_ebp # Restore old base pointer +POP_edi # Prevent overwrite +PUSH_edi # Prevent overwriting in recursion +PUSH_ebp # Protect the old base pointer +COPY_esp_to_edi # Copy new base pointer +LOAD_IMMEDIATE_eax %1 +PUSH_eax #_process_expression1 +COPY_edi_to_ebp +CALL_IMMEDIATE %FUNCTION_exit +POP_ebx # _process_expression_locals +POP_ebp # Restore old base pointer +POP_edi # Prevent overwrite +POP_ebx # _recursive_statement_locals +RETURN # Defining function build_member :FUNCTION_build_member # Defining local member_type +PUSH_edi # Prevent overwriting in recursion +PUSH_ebp # Protect the old base pointer +COPY_esp_to_edi # Copy new base pointer +COPY_edi_to_ebp CALL_IMMEDIATE %FUNCTION_type_name +POP_ebp # Restore old base pointer +POP_edi # Prevent overwrite PUSH_eax #member_type # Defining local i +PUSH_edi # Prevent overwriting in recursion +PUSH_ebp # Protect the old base pointer +COPY_esp_to_edi # Copy new base pointer LOAD_IMMEDIATE_eax %1 PUSH_eax #_process_expression1 LOAD_IMMEDIATE_eax %28 PUSH_eax #_process_expression2 +COPY_edi_to_ebp CALL_IMMEDIATE %FUNCTION_calloc POP_ebx # _process_expression_locals POP_ebx # _process_expression_locals +POP_ebp # Restore old base pointer +POP_edi # Prevent overwrite PUSH_eax #i -LOAD_EFFECTIVE_ADDRESS %0 - +LOAD_BASE_ADDRESS_eax %-20 LOAD_INTEGER # looking up offset # -> offset calculation @@ -5183,27 +4705,126 @@ ADD_ebx_to_eax LOAD_INTEGER POP_ebx # _common_recursion STORE_INTEGER -LOAD_EFFECTIVE_ADDRESS %0 - +LOAD_IMMEDIATE_eax &GLOBAL_global_token +PUSH_eax #_common_recursion +LOAD_IMMEDIATE_eax &GLOBAL_global_token +LOAD_INTEGER +# looking up offset +LOAD_INTEGER +POP_ebx # _common_recursion +STORE_INTEGER +LOAD_BASE_ADDRESS_eax %-20 LOAD_INTEGER # looking up offset # -> offset calculation LOAD_IMMEDIATE_ebx %16 ADD_ebx_to_eax PUSH_eax #_common_recursion -LOAD_EFFECTIVE_ADDRESS %20 +LOAD_BASE_ADDRESS_eax %-4 LOAD_INTEGER POP_ebx # _common_recursion STORE_INTEGER -LOAD_EFFECTIVE_ADDRESS %0 - +# IF_build_member_0 +PUSH_edi # Prevent overwriting in recursion +PUSH_ebp # Protect the old base pointer +COPY_esp_to_edi # Copy new base pointer +LOAD_IMMEDIATE_eax &STRING_build_member_1 +PUSH_eax #_process_expression1 +LOAD_IMMEDIATE_eax &GLOBAL_global_token +LOAD_INTEGER +# looking up offset +# -> offset calculation +LOAD_IMMEDIATE_ebx %8 +ADD_ebx_to_eax +LOAD_INTEGER +PUSH_eax #_process_expression2 +COPY_edi_to_ebp +CALL_IMMEDIATE %FUNCTION_match +POP_ebx # _process_expression_locals +POP_ebx # _process_expression_locals +POP_ebp # Restore old base pointer +POP_edi # Prevent overwrite +TEST +JUMP_EQ %ELSE_build_member_0 +LOAD_IMMEDIATE_eax &GLOBAL_global_token +PUSH_eax #_common_recursion +LOAD_IMMEDIATE_eax &GLOBAL_global_token +LOAD_INTEGER +# looking up offset +LOAD_INTEGER +POP_ebx # _common_recursion +STORE_INTEGER +LOAD_BASE_ADDRESS_eax %-20 LOAD_INTEGER # looking up offset # -> offset calculation LOAD_IMMEDIATE_ebx %4 ADD_ebx_to_eax PUSH_eax #_common_recursion -LOAD_EFFECTIVE_ADDRESS %8 +LOAD_BASE_ADDRESS_eax %-16 +LOAD_INTEGER +# looking up offset +# -> offset calculation +LOAD_IMMEDIATE_ebx %20 +ADD_ebx_to_eax +LOAD_INTEGER +# looking up offset +# -> offset calculation +LOAD_IMMEDIATE_ebx %4 +ADD_ebx_to_eax +LOAD_INTEGER +PUSH_eax #_common_recursion +PUSH_edi # Prevent overwriting in recursion +PUSH_ebp # Protect the old base pointer +COPY_esp_to_edi # Copy new base pointer +LOAD_IMMEDIATE_eax &GLOBAL_global_token +LOAD_INTEGER +# looking up offset +# -> offset calculation +LOAD_IMMEDIATE_ebx %8 +ADD_ebx_to_eax +LOAD_INTEGER +PUSH_eax #_process_expression1 +COPY_edi_to_ebp +CALL_IMMEDIATE %FUNCTION_numerate_string +POP_ebx # _process_expression_locals +POP_ebp # Restore old base pointer +POP_edi # Prevent overwrite +POP_ebx # _common_recursion +MULTIPLY_eax_by_ebx_into_eax +POP_ebx # _common_recursion +STORE_INTEGER +LOAD_IMMEDIATE_eax &GLOBAL_global_token +PUSH_eax #_common_recursion +LOAD_IMMEDIATE_eax &GLOBAL_global_token +LOAD_INTEGER +# looking up offset +LOAD_INTEGER +POP_ebx # _common_recursion +STORE_INTEGER +PUSH_edi # Prevent overwriting in recursion +PUSH_ebp # Protect the old base pointer +COPY_esp_to_edi # Copy new base pointer +LOAD_IMMEDIATE_eax &STRING_build_member_2 +PUSH_eax #_process_expression1 +LOAD_IMMEDIATE_eax &STRING_build_member_3 +PUSH_eax #_process_expression2 +COPY_edi_to_ebp +CALL_IMMEDIATE %FUNCTION_require_match +POP_ebx # _process_expression_locals +POP_ebx # _process_expression_locals +POP_ebp # Restore old base pointer +POP_edi # Prevent overwrite +JUMP %_END_IF_build_member_0 +:ELSE_build_member_0 +LOAD_BASE_ADDRESS_eax %-20 +LOAD_INTEGER +# looking up offset +# -> offset calculation +LOAD_IMMEDIATE_ebx %4 +ADD_ebx_to_eax +PUSH_eax #_common_recursion +LOAD_BASE_ADDRESS_eax %-16 LOAD_INTEGER # looking up offset # -> offset calculation @@ -5212,9 +4833,10 @@ ADD_ebx_to_eax LOAD_INTEGER POP_ebx # _common_recursion STORE_INTEGER +:_END_IF_build_member_0 LOAD_IMMEDIATE_eax &GLOBAL_member_size PUSH_eax #_common_recursion -LOAD_EFFECTIVE_ADDRESS %8 +LOAD_BASE_ADDRESS_eax %-20 LOAD_INTEGER # looking up offset # -> offset calculation @@ -5223,32 +4845,29 @@ ADD_ebx_to_eax LOAD_INTEGER POP_ebx # _common_recursion STORE_INTEGER -LOAD_EFFECTIVE_ADDRESS %0 - +LOAD_BASE_ADDRESS_eax %-20 LOAD_INTEGER # looking up offset # -> offset calculation LOAD_IMMEDIATE_ebx %20 ADD_ebx_to_eax PUSH_eax #_common_recursion -LOAD_EFFECTIVE_ADDRESS %8 +LOAD_BASE_ADDRESS_eax %-16 LOAD_INTEGER POP_ebx # _common_recursion STORE_INTEGER -LOAD_EFFECTIVE_ADDRESS %0 - +LOAD_BASE_ADDRESS_eax %-20 LOAD_INTEGER # looking up offset # -> offset calculation LOAD_IMMEDIATE_ebx %8 ADD_ebx_to_eax PUSH_eax #_common_recursion -LOAD_EFFECTIVE_ADDRESS %16 +LOAD_BASE_ADDRESS_eax %-8 LOAD_INTEGER POP_ebx # _common_recursion STORE_INTEGER -LOAD_EFFECTIVE_ADDRESS %0 - +LOAD_BASE_ADDRESS_eax %-20 LOAD_INTEGER POP_ebx # _return_result_locals POP_ebx # _return_result_locals @@ -5266,15 +4885,20 @@ LOAD_INTEGER LOAD_INTEGER POP_ebx # _common_recursion STORE_INTEGER -LOAD_IMMEDIATE_eax &STRING_11 +PUSH_edi # Prevent overwriting in recursion +PUSH_ebp # Protect the old base pointer +COPY_esp_to_edi # Copy new base pointer +LOAD_IMMEDIATE_eax &STRING_build_union_0 PUSH_eax #_process_expression1 -LOAD_IMMEDIATE_eax &STRING_12 +LOAD_IMMEDIATE_eax &STRING_build_union_1 PUSH_eax #_process_expression2 +COPY_edi_to_ebp CALL_IMMEDIATE %FUNCTION_require_match POP_ebx # _process_expression_locals POP_ebx # _process_expression_locals -:WHILE_build_union_0 - +POP_ebp # Restore old base pointer +POP_edi # Prevent overwrite +:WHILE_build_union_2 LOAD_IMMEDIATE_eax %125 PUSH_eax #_common_recursion LOAD_IMMEDIATE_eax &GLOBAL_global_token @@ -5294,45 +4918,69 @@ CMP SETNE MOVEZBL TEST -JUMP_EQ %END_WHILE_build_union_0 - -# THEN_while_build_union_0 - -LOAD_EFFECTIVE_ADDRESS %12 +JUMP_EQ %END_WHILE_build_union_2 +# THEN_while_build_union_2 +LOAD_BASE_ADDRESS_eax %-4 PUSH_eax #_common_recursion -LOAD_EFFECTIVE_ADDRESS %16 +PUSH_edi # Prevent overwriting in recursion +PUSH_ebp # Protect the old base pointer +COPY_esp_to_edi # Copy new base pointer +LOAD_BASE_ADDRESS_eax %-4 LOAD_INTEGER PUSH_eax #_process_expression1 -LOAD_EFFECTIVE_ADDRESS %16 +LOAD_BASE_ADDRESS_eax %-8 LOAD_INTEGER PUSH_eax #_process_expression2 +COPY_edi_to_ebp CALL_IMMEDIATE %FUNCTION_build_member POP_ebx # _process_expression_locals POP_ebx # _process_expression_locals +POP_ebp # Restore old base pointer +POP_edi # Prevent overwrite POP_ebx # _common_recursion STORE_INTEGER -# IF_build_union_1 +# IF_build_union_3 LOAD_IMMEDIATE_eax &GLOBAL_member_size LOAD_INTEGER PUSH_eax #_common_recursion -LOAD_EFFECTIVE_ADDRESS %4 +LOAD_BASE_ADDRESS_eax %-16 LOAD_INTEGER POP_ebx # _common_recursion CMP SETG MOVEZBL TEST -JUMP_EQ %ELSE_build_union_1 -LOAD_EFFECTIVE_ADDRESS %0 - +JUMP_EQ %ELSE_build_union_3 +LOAD_BASE_ADDRESS_eax %-16 PUSH_eax #_common_recursion LOAD_IMMEDIATE_eax &GLOBAL_member_size LOAD_INTEGER POP_ebx # _common_recursion STORE_INTEGER -JUMP %_END_IF_build_union_1 -:ELSE_build_union_1 -:_END_IF_build_union_1 +JUMP %_END_IF_build_union_3 +:ELSE_build_union_3 +:_END_IF_build_union_3 +PUSH_edi # Prevent overwriting in recursion +PUSH_ebp # Protect the old base pointer +COPY_esp_to_edi # Copy new base pointer +LOAD_IMMEDIATE_eax &STRING_build_union_4 +PUSH_eax #_process_expression1 +LOAD_IMMEDIATE_eax &STRING_build_union_5 +PUSH_eax #_process_expression2 +COPY_edi_to_ebp +CALL_IMMEDIATE %FUNCTION_require_match +POP_ebx # _process_expression_locals +POP_ebx # _process_expression_locals +POP_ebp # Restore old base pointer +POP_edi # Prevent overwrite +JUMP %WHILE_build_union_2 +:END_WHILE_build_union_2 +LOAD_IMMEDIATE_eax &GLOBAL_member_size +PUSH_eax #_common_recursion +LOAD_BASE_ADDRESS_eax %-16 +LOAD_INTEGER +POP_ebx # _common_recursion +STORE_INTEGER LOAD_IMMEDIATE_eax &GLOBAL_global_token PUSH_eax #_common_recursion LOAD_IMMEDIATE_eax &GLOBAL_global_token @@ -5341,24 +4989,7 @@ LOAD_INTEGER LOAD_INTEGER POP_ebx # _common_recursion STORE_INTEGER -LOAD_IMMEDIATE_eax &STRING_13 -PUSH_eax #_process_expression1 -LOAD_IMMEDIATE_eax &STRING_14 -PUSH_eax #_process_expression2 -CALL_IMMEDIATE %FUNCTION_require_match -POP_ebx # _process_expression_locals -POP_ebx # _process_expression_locals -JUMP %WHILE_build_union_0 - -:END_WHILE_build_union_0 - -LOAD_IMMEDIATE_eax &GLOBAL_member_size -PUSH_eax #_common_recursion -LOAD_EFFECTIVE_ADDRESS %4 -LOAD_INTEGER -POP_ebx # _common_recursion -STORE_INTEGER -LOAD_EFFECTIVE_ADDRESS %12 +LOAD_BASE_ADDRESS_eax %-4 LOAD_INTEGER POP_ebx # _return_result_locals RETURN @@ -5367,25 +4998,42 @@ RETURN # Defining local offset LOAD_IMMEDIATE_eax %0 PUSH_eax #offset +LOAD_IMMEDIATE_eax &GLOBAL_member_size +PUSH_eax #_common_recursion +LOAD_IMMEDIATE_eax %0 +POP_ebx # _common_recursion +STORE_INTEGER # Defining local head +PUSH_edi # Prevent overwriting in recursion +PUSH_ebp # Protect the old base pointer +COPY_esp_to_edi # Copy new base pointer LOAD_IMMEDIATE_eax %1 PUSH_eax #_process_expression1 LOAD_IMMEDIATE_eax %28 PUSH_eax #_process_expression2 +COPY_edi_to_ebp CALL_IMMEDIATE %FUNCTION_calloc POP_ebx # _process_expression_locals POP_ebx # _process_expression_locals +POP_ebp # Restore old base pointer +POP_edi # Prevent overwrite PUSH_eax #head # Defining local i +PUSH_edi # Prevent overwriting in recursion +PUSH_ebp # Protect the old base pointer +COPY_esp_to_edi # Copy new base pointer LOAD_IMMEDIATE_eax %1 PUSH_eax #_process_expression1 LOAD_IMMEDIATE_eax %28 PUSH_eax #_process_expression2 +COPY_edi_to_ebp CALL_IMMEDIATE %FUNCTION_calloc POP_ebx # _process_expression_locals POP_ebx # _process_expression_locals +POP_ebp # Restore old base pointer +POP_edi # Prevent overwrite PUSH_eax #i -LOAD_EFFECTIVE_ADDRESS %4 +LOAD_BASE_ADDRESS_eax %-12 LOAD_INTEGER # looking up offset # -> offset calculation @@ -5401,8 +5049,7 @@ ADD_ebx_to_eax LOAD_INTEGER POP_ebx # _common_recursion STORE_INTEGER -LOAD_EFFECTIVE_ADDRESS %0 - +LOAD_BASE_ADDRESS_eax %-16 LOAD_INTEGER # looking up offset # -> offset calculation @@ -5418,30 +5065,29 @@ ADD_ebx_to_eax LOAD_INTEGER POP_ebx # _common_recursion STORE_INTEGER -LOAD_EFFECTIVE_ADDRESS %4 +LOAD_BASE_ADDRESS_eax %-12 LOAD_INTEGER # looking up offset # -> offset calculation LOAD_IMMEDIATE_ebx %12 ADD_ebx_to_eax PUSH_eax #_common_recursion -LOAD_EFFECTIVE_ADDRESS %4 +LOAD_BASE_ADDRESS_eax %-16 LOAD_INTEGER POP_ebx # _common_recursion STORE_INTEGER -LOAD_EFFECTIVE_ADDRESS %0 - +LOAD_BASE_ADDRESS_eax %-16 LOAD_INTEGER # looking up offset # -> offset calculation LOAD_IMMEDIATE_ebx %12 ADD_ebx_to_eax PUSH_eax #_common_recursion -LOAD_EFFECTIVE_ADDRESS %8 +LOAD_BASE_ADDRESS_eax %-12 LOAD_INTEGER POP_ebx # _common_recursion STORE_INTEGER -LOAD_EFFECTIVE_ADDRESS %4 +LOAD_BASE_ADDRESS_eax %-12 LOAD_INTEGER # looking up offset PUSH_eax #_common_recursion @@ -5451,7 +5097,7 @@ POP_ebx # _common_recursion STORE_INTEGER LOAD_IMMEDIATE_eax &GLOBAL_global_types PUSH_eax #_common_recursion -LOAD_EFFECTIVE_ADDRESS %8 +LOAD_BASE_ADDRESS_eax %-12 LOAD_INTEGER POP_ebx # _common_recursion STORE_INTEGER @@ -5463,8 +5109,7 @@ LOAD_INTEGER LOAD_INTEGER POP_ebx # _common_recursion STORE_INTEGER -LOAD_EFFECTIVE_ADDRESS %0 - +LOAD_BASE_ADDRESS_eax %-16 LOAD_INTEGER # looking up offset # -> offset calculation @@ -5474,18 +5119,23 @@ PUSH_eax #_common_recursion LOAD_IMMEDIATE_eax %4 POP_ebx # _common_recursion STORE_INTEGER -LOAD_IMMEDIATE_eax &STRING_15 +PUSH_edi # Prevent overwriting in recursion +PUSH_ebp # Protect the old base pointer +COPY_esp_to_edi # Copy new base pointer +LOAD_IMMEDIATE_eax &STRING_create_struct_0 PUSH_eax #_process_expression1 -LOAD_IMMEDIATE_eax &STRING_16 +LOAD_IMMEDIATE_eax &STRING_create_struct_1 PUSH_eax #_process_expression2 +COPY_edi_to_ebp CALL_IMMEDIATE %FUNCTION_require_match POP_ebx # _process_expression_locals POP_ebx # _process_expression_locals +POP_ebp # Restore old base pointer +POP_edi # Prevent overwrite # Defining local last LOAD_IMMEDIATE_eax %0 PUSH_eax #last -:WHILE_create_struct_0 - +:WHILE_create_struct_2 LOAD_IMMEDIATE_eax %125 PUSH_eax #_common_recursion LOAD_IMMEDIATE_eax &GLOBAL_global_token @@ -5505,11 +5155,12 @@ CMP SETNE MOVEZBL TEST -JUMP_EQ %END_WHILE_create_struct_0 - -# THEN_while_create_struct_0 - -# IF_create_struct_1 +JUMP_EQ %END_WHILE_create_struct_2 +# THEN_while_create_struct_2 +# IF_create_struct_3 +PUSH_edi # Prevent overwriting in recursion +PUSH_ebp # Protect the old base pointer +COPY_esp_to_edi # Copy new base pointer LOAD_IMMEDIATE_eax &GLOBAL_global_token LOAD_INTEGER # looking up offset @@ -5518,47 +5169,60 @@ LOAD_IMMEDIATE_ebx %8 ADD_ebx_to_eax LOAD_INTEGER PUSH_eax #_process_expression1 -LOAD_IMMEDIATE_eax &STRING_17 +LOAD_IMMEDIATE_eax &STRING_create_struct_4 PUSH_eax #_process_expression2 +COPY_edi_to_ebp CALL_IMMEDIATE %FUNCTION_match POP_ebx # _process_expression_locals POP_ebx # _process_expression_locals +POP_ebp # Restore old base pointer +POP_edi # Prevent overwrite TEST -JUMP_EQ %ELSE_create_struct_1 -LOAD_EFFECTIVE_ADDRESS %0 - +JUMP_EQ %ELSE_create_struct_3 +LOAD_BASE_ADDRESS_eax %-20 PUSH_eax #_common_recursion -LOAD_EFFECTIVE_ADDRESS %4 +PUSH_edi # Prevent overwriting in recursion +PUSH_ebp # Protect the old base pointer +COPY_esp_to_edi # Copy new base pointer +LOAD_BASE_ADDRESS_eax %-20 LOAD_INTEGER PUSH_eax #_process_expression1 -LOAD_EFFECTIVE_ADDRESS %20 +LOAD_BASE_ADDRESS_eax %-8 LOAD_INTEGER PUSH_eax #_process_expression2 +COPY_edi_to_ebp CALL_IMMEDIATE %FUNCTION_build_union POP_ebx # _process_expression_locals POP_ebx # _process_expression_locals +POP_ebp # Restore old base pointer +POP_edi # Prevent overwrite POP_ebx # _common_recursion STORE_INTEGER -JUMP %_END_IF_create_struct_1 -:ELSE_create_struct_1 -LOAD_EFFECTIVE_ADDRESS %0 - +JUMP %_END_IF_create_struct_3 +:ELSE_create_struct_3 +LOAD_BASE_ADDRESS_eax %-20 PUSH_eax #_common_recursion -LOAD_EFFECTIVE_ADDRESS %4 +PUSH_edi # Prevent overwriting in recursion +PUSH_ebp # Protect the old base pointer +COPY_esp_to_edi # Copy new base pointer +LOAD_BASE_ADDRESS_eax %-20 LOAD_INTEGER PUSH_eax #_process_expression1 -LOAD_EFFECTIVE_ADDRESS %20 +LOAD_BASE_ADDRESS_eax %-8 LOAD_INTEGER PUSH_eax #_process_expression2 +COPY_edi_to_ebp CALL_IMMEDIATE %FUNCTION_build_member POP_ebx # _process_expression_locals POP_ebx # _process_expression_locals +POP_ebp # Restore old base pointer +POP_edi # Prevent overwrite POP_ebx # _common_recursion STORE_INTEGER -:_END_IF_create_struct_1 -LOAD_EFFECTIVE_ADDRESS %12 +:_END_IF_create_struct_3 +LOAD_BASE_ADDRESS_eax %-8 PUSH_eax #_common_recursion -LOAD_EFFECTIVE_ADDRESS %16 +LOAD_BASE_ADDRESS_eax %-8 LOAD_INTEGER PUSH_eax #_common_recursion LOAD_IMMEDIATE_eax &GLOBAL_member_size @@ -5567,6 +5231,21 @@ POP_ebx # _common_recursion ADD_ebx_to_eax POP_ebx # _common_recursion STORE_INTEGER +PUSH_edi # Prevent overwriting in recursion +PUSH_ebp # Protect the old base pointer +COPY_esp_to_edi # Copy new base pointer +LOAD_IMMEDIATE_eax &STRING_create_struct_5 +PUSH_eax #_process_expression1 +LOAD_IMMEDIATE_eax &STRING_create_struct_6 +PUSH_eax #_process_expression2 +COPY_edi_to_ebp +CALL_IMMEDIATE %FUNCTION_require_match +POP_ebx # _process_expression_locals +POP_ebx # _process_expression_locals +POP_ebp # Restore old base pointer +POP_edi # Prevent overwrite +JUMP %WHILE_create_struct_2 +:END_WHILE_create_struct_2 LOAD_IMMEDIATE_eax &GLOBAL_global_token PUSH_eax #_common_recursion LOAD_IMMEDIATE_eax &GLOBAL_global_token @@ -5575,67 +5254,49 @@ LOAD_INTEGER LOAD_INTEGER POP_ebx # _common_recursion STORE_INTEGER -LOAD_IMMEDIATE_eax &STRING_18 +PUSH_edi # Prevent overwriting in recursion +PUSH_ebp # Protect the old base pointer +COPY_esp_to_edi # Copy new base pointer +LOAD_IMMEDIATE_eax &STRING_create_struct_7 PUSH_eax #_process_expression1 -LOAD_IMMEDIATE_eax &STRING_19 +LOAD_IMMEDIATE_eax &STRING_create_struct_8 PUSH_eax #_process_expression2 +COPY_edi_to_ebp CALL_IMMEDIATE %FUNCTION_require_match POP_ebx # _process_expression_locals POP_ebx # _process_expression_locals -JUMP %WHILE_create_struct_0 - -:END_WHILE_create_struct_0 - -LOAD_IMMEDIATE_eax &GLOBAL_global_token -PUSH_eax #_common_recursion -LOAD_IMMEDIATE_eax &GLOBAL_global_token -LOAD_INTEGER -# looking up offset -LOAD_INTEGER -POP_ebx # _common_recursion -STORE_INTEGER -LOAD_IMMEDIATE_eax &STRING_20 -PUSH_eax #_process_expression1 -LOAD_IMMEDIATE_eax &STRING_21 -PUSH_eax #_process_expression2 -CALL_IMMEDIATE %FUNCTION_require_match -POP_ebx # _process_expression_locals -POP_ebx # _process_expression_locals -LOAD_EFFECTIVE_ADDRESS %8 +POP_ebp # Restore old base pointer +POP_edi # Prevent overwrite +LOAD_BASE_ADDRESS_eax %-12 LOAD_INTEGER # looking up offset # -> offset calculation LOAD_IMMEDIATE_ebx %4 ADD_ebx_to_eax PUSH_eax #_common_recursion -LOAD_EFFECTIVE_ADDRESS %16 +LOAD_BASE_ADDRESS_eax %-8 LOAD_INTEGER POP_ebx # _common_recursion STORE_INTEGER -LOAD_EFFECTIVE_ADDRESS %8 +LOAD_BASE_ADDRESS_eax %-12 LOAD_INTEGER # looking up offset # -> offset calculation LOAD_IMMEDIATE_ebx %16 ADD_ebx_to_eax PUSH_eax #_common_recursion -LOAD_EFFECTIVE_ADDRESS %4 +LOAD_BASE_ADDRESS_eax %-20 LOAD_INTEGER POP_ebx # _common_recursion STORE_INTEGER -LOAD_EFFECTIVE_ADDRESS %8 -LOAD_INTEGER -# looking up offset -# -> offset calculation -LOAD_IMMEDIATE_ebx %12 -ADD_ebx_to_eax +LOAD_BASE_ADDRESS_eax %-16 LOAD_INTEGER # looking up offset # -> offset calculation LOAD_IMMEDIATE_ebx %16 ADD_ebx_to_eax PUSH_eax #_common_recursion -LOAD_EFFECTIVE_ADDRESS %4 +LOAD_BASE_ADDRESS_eax %-20 LOAD_INTEGER POP_ebx # _common_recursion STORE_INTEGER @@ -5647,11 +5308,10 @@ RETURN # Defining function type_name :FUNCTION_type_name # Defining local structure -LOAD_IMMEDIATE_eax %0 -PUSH_eax #structure -# IF_type_name_0 - -LOAD_IMMEDIATE_eax &STRING_22 +PUSH_edi # Prevent overwriting in recursion +PUSH_ebp # Protect the old base pointer +COPY_esp_to_edi # Copy new base pointer +LOAD_IMMEDIATE_eax &STRING_type_name_0 PUSH_eax #_process_expression1 LOAD_IMMEDIATE_eax &GLOBAL_global_token LOAD_INTEGER @@ -5661,18 +5321,18 @@ LOAD_IMMEDIATE_ebx %8 ADD_ebx_to_eax LOAD_INTEGER PUSH_eax #_process_expression2 +COPY_edi_to_ebp CALL_IMMEDIATE %FUNCTION_match POP_ebx # _process_expression_locals POP_ebx # _process_expression_locals +POP_ebp # Restore old base pointer +POP_edi # Prevent overwrite +PUSH_eax #structure +# IF_type_name_1 +LOAD_BASE_ADDRESS_eax %-8 +LOAD_INTEGER TEST -JUMP_EQ %ELSE_type_name_0 - -LOAD_EFFECTIVE_ADDRESS %0 - -PUSH_eax #_common_recursion -LOAD_IMMEDIATE_eax %1 -POP_ebx # _common_recursion -STORE_INTEGER +JUMP_EQ %ELSE_type_name_1 LOAD_IMMEDIATE_eax &GLOBAL_global_token PUSH_eax #_common_recursion LOAD_IMMEDIATE_eax &GLOBAL_global_token @@ -5681,13 +5341,13 @@ LOAD_INTEGER LOAD_INTEGER POP_ebx # _common_recursion STORE_INTEGER -JUMP %_END_IF_type_name_0 - -:ELSE_type_name_0 - -:_END_IF_type_name_0 - +JUMP %_END_IF_type_name_1 +:ELSE_type_name_1 +:_END_IF_type_name_1 # Defining local ret +PUSH_edi # Prevent overwriting in recursion +PUSH_ebp # Protect the old base pointer +COPY_esp_to_edi # Copy new base pointer LOAD_IMMEDIATE_eax &GLOBAL_global_token LOAD_INTEGER # looking up offset @@ -5696,13 +5356,20 @@ LOAD_IMMEDIATE_ebx %8 ADD_ebx_to_eax LOAD_INTEGER PUSH_eax #_process_expression1 +LOAD_IMMEDIATE_eax &GLOBAL_global_types +LOAD_INTEGER +PUSH_eax #_process_expression2 +COPY_edi_to_ebp CALL_IMMEDIATE %FUNCTION_lookup_type POP_ebx # _process_expression_locals +POP_ebx # _process_expression_locals +POP_ebp # Restore old base pointer +POP_edi # Prevent overwrite PUSH_eax #ret -# IF_type_name_1 +# IF_type_name_2 LOAD_IMMEDIATE_eax %0 PUSH_eax #_common_recursion -LOAD_EFFECTIVE_ADDRESS %4 +LOAD_BASE_ADDRESS_eax %-12 LOAD_INTEGER POP_ebx # _common_recursion CMP @@ -5711,21 +5378,30 @@ MOVEZBL PUSH_eax #_common_recursion LOAD_IMMEDIATE_eax %1 PUSH_eax #_common_recursion -LOAD_EFFECTIVE_ADDRESS %12 +LOAD_BASE_ADDRESS_eax %-8 LOAD_INTEGER POP_ebx # _common_recursion XOR_ebx_eax_into_eax POP_ebx # _common_recursion AND_eax_ebx TEST -JUMP_EQ %ELSE_type_name_1 -LOAD_IMMEDIATE_eax &STRING_23 +JUMP_EQ %ELSE_type_name_2 +PUSH_edi # Prevent overwriting in recursion +PUSH_ebp # Protect the old base pointer +COPY_esp_to_edi # Copy new base pointer +LOAD_IMMEDIATE_eax &STRING_type_name_3 PUSH_eax #_process_expression1 LOAD_IMMEDIATE_eax %2 PUSH_eax #_process_expression2 +COPY_edi_to_ebp CALL_IMMEDIATE %FUNCTION_file_print POP_ebx # _process_expression_locals POP_ebx # _process_expression_locals +POP_ebp # Restore old base pointer +POP_edi # Prevent overwrite +PUSH_edi # Prevent overwriting in recursion +PUSH_ebp # Protect the old base pointer +COPY_esp_to_edi # Copy new base pointer LOAD_IMMEDIATE_eax &GLOBAL_global_token LOAD_INTEGER # looking up offset @@ -5736,43 +5412,70 @@ LOAD_INTEGER PUSH_eax #_process_expression1 LOAD_IMMEDIATE_eax %2 PUSH_eax #_process_expression2 +COPY_edi_to_ebp CALL_IMMEDIATE %FUNCTION_file_print POP_ebx # _process_expression_locals POP_ebx # _process_expression_locals -LOAD_IMMEDIATE_eax &STRING_24 +POP_ebp # Restore old base pointer +POP_edi # Prevent overwrite +PUSH_edi # Prevent overwriting in recursion +PUSH_ebp # Protect the old base pointer +COPY_esp_to_edi # Copy new base pointer +LOAD_IMMEDIATE_eax &STRING_type_name_4 PUSH_eax #_process_expression1 LOAD_IMMEDIATE_eax %2 PUSH_eax #_process_expression2 +COPY_edi_to_ebp CALL_IMMEDIATE %FUNCTION_file_print POP_ebx # _process_expression_locals POP_ebx # _process_expression_locals +POP_ebp # Restore old base pointer +POP_edi # Prevent overwrite +PUSH_edi # Prevent overwriting in recursion +PUSH_ebp # Protect the old base pointer +COPY_esp_to_edi # Copy new base pointer +COPY_edi_to_ebp CALL_IMMEDIATE %FUNCTION_line_error +POP_ebp # Restore old base pointer +POP_edi # Prevent overwrite +PUSH_edi # Prevent overwriting in recursion +PUSH_ebp # Protect the old base pointer +COPY_esp_to_edi # Copy new base pointer LOAD_IMMEDIATE_eax %1 PUSH_eax #_process_expression1 +COPY_edi_to_ebp CALL_IMMEDIATE %FUNCTION_exit POP_ebx # _process_expression_locals -JUMP %_END_IF_type_name_1 -:ELSE_type_name_1 -# IF_type_name_2 +POP_ebp # Restore old base pointer +POP_edi # Prevent overwrite +JUMP %_END_IF_type_name_2 +:ELSE_type_name_2 +# IF_type_name_5 LOAD_IMMEDIATE_eax %0 PUSH_eax #_common_recursion -LOAD_EFFECTIVE_ADDRESS %4 +LOAD_BASE_ADDRESS_eax %-12 LOAD_INTEGER POP_ebx # _common_recursion CMP SETE MOVEZBL TEST -JUMP_EQ %ELSE_type_name_2 +JUMP_EQ %ELSE_type_name_5 +PUSH_edi # Prevent overwriting in recursion +PUSH_ebp # Protect the old base pointer +COPY_esp_to_edi # Copy new base pointer +COPY_edi_to_ebp CALL_IMMEDIATE %FUNCTION_create_struct +POP_ebp # Restore old base pointer +POP_edi # Prevent overwrite LOAD_IMMEDIATE_eax %0 POP_ebx # _return_result_locals POP_ebx # _return_result_locals RETURN -JUMP %_END_IF_type_name_2 -:ELSE_type_name_2 +JUMP %_END_IF_type_name_5 +:ELSE_type_name_5 +:_END_IF_type_name_5 :_END_IF_type_name_2 -:_END_IF_type_name_1 LOAD_IMMEDIATE_eax &GLOBAL_global_token PUSH_eax #_common_recursion LOAD_IMMEDIATE_eax &GLOBAL_global_token @@ -5781,7 +5484,7 @@ LOAD_INTEGER LOAD_INTEGER POP_ebx # _common_recursion STORE_INTEGER -:WHILE_type_name_3 +:WHILE_type_name_6 LOAD_IMMEDIATE_eax &GLOBAL_global_token LOAD_INTEGER # looking up offset @@ -5801,12 +5504,11 @@ CMP SETE MOVEZBL TEST -JUMP_EQ %END_WHILE_type_name_3 -# THEN_while_type_name_3 -LOAD_EFFECTIVE_ADDRESS %0 - +JUMP_EQ %END_WHILE_type_name_6 +# THEN_while_type_name_6 +LOAD_BASE_ADDRESS_eax %-12 PUSH_eax #_common_recursion -LOAD_EFFECTIVE_ADDRESS %4 +LOAD_BASE_ADDRESS_eax %-12 LOAD_INTEGER # looking up offset # -> offset calculation @@ -5823,196 +5525,228 @@ LOAD_INTEGER LOAD_INTEGER POP_ebx # _common_recursion STORE_INTEGER -JUMP %WHILE_type_name_3 -:END_WHILE_type_name_3 -LOAD_EFFECTIVE_ADDRESS %0 - +JUMP %WHILE_type_name_6 +:END_WHILE_type_name_6 +LOAD_BASE_ADDRESS_eax %-12 LOAD_INTEGER POP_ebx # _return_result_locals POP_ebx # _return_result_locals RETURN -# Defining function line_error -:FUNCTION_line_error -LOAD_IMMEDIATE_eax &STRING_25 -PUSH_eax #_process_expression1 -LOAD_IMMEDIATE_eax %2 -PUSH_eax #_process_expression2 -CALL_IMMEDIATE %FUNCTION_file_print -POP_ebx # _process_expression_locals -POP_ebx # _process_expression_locals -LOAD_IMMEDIATE_eax &GLOBAL_global_token -LOAD_INTEGER -# looking up offset -# -> offset calculation -LOAD_IMMEDIATE_ebx %12 -ADD_ebx_to_eax -LOAD_INTEGER -PUSH_eax #_process_expression1 -LOAD_IMMEDIATE_eax %2 -PUSH_eax #_process_expression2 -CALL_IMMEDIATE %FUNCTION_file_print -POP_ebx # _process_expression_locals -POP_ebx # _process_expression_locals -LOAD_IMMEDIATE_eax &STRING_26 -PUSH_eax #_process_expression1 -LOAD_IMMEDIATE_eax %2 -PUSH_eax #_process_expression2 -CALL_IMMEDIATE %FUNCTION_file_print -POP_ebx # _process_expression_locals -POP_ebx # _process_expression_locals -LOAD_IMMEDIATE_eax &GLOBAL_global_token -LOAD_INTEGER -# looking up offset -# -> offset calculation -LOAD_IMMEDIATE_ebx %16 -ADD_ebx_to_eax -LOAD_INTEGER -PUSH_eax #_process_expression1 -CALL_IMMEDIATE %FUNCTION_numerate_number -POP_ebx # _process_expression_locals -PUSH_eax #_process_expression1 -LOAD_IMMEDIATE_eax %2 -PUSH_eax #_process_expression2 -CALL_IMMEDIATE %FUNCTION_file_print -POP_ebx # _process_expression_locals -POP_ebx # _process_expression_locals -RETURN -# Defining function require_match -:FUNCTION_require_match -# IF_require_match_0 - -LOAD_IMMEDIATE_eax %1 -PUSH_eax #_common_recursion -LOAD_IMMEDIATE_eax &GLOBAL_global_token -LOAD_INTEGER -# looking up offset -# -> offset calculation -LOAD_IMMEDIATE_ebx %8 -ADD_ebx_to_eax -LOAD_INTEGER -PUSH_eax #_process_expression1 -LOAD_EFFECTIVE_ADDRESS %12 -LOAD_INTEGER -PUSH_eax #_process_expression2 -CALL_IMMEDIATE %FUNCTION_match -POP_ebx # _process_expression_locals -POP_ebx # _process_expression_locals -POP_ebx # _common_recursion -XOR_ebx_eax_into_eax -TEST -JUMP_EQ %ELSE_require_match_0 - -LOAD_EFFECTIVE_ADDRESS %8 -LOAD_INTEGER -PUSH_eax #_process_expression1 -LOAD_IMMEDIATE_eax %2 -PUSH_eax #_process_expression2 -CALL_IMMEDIATE %FUNCTION_file_print -POP_ebx # _process_expression_locals -POP_ebx # _process_expression_locals -CALL_IMMEDIATE %FUNCTION_line_error -LOAD_IMMEDIATE_eax %1 -PUSH_eax #_process_expression1 -CALL_IMMEDIATE %FUNCTION_exit -POP_ebx # _process_expression_locals -JUMP %_END_IF_require_match_0 - -:ELSE_require_match_0 - -:_END_IF_require_match_0 - -LOAD_IMMEDIATE_eax &GLOBAL_global_token -PUSH_eax #_common_recursion -LOAD_IMMEDIATE_eax &GLOBAL_global_token -LOAD_INTEGER -# looking up offset -LOAD_INTEGER -POP_ebx # _common_recursion -STORE_INTEGER -RETURN # Defining function emit :FUNCTION_emit # Defining local t +PUSH_edi # Prevent overwriting in recursion +PUSH_ebp # Protect the old base pointer +COPY_esp_to_edi # Copy new base pointer LOAD_IMMEDIATE_eax %1 PUSH_eax #_process_expression1 -LOAD_IMMEDIATE_eax %28 +LOAD_IMMEDIATE_eax %20 PUSH_eax #_process_expression2 +COPY_edi_to_ebp CALL_IMMEDIATE %FUNCTION_calloc POP_ebx # _process_expression_locals POP_ebx # _process_expression_locals +POP_ebp # Restore old base pointer +POP_edi # Prevent overwrite PUSH_eax #t -LOAD_EFFECTIVE_ADDRESS %0 - +LOAD_BASE_ADDRESS_eax %-16 LOAD_INTEGER # looking up offset PUSH_eax #_common_recursion -LOAD_EFFECTIVE_ADDRESS %12 +LOAD_BASE_ADDRESS_eax %-8 LOAD_INTEGER POP_ebx # _common_recursion STORE_INTEGER -LOAD_EFFECTIVE_ADDRESS %0 - +LOAD_BASE_ADDRESS_eax %-16 LOAD_INTEGER # looking up offset # -> offset calculation LOAD_IMMEDIATE_ebx %8 ADD_ebx_to_eax PUSH_eax #_common_recursion -LOAD_EFFECTIVE_ADDRESS %16 +LOAD_BASE_ADDRESS_eax %-4 LOAD_INTEGER POP_ebx # _common_recursion STORE_INTEGER -LOAD_EFFECTIVE_ADDRESS %0 - +LOAD_BASE_ADDRESS_eax %-16 LOAD_INTEGER POP_ebx # _return_result_locals RETURN +# Defining function emit_out +:FUNCTION_emit_out +LOAD_IMMEDIATE_eax &GLOBAL_out +PUSH_eax #_common_recursion +PUSH_edi # Prevent overwriting in recursion +PUSH_ebp # Protect the old base pointer +COPY_esp_to_edi # Copy new base pointer +LOAD_BASE_ADDRESS_eax %-4 +LOAD_INTEGER +PUSH_eax #_process_expression1 +LOAD_IMMEDIATE_eax &GLOBAL_out +LOAD_INTEGER +PUSH_eax #_process_expression2 +COPY_edi_to_ebp +CALL_IMMEDIATE %FUNCTION_emit +POP_ebx # _process_expression_locals +POP_ebx # _process_expression_locals +POP_ebp # Restore old base pointer +POP_edi # Prevent overwrite +POP_ebx # _common_recursion +STORE_INTEGER +RETURN +# Defining function uniqueID +:FUNCTION_uniqueID +LOAD_BASE_ADDRESS_eax %-8 +PUSH_eax #_common_recursion +PUSH_edi # Prevent overwriting in recursion +PUSH_ebp # Protect the old base pointer +COPY_esp_to_edi # Copy new base pointer +LOAD_BASE_ADDRESS_eax %-4 +LOAD_INTEGER +PUSH_eax #_process_expression1 +LOAD_BASE_ADDRESS_eax %-8 +LOAD_INTEGER +PUSH_eax #_process_expression2 +COPY_edi_to_ebp +CALL_IMMEDIATE %FUNCTION_emit +POP_ebx # _process_expression_locals +POP_ebx # _process_expression_locals +POP_ebp # Restore old base pointer +POP_edi # Prevent overwrite +POP_ebx # _common_recursion +STORE_INTEGER +LOAD_BASE_ADDRESS_eax %-8 +PUSH_eax #_common_recursion +PUSH_edi # Prevent overwriting in recursion +PUSH_ebp # Protect the old base pointer +COPY_esp_to_edi # Copy new base pointer +LOAD_IMMEDIATE_eax &STRING_uniqueID_0 +PUSH_eax #_process_expression1 +LOAD_BASE_ADDRESS_eax %-8 +LOAD_INTEGER +PUSH_eax #_process_expression2 +COPY_edi_to_ebp +CALL_IMMEDIATE %FUNCTION_emit +POP_ebx # _process_expression_locals +POP_ebx # _process_expression_locals +POP_ebp # Restore old base pointer +POP_edi # Prevent overwrite +POP_ebx # _common_recursion +STORE_INTEGER +LOAD_BASE_ADDRESS_eax %-8 +PUSH_eax #_common_recursion +PUSH_edi # Prevent overwriting in recursion +PUSH_ebp # Protect the old base pointer +COPY_esp_to_edi # Copy new base pointer +LOAD_BASE_ADDRESS_eax %-12 +LOAD_INTEGER +PUSH_eax #_process_expression1 +LOAD_BASE_ADDRESS_eax %-8 +LOAD_INTEGER +PUSH_eax #_process_expression2 +COPY_edi_to_ebp +CALL_IMMEDIATE %FUNCTION_emit +POP_ebx # _process_expression_locals +POP_ebx # _process_expression_locals +POP_ebp # Restore old base pointer +POP_edi # Prevent overwrite +POP_ebx # _common_recursion +STORE_INTEGER +LOAD_BASE_ADDRESS_eax %-8 +PUSH_eax #_common_recursion +PUSH_edi # Prevent overwriting in recursion +PUSH_ebp # Protect the old base pointer +COPY_esp_to_edi # Copy new base pointer +LOAD_IMMEDIATE_eax &STRING_uniqueID_1 +PUSH_eax #_process_expression1 +LOAD_BASE_ADDRESS_eax %-8 +LOAD_INTEGER +PUSH_eax #_process_expression2 +COPY_edi_to_ebp +CALL_IMMEDIATE %FUNCTION_emit +POP_ebx # _process_expression_locals +POP_ebx # _process_expression_locals +POP_ebp # Restore old base pointer +POP_edi # Prevent overwrite +POP_ebx # _common_recursion +STORE_INTEGER +LOAD_BASE_ADDRESS_eax %-8 +LOAD_INTEGER +RETURN +# Defining function uniqueID_out +:FUNCTION_uniqueID_out +LOAD_IMMEDIATE_eax &GLOBAL_out +PUSH_eax #_common_recursion +PUSH_edi # Prevent overwriting in recursion +PUSH_ebp # Protect the old base pointer +COPY_esp_to_edi # Copy new base pointer +LOAD_BASE_ADDRESS_eax %-4 +LOAD_INTEGER +PUSH_eax #_process_expression1 +LOAD_IMMEDIATE_eax &GLOBAL_out +LOAD_INTEGER +PUSH_eax #_process_expression2 +LOAD_BASE_ADDRESS_eax %-8 +LOAD_INTEGER +PUSH_eax #_process_expression2 +COPY_edi_to_ebp +CALL_IMMEDIATE %FUNCTION_uniqueID +POP_ebx # _process_expression_locals +POP_ebx # _process_expression_locals +POP_ebx # _process_expression_locals +POP_ebp # Restore old base pointer +POP_edi # Prevent overwrite +POP_ebx # _common_recursion +STORE_INTEGER +RETURN # Defining function sym_declare :FUNCTION_sym_declare # Defining local a +PUSH_edi # Prevent overwriting in recursion +PUSH_ebp # Protect the old base pointer +COPY_esp_to_edi # Copy new base pointer LOAD_IMMEDIATE_eax %1 PUSH_eax #_process_expression1 -LOAD_IMMEDIATE_eax %28 +LOAD_IMMEDIATE_eax %20 PUSH_eax #_process_expression2 +COPY_edi_to_ebp CALL_IMMEDIATE %FUNCTION_calloc POP_ebx # _process_expression_locals POP_ebx # _process_expression_locals +POP_ebp # Restore old base pointer +POP_edi # Prevent overwrite PUSH_eax #a -LOAD_EFFECTIVE_ADDRESS %0 - +LOAD_BASE_ADDRESS_eax %-20 LOAD_INTEGER # looking up offset PUSH_eax #_common_recursion -LOAD_EFFECTIVE_ADDRESS %12 +LOAD_BASE_ADDRESS_eax %-12 LOAD_INTEGER POP_ebx # _common_recursion STORE_INTEGER -LOAD_EFFECTIVE_ADDRESS %0 - +LOAD_BASE_ADDRESS_eax %-20 LOAD_INTEGER # looking up offset # -> offset calculation LOAD_IMMEDIATE_ebx %8 ADD_ebx_to_eax PUSH_eax #_common_recursion -LOAD_EFFECTIVE_ADDRESS %20 +LOAD_BASE_ADDRESS_eax %-4 LOAD_INTEGER POP_ebx # _common_recursion STORE_INTEGER -LOAD_EFFECTIVE_ADDRESS %0 - +LOAD_BASE_ADDRESS_eax %-20 LOAD_INTEGER # looking up offset # -> offset calculation LOAD_IMMEDIATE_ebx %12 ADD_ebx_to_eax PUSH_eax #_common_recursion -LOAD_EFFECTIVE_ADDRESS %16 +LOAD_BASE_ADDRESS_eax %-8 LOAD_INTEGER POP_ebx # _common_recursion STORE_INTEGER -LOAD_EFFECTIVE_ADDRESS %0 - +LOAD_BASE_ADDRESS_eax %-20 LOAD_INTEGER POP_ebx # _return_result_locals RETURN @@ -6021,19 +5755,16 @@ RETURN # Defining local i PUSH_eax #i # FOR_initialization_sym_lookup_0 - -LOAD_EFFECTIVE_ADDRESS %0 - +LOAD_BASE_ADDRESS_eax %-16 PUSH_eax #_common_recursion -LOAD_EFFECTIVE_ADDRESS %12 +LOAD_BASE_ADDRESS_eax %-8 LOAD_INTEGER POP_ebx # _common_recursion STORE_INTEGER :FOR_sym_lookup_0 - LOAD_IMMEDIATE_eax %0 PUSH_eax #_common_recursion -LOAD_EFFECTIVE_ADDRESS %4 +LOAD_BASE_ADDRESS_eax %-16 LOAD_INTEGER POP_ebx # _common_recursion CMP @@ -6041,27 +5772,23 @@ SETNE MOVEZBL TEST JUMP_EQ %FOR_END_sym_lookup_0 - JUMP %FOR_THEN_sym_lookup_0 - :FOR_ITER_sym_lookup_0 - -LOAD_EFFECTIVE_ADDRESS %0 - +LOAD_BASE_ADDRESS_eax %-16 PUSH_eax #_common_recursion -LOAD_EFFECTIVE_ADDRESS %4 +LOAD_BASE_ADDRESS_eax %-16 LOAD_INTEGER # looking up offset LOAD_INTEGER POP_ebx # _common_recursion STORE_INTEGER JUMP %FOR_sym_lookup_0 - :FOR_THEN_sym_lookup_0 - # IF_sym_lookup_1 -LOAD_EFFECTIVE_ADDRESS %0 - +PUSH_edi # Prevent overwriting in recursion +PUSH_ebp # Protect the old base pointer +COPY_esp_to_edi # Copy new base pointer +LOAD_BASE_ADDRESS_eax %-16 LOAD_INTEGER # looking up offset # -> offset calculation @@ -6069,16 +5796,18 @@ LOAD_IMMEDIATE_ebx %8 ADD_ebx_to_eax LOAD_INTEGER PUSH_eax #_process_expression1 -LOAD_EFFECTIVE_ADDRESS %16 +LOAD_BASE_ADDRESS_eax %-4 LOAD_INTEGER PUSH_eax #_process_expression2 +COPY_edi_to_ebp CALL_IMMEDIATE %FUNCTION_match POP_ebx # _process_expression_locals POP_ebx # _process_expression_locals +POP_ebp # Restore old base pointer +POP_edi # Prevent overwrite TEST JUMP_EQ %ELSE_sym_lookup_1 -LOAD_EFFECTIVE_ADDRESS %0 - +LOAD_BASE_ADDRESS_eax %-16 LOAD_INTEGER POP_ebx # _return_result_locals RETURN @@ -6086,326 +5815,207 @@ JUMP %_END_IF_sym_lookup_1 :ELSE_sym_lookup_1 :_END_IF_sym_lookup_1 JUMP %FOR_ITER_sym_lookup_0 - :FOR_END_sym_lookup_0 - LOAD_IMMEDIATE_eax %0 POP_ebx # _return_result_locals RETURN -# Defining function stack_index -:FUNCTION_stack_index -# Defining local depth -LOAD_IMMEDIATE_eax %4 -PUSH_eax #_common_recursion -LOAD_EFFECTIVE_ADDRESS %8 +# Defining function line_error +:FUNCTION_line_error +PUSH_edi # Prevent overwriting in recursion +PUSH_ebp # Protect the old base pointer +COPY_esp_to_edi # Copy new base pointer +LOAD_IMMEDIATE_eax &STRING_line_error_0 +PUSH_eax #_process_expression1 +LOAD_IMMEDIATE_eax %2 +PUSH_eax #_process_expression2 +COPY_edi_to_ebp +CALL_IMMEDIATE %FUNCTION_file_print +POP_ebx # _process_expression_locals +POP_ebx # _process_expression_locals +POP_ebp # Restore old base pointer +POP_edi # Prevent overwrite +PUSH_edi # Prevent overwriting in recursion +PUSH_ebp # Protect the old base pointer +COPY_esp_to_edi # Copy new base pointer +LOAD_IMMEDIATE_eax &GLOBAL_global_token LOAD_INTEGER # looking up offset # -> offset calculation -LOAD_IMMEDIATE_ebx %24 +LOAD_IMMEDIATE_ebx %12 ADD_ebx_to_eax LOAD_INTEGER -POP_ebx # _common_recursion -MULTIPLY_eax_by_ebx_into_eax -PUSH_eax #depth -# Defining local i -PUSH_eax #i -# FOR_initialization_stack_index_0 - -LOAD_EFFECTIVE_ADDRESS %0 - -PUSH_eax #_common_recursion -LOAD_EFFECTIVE_ADDRESS %16 -LOAD_INTEGER -# looking up offset -# -> offset calculation -LOAD_IMMEDIATE_ebx %20 -ADD_ebx_to_eax -LOAD_INTEGER -POP_ebx # _common_recursion -STORE_INTEGER -:FOR_stack_index_0 - -LOAD_IMMEDIATE_eax %0 -PUSH_eax #_common_recursion -LOAD_EFFECTIVE_ADDRESS %4 -LOAD_INTEGER -POP_ebx # _common_recursion -CMP -SETNE -MOVEZBL -TEST -JUMP_EQ %FOR_END_stack_index_0 - -JUMP %FOR_THEN_stack_index_0 - -:FOR_ITER_stack_index_0 - -LOAD_EFFECTIVE_ADDRESS %0 - -PUSH_eax #_common_recursion -LOAD_EFFECTIVE_ADDRESS %4 -LOAD_INTEGER -# looking up offset -LOAD_INTEGER -POP_ebx # _common_recursion -STORE_INTEGER -JUMP %FOR_stack_index_0 - -:FOR_THEN_stack_index_0 - -# IF_stack_index_1 -LOAD_EFFECTIVE_ADDRESS %0 - -LOAD_INTEGER -PUSH_eax #_common_recursion -LOAD_EFFECTIVE_ADDRESS %20 -LOAD_INTEGER -POP_ebx # _common_recursion -CMP -SETE -MOVEZBL -TEST -JUMP_EQ %ELSE_stack_index_1 -LOAD_EFFECTIVE_ADDRESS %4 -LOAD_INTEGER -POP_ebx # _return_result_locals -POP_ebx # _return_result_locals -RETURN -JUMP %_END_IF_stack_index_1 -:ELSE_stack_index_1 -LOAD_EFFECTIVE_ADDRESS %4 -PUSH_eax #_common_recursion -LOAD_EFFECTIVE_ADDRESS %8 -LOAD_INTEGER -PUSH_eax #_common_recursion -LOAD_IMMEDIATE_eax %4 -POP_ebx # _common_recursion -ADD_ebx_to_eax -POP_ebx # _common_recursion -STORE_INTEGER -:_END_IF_stack_index_1 -JUMP %FOR_ITER_stack_index_0 - -:FOR_END_stack_index_0 - -LOAD_EFFECTIVE_ADDRESS %4 -PUSH_eax #_common_recursion -LOAD_EFFECTIVE_ADDRESS %8 -LOAD_INTEGER -PUSH_eax #_common_recursion -LOAD_IMMEDIATE_eax %4 -POP_ebx # _common_recursion -ADD_ebx_to_eax -POP_ebx # _common_recursion -STORE_INTEGER -# FOR_initialization_stack_index_2 -LOAD_EFFECTIVE_ADDRESS %0 - -PUSH_eax #_common_recursion -LOAD_EFFECTIVE_ADDRESS %16 +PUSH_eax #_process_expression1 +LOAD_IMMEDIATE_eax %2 +PUSH_eax #_process_expression2 +COPY_edi_to_ebp +CALL_IMMEDIATE %FUNCTION_file_print +POP_ebx # _process_expression_locals +POP_ebx # _process_expression_locals +POP_ebp # Restore old base pointer +POP_edi # Prevent overwrite +PUSH_edi # Prevent overwriting in recursion +PUSH_ebp # Protect the old base pointer +COPY_esp_to_edi # Copy new base pointer +LOAD_IMMEDIATE_eax &STRING_line_error_1 +PUSH_eax #_process_expression1 +LOAD_IMMEDIATE_eax %2 +PUSH_eax #_process_expression2 +COPY_edi_to_ebp +CALL_IMMEDIATE %FUNCTION_file_print +POP_ebx # _process_expression_locals +POP_ebx # _process_expression_locals +POP_ebp # Restore old base pointer +POP_edi # Prevent overwrite +PUSH_edi # Prevent overwriting in recursion +PUSH_ebp # Protect the old base pointer +COPY_esp_to_edi # Copy new base pointer +PUSH_edi # Prevent overwriting in recursion +PUSH_ebp # Protect the old base pointer +COPY_esp_to_edi # Copy new base pointer +LOAD_IMMEDIATE_eax &GLOBAL_global_token LOAD_INTEGER # looking up offset # -> offset calculation LOAD_IMMEDIATE_ebx %16 ADD_ebx_to_eax LOAD_INTEGER -POP_ebx # _common_recursion -STORE_INTEGER -:FOR_stack_index_2 -LOAD_IMMEDIATE_eax %0 -PUSH_eax #_common_recursion -LOAD_EFFECTIVE_ADDRESS %4 -LOAD_INTEGER -POP_ebx # _common_recursion -CMP -SETNE -MOVEZBL -TEST -JUMP_EQ %FOR_END_stack_index_2 -JUMP %FOR_THEN_stack_index_2 -:FOR_ITER_stack_index_2 -LOAD_EFFECTIVE_ADDRESS %0 - -PUSH_eax #_common_recursion -LOAD_EFFECTIVE_ADDRESS %4 -LOAD_INTEGER -# looking up offset -LOAD_INTEGER -POP_ebx # _common_recursion -STORE_INTEGER -JUMP %FOR_stack_index_2 -:FOR_THEN_stack_index_2 -# IF_stack_index_3 -LOAD_EFFECTIVE_ADDRESS %0 - -LOAD_INTEGER -PUSH_eax #_common_recursion -LOAD_EFFECTIVE_ADDRESS %20 -LOAD_INTEGER -POP_ebx # _common_recursion -CMP -SETE -MOVEZBL -TEST -JUMP_EQ %ELSE_stack_index_3 -# IF_stack_index_4 -LOAD_IMMEDIATE_eax &STRING_27 PUSH_eax #_process_expression1 -LOAD_EFFECTIVE_ADDRESS %16 +COPY_edi_to_ebp +CALL_IMMEDIATE %FUNCTION_numerate_number +POP_ebx # _process_expression_locals +POP_ebp # Restore old base pointer +POP_edi # Prevent overwrite +PUSH_eax #_process_expression1 +LOAD_IMMEDIATE_eax %2 +PUSH_eax #_process_expression2 +COPY_edi_to_ebp +CALL_IMMEDIATE %FUNCTION_file_print +POP_ebx # _process_expression_locals +POP_ebx # _process_expression_locals +POP_ebp # Restore old base pointer +POP_edi # Prevent overwrite +RETURN +# Defining function require_match +:FUNCTION_require_match +# IF_require_match_0 +LOAD_IMMEDIATE_eax %1 +PUSH_eax #_common_recursion +PUSH_edi # Prevent overwriting in recursion +PUSH_ebp # Protect the old base pointer +COPY_esp_to_edi # Copy new base pointer +LOAD_IMMEDIATE_eax &GLOBAL_global_token LOAD_INTEGER # looking up offset # -> offset calculation LOAD_IMMEDIATE_ebx %8 ADD_ebx_to_eax LOAD_INTEGER +PUSH_eax #_process_expression1 +LOAD_BASE_ADDRESS_eax %-8 +LOAD_INTEGER PUSH_eax #_process_expression2 +COPY_edi_to_ebp CALL_IMMEDIATE %FUNCTION_match POP_ebx # _process_expression_locals POP_ebx # _process_expression_locals +POP_ebp # Restore old base pointer +POP_edi # Prevent overwrite +POP_ebx # _common_recursion +XOR_ebx_eax_into_eax TEST -JUMP_EQ %ELSE_stack_index_4 -# IF_stack_index_5 -LOAD_IMMEDIATE_eax &STRING_28 -PUSH_eax #_process_expression1 -LOAD_EFFECTIVE_ADDRESS %4 -LOAD_INTEGER -# looking up offset -# -> offset calculation -LOAD_IMMEDIATE_ebx %8 -ADD_ebx_to_eax -LOAD_INTEGER -PUSH_eax #_process_expression2 -CALL_IMMEDIATE %FUNCTION_match -POP_ebx # _process_expression_locals -POP_ebx # _process_expression_locals -TEST -JUMP_EQ %ELSE_stack_index_5 -LOAD_EFFECTIVE_ADDRESS %4 -LOAD_INTEGER -PUSH_eax #_common_recursion -LOAD_IMMEDIATE_eax %4 -POP_ebx # _common_recursion -SUBTRACT_eax_from_ebx_into_ebx -MOVE_ebx_to_eax -POP_ebx # _return_result_locals -POP_ebx # _return_result_locals -RETURN -JUMP %_END_IF_stack_index_5 -:ELSE_stack_index_5 -# IF_stack_index_6 -LOAD_IMMEDIATE_eax &STRING_29 -PUSH_eax #_process_expression1 -LOAD_EFFECTIVE_ADDRESS %4 -LOAD_INTEGER -# looking up offset -# -> offset calculation -LOAD_IMMEDIATE_ebx %8 -ADD_ebx_to_eax -LOAD_INTEGER -PUSH_eax #_process_expression2 -CALL_IMMEDIATE %FUNCTION_match -POP_ebx # _process_expression_locals -POP_ebx # _process_expression_locals -TEST -JUMP_EQ %ELSE_stack_index_6 -LOAD_EFFECTIVE_ADDRESS %4 -LOAD_INTEGER -PUSH_eax #_common_recursion -LOAD_IMMEDIATE_eax %4 -POP_ebx # _common_recursion -ADD_ebx_to_eax -POP_ebx # _return_result_locals -POP_ebx # _return_result_locals -RETURN -JUMP %_END_IF_stack_index_6 -:ELSE_stack_index_6 -:_END_IF_stack_index_6 -:_END_IF_stack_index_5 -JUMP %_END_IF_stack_index_4 -:ELSE_stack_index_4 -:_END_IF_stack_index_4 -LOAD_EFFECTIVE_ADDRESS %4 -LOAD_INTEGER -POP_ebx # _return_result_locals -POP_ebx # _return_result_locals -RETURN -JUMP %_END_IF_stack_index_3 -:ELSE_stack_index_3 -LOAD_EFFECTIVE_ADDRESS %4 -PUSH_eax #_common_recursion -LOAD_EFFECTIVE_ADDRESS %8 -LOAD_INTEGER -PUSH_eax #_common_recursion -LOAD_IMMEDIATE_eax %4 -POP_ebx # _common_recursion -ADD_ebx_to_eax -POP_ebx # _common_recursion -STORE_INTEGER -:_END_IF_stack_index_3 -JUMP %FOR_ITER_stack_index_2 -:FOR_END_stack_index_2 -LOAD_EFFECTIVE_ADDRESS %16 -LOAD_INTEGER -# looking up offset -# -> offset calculation -LOAD_IMMEDIATE_ebx %8 -ADD_ebx_to_eax +JUMP_EQ %ELSE_require_match_0 +PUSH_edi # Prevent overwriting in recursion +PUSH_ebp # Protect the old base pointer +COPY_esp_to_edi # Copy new base pointer +LOAD_BASE_ADDRESS_eax %-4 LOAD_INTEGER PUSH_eax #_process_expression1 LOAD_IMMEDIATE_eax %2 PUSH_eax #_process_expression2 +COPY_edi_to_ebp CALL_IMMEDIATE %FUNCTION_file_print POP_ebx # _process_expression_locals POP_ebx # _process_expression_locals -LOAD_IMMEDIATE_eax &STRING_30 -PUSH_eax #_process_expression1 -LOAD_IMMEDIATE_eax %2 -PUSH_eax #_process_expression2 -CALL_IMMEDIATE %FUNCTION_file_print -POP_ebx # _process_expression_locals -POP_ebx # _process_expression_locals -LOAD_EFFECTIVE_ADDRESS %12 -LOAD_INTEGER -# looking up offset -# -> offset calculation -LOAD_IMMEDIATE_ebx %8 -ADD_ebx_to_eax -LOAD_INTEGER -PUSH_eax #_process_expression1 -LOAD_IMMEDIATE_eax %2 -PUSH_eax #_process_expression2 -CALL_IMMEDIATE %FUNCTION_file_print -POP_ebx # _process_expression_locals -POP_ebx # _process_expression_locals -LOAD_IMMEDIATE_eax &STRING_31 -PUSH_eax #_process_expression1 -LOAD_IMMEDIATE_eax %2 -PUSH_eax #_process_expression2 -CALL_IMMEDIATE %FUNCTION_file_print -POP_ebx # _process_expression_locals -POP_ebx # _process_expression_locals +POP_ebp # Restore old base pointer +POP_edi # Prevent overwrite +PUSH_edi # Prevent overwriting in recursion +PUSH_ebp # Protect the old base pointer +COPY_esp_to_edi # Copy new base pointer +COPY_edi_to_ebp CALL_IMMEDIATE %FUNCTION_line_error +POP_ebp # Restore old base pointer +POP_edi # Prevent overwrite +PUSH_edi # Prevent overwriting in recursion +PUSH_ebp # Protect the old base pointer +COPY_esp_to_edi # Copy new base pointer LOAD_IMMEDIATE_eax %1 PUSH_eax #_process_expression1 +COPY_edi_to_ebp CALL_IMMEDIATE %FUNCTION_exit POP_ebx # _process_expression_locals -POP_ebx # _recursive_statement_locals -POP_ebx # _recursive_statement_locals +POP_ebp # Restore old base pointer +POP_edi # Prevent overwrite +JUMP %_END_IF_require_match_0 +:ELSE_require_match_0 +:_END_IF_require_match_0 +LOAD_IMMEDIATE_eax &GLOBAL_global_token +PUSH_eax #_common_recursion +LOAD_IMMEDIATE_eax &GLOBAL_global_token +LOAD_INTEGER +# looking up offset +LOAD_INTEGER +POP_ebx # _common_recursion +STORE_INTEGER RETURN # Defining function function_call :FUNCTION_function_call -LOAD_IMMEDIATE_eax &STRING_32 +PUSH_edi # Prevent overwriting in recursion +PUSH_ebp # Protect the old base pointer +COPY_esp_to_edi # Copy new base pointer +LOAD_IMMEDIATE_eax &STRING_function_call_0 PUSH_eax #_process_expression1 -LOAD_IMMEDIATE_eax &STRING_33 +LOAD_IMMEDIATE_eax &STRING_function_call_1 PUSH_eax #_process_expression2 +COPY_edi_to_ebp CALL_IMMEDIATE %FUNCTION_require_match POP_ebx # _process_expression_locals POP_ebx # _process_expression_locals +POP_ebp # Restore old base pointer +POP_edi # Prevent overwrite # Defining local passed LOAD_IMMEDIATE_eax %0 PUSH_eax #passed -# IF_function_call_0 - +PUSH_edi # Prevent overwriting in recursion +PUSH_ebp # Protect the old base pointer +COPY_esp_to_edi # Copy new base pointer +LOAD_IMMEDIATE_eax &STRING_function_call_2 +PUSH_eax #_process_expression1 +COPY_edi_to_ebp +CALL_IMMEDIATE %FUNCTION_emit_out +POP_ebx # _process_expression_locals +POP_ebp # Restore old base pointer +POP_edi # Prevent overwrite +PUSH_edi # Prevent overwriting in recursion +PUSH_ebp # Protect the old base pointer +COPY_esp_to_edi # Copy new base pointer +LOAD_IMMEDIATE_eax &STRING_function_call_3 +PUSH_eax #_process_expression1 +COPY_edi_to_ebp +CALL_IMMEDIATE %FUNCTION_emit_out +POP_ebx # _process_expression_locals +POP_ebp # Restore old base pointer +POP_edi # Prevent overwrite +PUSH_edi # Prevent overwriting in recursion +PUSH_ebp # Protect the old base pointer +COPY_esp_to_edi # Copy new base pointer +LOAD_IMMEDIATE_eax &STRING_function_call_4 +PUSH_eax #_process_expression1 +COPY_edi_to_ebp +CALL_IMMEDIATE %FUNCTION_emit_out +POP_ebx # _process_expression_locals +POP_ebp # Restore old base pointer +POP_edi # Prevent overwrite +# IF_function_call_5 LOAD_IMMEDIATE_eax &GLOBAL_global_token LOAD_INTEGER # looking up offset @@ -6425,60 +6035,30 @@ CMP SETNE MOVEZBL TEST -JUMP_EQ %ELSE_function_call_0 - -LOAD_EFFECTIVE_ADDRESS %20 -PUSH_eax #_common_recursion -LOAD_EFFECTIVE_ADDRESS %24 -LOAD_INTEGER -PUSH_eax #_process_expression1 -LOAD_EFFECTIVE_ADDRESS %24 -LOAD_INTEGER -PUSH_eax #_process_expression2 +JUMP_EQ %ELSE_function_call_5 +PUSH_edi # Prevent overwriting in recursion +PUSH_ebp # Protect the old base pointer +COPY_esp_to_edi # Copy new base pointer +COPY_edi_to_ebp CALL_IMMEDIATE %FUNCTION_expression -POP_ebx # _process_expression_locals -POP_ebx # _process_expression_locals -POP_ebx # _common_recursion -STORE_INTEGER -LOAD_EFFECTIVE_ADDRESS %20 -PUSH_eax #_common_recursion -LOAD_IMMEDIATE_eax &STRING_34 +POP_ebp # Restore old base pointer +POP_edi # Prevent overwrite +PUSH_edi # Prevent overwriting in recursion +PUSH_ebp # Protect the old base pointer +COPY_esp_to_edi # Copy new base pointer +LOAD_IMMEDIATE_eax &STRING_function_call_6 PUSH_eax #_process_expression1 -LOAD_EFFECTIVE_ADDRESS %28 -LOAD_INTEGER -PUSH_eax #_process_expression2 -CALL_IMMEDIATE %FUNCTION_emit +COPY_edi_to_ebp +CALL_IMMEDIATE %FUNCTION_emit_out POP_ebx # _process_expression_locals -POP_ebx # _process_expression_locals -POP_ebx # _common_recursion -STORE_INTEGER -LOAD_EFFECTIVE_ADDRESS %16 -LOAD_INTEGER -# looking up offset -# -> offset calculation -LOAD_IMMEDIATE_ebx %24 -ADD_ebx_to_eax -PUSH_eax #_common_recursion -LOAD_EFFECTIVE_ADDRESS %20 -LOAD_INTEGER -# looking up offset -# -> offset calculation -LOAD_IMMEDIATE_ebx %24 -ADD_ebx_to_eax -LOAD_INTEGER -PUSH_eax #_common_recursion -LOAD_IMMEDIATE_eax %1 -POP_ebx # _common_recursion -ADD_ebx_to_eax -POP_ebx # _common_recursion -STORE_INTEGER -LOAD_EFFECTIVE_ADDRESS %0 - +POP_ebp # Restore old base pointer +POP_edi # Prevent overwrite +LOAD_BASE_ADDRESS_eax %-16 PUSH_eax #_common_recursion LOAD_IMMEDIATE_eax %1 POP_ebx # _common_recursion STORE_INTEGER -:WHILE_function_call_1 +:WHILE_function_call_7 LOAD_IMMEDIATE_eax &GLOBAL_global_token LOAD_INTEGER # looking up offset @@ -6498,8 +6078,8 @@ CMP SETE MOVEZBL TEST -JUMP_EQ %END_WHILE_function_call_1 -# THEN_while_function_call_1 +JUMP_EQ %END_WHILE_function_call_7 +# THEN_while_function_call_7 LOAD_IMMEDIATE_eax &GLOBAL_global_token PUSH_eax #_common_recursion LOAD_IMMEDIATE_eax &GLOBAL_global_token @@ -6508,44 +6088,26 @@ LOAD_INTEGER LOAD_INTEGER POP_ebx # _common_recursion STORE_INTEGER -LOAD_EFFECTIVE_ADDRESS %20 -PUSH_eax #_common_recursion -LOAD_EFFECTIVE_ADDRESS %24 -LOAD_INTEGER -PUSH_eax #_process_expression1 -LOAD_EFFECTIVE_ADDRESS %24 -LOAD_INTEGER -PUSH_eax #_process_expression2 +PUSH_edi # Prevent overwriting in recursion +PUSH_ebp # Protect the old base pointer +COPY_esp_to_edi # Copy new base pointer +COPY_edi_to_ebp CALL_IMMEDIATE %FUNCTION_expression -POP_ebx # _process_expression_locals -POP_ebx # _process_expression_locals -POP_ebx # _common_recursion -STORE_INTEGER -LOAD_EFFECTIVE_ADDRESS %20 -PUSH_eax #_common_recursion -LOAD_IMMEDIATE_eax &STRING_35 +POP_ebp # Restore old base pointer +POP_edi # Prevent overwrite +PUSH_edi # Prevent overwriting in recursion +PUSH_ebp # Protect the old base pointer +COPY_esp_to_edi # Copy new base pointer +LOAD_IMMEDIATE_eax &STRING_function_call_8 PUSH_eax #_process_expression1 -LOAD_EFFECTIVE_ADDRESS %28 -LOAD_INTEGER -PUSH_eax #_process_expression2 -CALL_IMMEDIATE %FUNCTION_emit +COPY_edi_to_ebp +CALL_IMMEDIATE %FUNCTION_emit_out POP_ebx # _process_expression_locals -POP_ebx # _process_expression_locals -POP_ebx # _common_recursion -STORE_INTEGER -LOAD_EFFECTIVE_ADDRESS %16 -LOAD_INTEGER -# looking up offset -# -> offset calculation -LOAD_IMMEDIATE_ebx %24 -ADD_ebx_to_eax +POP_ebp # Restore old base pointer +POP_edi # Prevent overwrite +LOAD_BASE_ADDRESS_eax %-16 PUSH_eax #_common_recursion -LOAD_EFFECTIVE_ADDRESS %20 -LOAD_INTEGER -# looking up offset -# -> offset calculation -LOAD_IMMEDIATE_ebx %24 -ADD_ebx_to_eax +LOAD_BASE_ADDRESS_eax %-16 LOAD_INTEGER PUSH_eax #_common_recursion LOAD_IMMEDIATE_eax %1 @@ -6553,217 +6115,133 @@ POP_ebx # _common_recursion ADD_ebx_to_eax POP_ebx # _common_recursion STORE_INTEGER -LOAD_EFFECTIVE_ADDRESS %0 - -PUSH_eax #_common_recursion -LOAD_EFFECTIVE_ADDRESS %4 -LOAD_INTEGER -PUSH_eax #_common_recursion -LOAD_IMMEDIATE_eax %1 -POP_ebx # _common_recursion -ADD_ebx_to_eax -POP_ebx # _common_recursion -STORE_INTEGER -JUMP %WHILE_function_call_1 -:END_WHILE_function_call_1 -JUMP %_END_IF_function_call_0 - -:ELSE_function_call_0 - -:_END_IF_function_call_0 - -LOAD_IMMEDIATE_eax &STRING_36 +JUMP %WHILE_function_call_7 +:END_WHILE_function_call_7 +JUMP %_END_IF_function_call_5 +:ELSE_function_call_5 +:_END_IF_function_call_5 +PUSH_edi # Prevent overwriting in recursion +PUSH_ebp # Protect the old base pointer +COPY_esp_to_edi # Copy new base pointer +LOAD_IMMEDIATE_eax &STRING_function_call_9 PUSH_eax #_process_expression1 -LOAD_IMMEDIATE_eax &STRING_37 +LOAD_IMMEDIATE_eax &STRING_function_call_10 PUSH_eax #_process_expression2 +COPY_edi_to_ebp CALL_IMMEDIATE %FUNCTION_require_match POP_ebx # _process_expression_locals POP_ebx # _process_expression_locals -# IF_function_call_2 -LOAD_IMMEDIATE_eax %2 -PUSH_eax #_common_recursion -LOAD_EFFECTIVE_ADDRESS %12 -LOAD_INTEGER -POP_ebx # _common_recursion -CMP -SETE -MOVEZBL -TEST -JUMP_EQ %ELSE_function_call_2 -# Defining local a -LOAD_EFFECTIVE_ADDRESS %12 -LOAD_INTEGER -PUSH_eax #_process_expression1 -LOAD_EFFECTIVE_ADDRESS %20 -LOAD_INTEGER -# looking up offset -# -> offset calculation -LOAD_IMMEDIATE_ebx %20 -ADD_ebx_to_eax -LOAD_INTEGER -PUSH_eax #_process_expression2 -CALL_IMMEDIATE %FUNCTION_sym_lookup -POP_ebx # _process_expression_locals -POP_ebx # _process_expression_locals -PUSH_eax #a -LOAD_EFFECTIVE_ADDRESS %24 -PUSH_eax #_common_recursion -LOAD_IMMEDIATE_eax &STRING_38 -PUSH_eax #_process_expression1 -LOAD_EFFECTIVE_ADDRESS %32 -LOAD_INTEGER -PUSH_eax #_process_expression2 -CALL_IMMEDIATE %FUNCTION_emit -POP_ebx # _process_expression_locals -POP_ebx # _process_expression_locals -POP_ebx # _common_recursion -STORE_INTEGER -LOAD_EFFECTIVE_ADDRESS %24 -PUSH_eax #_common_recursion -LOAD_EFFECTIVE_ADDRESS %4 -LOAD_INTEGER -PUSH_eax #_process_expression1 -LOAD_EFFECTIVE_ADDRESS %28 -LOAD_INTEGER -PUSH_eax #_process_expression2 -CALL_IMMEDIATE %FUNCTION_stack_index -POP_ebx # _process_expression_locals -POP_ebx # _process_expression_locals -PUSH_eax #_process_expression1 -CALL_IMMEDIATE %FUNCTION_numerate_number -POP_ebx # _process_expression_locals -PUSH_eax #_process_expression1 -LOAD_EFFECTIVE_ADDRESS %32 -LOAD_INTEGER -PUSH_eax #_process_expression2 -CALL_IMMEDIATE %FUNCTION_emit -POP_ebx # _process_expression_locals -POP_ebx # _process_expression_locals -POP_ebx # _common_recursion -STORE_INTEGER -LOAD_EFFECTIVE_ADDRESS %24 -PUSH_eax #_common_recursion -LOAD_IMMEDIATE_eax &STRING_39 -PUSH_eax #_process_expression1 -LOAD_EFFECTIVE_ADDRESS %32 -LOAD_INTEGER -PUSH_eax #_process_expression2 -CALL_IMMEDIATE %FUNCTION_emit -POP_ebx # _process_expression_locals -POP_ebx # _process_expression_locals -POP_ebx # _common_recursion -STORE_INTEGER -POP_ebx # _recursive_statement_locals -JUMP %_END_IF_function_call_2 -:ELSE_function_call_2 -# IF_function_call_3 +POP_ebp # Restore old base pointer +POP_edi # Prevent overwrite +# IF_function_call_11 LOAD_IMMEDIATE_eax %1 PUSH_eax #_common_recursion -LOAD_EFFECTIVE_ADDRESS %12 +LOAD_BASE_ADDRESS_eax %-8 LOAD_INTEGER POP_ebx # _common_recursion CMP SETE MOVEZBL TEST -JUMP_EQ %ELSE_function_call_3 -# Defining local a -LOAD_EFFECTIVE_ADDRESS %12 +JUMP_EQ %ELSE_function_call_11 +PUSH_edi # Prevent overwriting in recursion +PUSH_ebp # Protect the old base pointer +COPY_esp_to_edi # Copy new base pointer +LOAD_IMMEDIATE_eax &STRING_function_call_12 +PUSH_eax #_process_expression1 +COPY_edi_to_ebp +CALL_IMMEDIATE %FUNCTION_emit_out +POP_ebx # _process_expression_locals +POP_ebp # Restore old base pointer +POP_edi # Prevent overwrite +PUSH_edi # Prevent overwriting in recursion +PUSH_ebp # Protect the old base pointer +COPY_esp_to_edi # Copy new base pointer +LOAD_BASE_ADDRESS_eax %-4 LOAD_INTEGER PUSH_eax #_process_expression1 -LOAD_EFFECTIVE_ADDRESS %20 -LOAD_INTEGER -# looking up offset -# -> offset calculation -LOAD_IMMEDIATE_ebx %16 -ADD_ebx_to_eax -LOAD_INTEGER -PUSH_eax #_process_expression2 -CALL_IMMEDIATE %FUNCTION_sym_lookup +COPY_edi_to_ebp +CALL_IMMEDIATE %FUNCTION_emit_out POP_ebx # _process_expression_locals -POP_ebx # _process_expression_locals -PUSH_eax #a -LOAD_EFFECTIVE_ADDRESS %24 -PUSH_eax #_common_recursion -LOAD_IMMEDIATE_eax &STRING_40 +POP_ebp # Restore old base pointer +POP_edi # Prevent overwrite +PUSH_edi # Prevent overwriting in recursion +PUSH_ebp # Protect the old base pointer +COPY_esp_to_edi # Copy new base pointer +LOAD_IMMEDIATE_eax &STRING_function_call_13 PUSH_eax #_process_expression1 -LOAD_EFFECTIVE_ADDRESS %32 -LOAD_INTEGER -PUSH_eax #_process_expression2 -CALL_IMMEDIATE %FUNCTION_emit +COPY_edi_to_ebp +CALL_IMMEDIATE %FUNCTION_emit_out POP_ebx # _process_expression_locals +POP_ebp # Restore old base pointer +POP_edi # Prevent overwrite +PUSH_edi # Prevent overwriting in recursion +PUSH_ebp # Protect the old base pointer +COPY_esp_to_edi # Copy new base pointer +LOAD_IMMEDIATE_eax &STRING_function_call_14 +PUSH_eax #_process_expression1 +COPY_edi_to_ebp +CALL_IMMEDIATE %FUNCTION_emit_out POP_ebx # _process_expression_locals -POP_ebx # _common_recursion -STORE_INTEGER -LOAD_EFFECTIVE_ADDRESS %24 -PUSH_eax #_common_recursion -LOAD_EFFECTIVE_ADDRESS %4 +POP_ebp # Restore old base pointer +POP_edi # Prevent overwrite +PUSH_edi # Prevent overwriting in recursion +PUSH_ebp # Protect the old base pointer +COPY_esp_to_edi # Copy new base pointer +LOAD_IMMEDIATE_eax &STRING_function_call_15 +PUSH_eax #_process_expression1 +COPY_edi_to_ebp +CALL_IMMEDIATE %FUNCTION_emit_out +POP_ebx # _process_expression_locals +POP_ebp # Restore old base pointer +POP_edi # Prevent overwrite +JUMP %_END_IF_function_call_11 +:ELSE_function_call_11 +PUSH_edi # Prevent overwriting in recursion +PUSH_ebp # Protect the old base pointer +COPY_esp_to_edi # Copy new base pointer +LOAD_IMMEDIATE_eax &STRING_function_call_16 +PUSH_eax #_process_expression1 +COPY_edi_to_ebp +CALL_IMMEDIATE %FUNCTION_emit_out +POP_ebx # _process_expression_locals +POP_ebp # Restore old base pointer +POP_edi # Prevent overwrite +PUSH_edi # Prevent overwriting in recursion +PUSH_ebp # Protect the old base pointer +COPY_esp_to_edi # Copy new base pointer +LOAD_IMMEDIATE_eax &STRING_function_call_17 +PUSH_eax #_process_expression1 +COPY_edi_to_ebp +CALL_IMMEDIATE %FUNCTION_emit_out +POP_ebx # _process_expression_locals +POP_ebp # Restore old base pointer +POP_edi # Prevent overwrite +PUSH_edi # Prevent overwriting in recursion +PUSH_ebp # Protect the old base pointer +COPY_esp_to_edi # Copy new base pointer +LOAD_BASE_ADDRESS_eax %-4 LOAD_INTEGER PUSH_eax #_process_expression1 -LOAD_EFFECTIVE_ADDRESS %28 -LOAD_INTEGER -PUSH_eax #_process_expression2 -CALL_IMMEDIATE %FUNCTION_stack_index -POP_ebx # _process_expression_locals +COPY_edi_to_ebp +CALL_IMMEDIATE %FUNCTION_emit_out POP_ebx # _process_expression_locals +POP_ebp # Restore old base pointer +POP_edi # Prevent overwrite +PUSH_edi # Prevent overwriting in recursion +PUSH_ebp # Protect the old base pointer +COPY_esp_to_edi # Copy new base pointer +LOAD_IMMEDIATE_eax &STRING_function_call_18 PUSH_eax #_process_expression1 -CALL_IMMEDIATE %FUNCTION_numerate_number +COPY_edi_to_ebp +CALL_IMMEDIATE %FUNCTION_emit_out POP_ebx # _process_expression_locals -PUSH_eax #_process_expression1 -LOAD_EFFECTIVE_ADDRESS %32 -LOAD_INTEGER -PUSH_eax #_process_expression2 -CALL_IMMEDIATE %FUNCTION_emit -POP_ebx # _process_expression_locals -POP_ebx # _process_expression_locals -POP_ebx # _common_recursion -STORE_INTEGER -LOAD_EFFECTIVE_ADDRESS %24 -PUSH_eax #_common_recursion -LOAD_IMMEDIATE_eax &STRING_41 -PUSH_eax #_process_expression1 -LOAD_EFFECTIVE_ADDRESS %32 -LOAD_INTEGER -PUSH_eax #_process_expression2 -CALL_IMMEDIATE %FUNCTION_emit -POP_ebx # _process_expression_locals -POP_ebx # _process_expression_locals -POP_ebx # _common_recursion -STORE_INTEGER -POP_ebx # _recursive_statement_locals -JUMP %_END_IF_function_call_3 -:ELSE_function_call_3 -LOAD_EFFECTIVE_ADDRESS %20 -PUSH_eax #_common_recursion -LOAD_IMMEDIATE_eax &STRING_42 -PUSH_eax #_process_expression1 -LOAD_EFFECTIVE_ADDRESS %20 -LOAD_INTEGER -PUSH_eax #_process_expression1 -LOAD_IMMEDIATE_eax %10 -PUSH_eax #_process_expression2 -CALL_IMMEDIATE %FUNCTION_postpend_char -POP_ebx # _process_expression_locals -POP_ebx # _process_expression_locals -PUSH_eax #_process_expression2 -CALL_IMMEDIATE %FUNCTION_prepend_string -POP_ebx # _process_expression_locals -POP_ebx # _process_expression_locals -PUSH_eax #_process_expression1 -LOAD_EFFECTIVE_ADDRESS %28 -LOAD_INTEGER -PUSH_eax #_process_expression2 -CALL_IMMEDIATE %FUNCTION_emit -POP_ebx # _process_expression_locals -POP_ebx # _process_expression_locals -POP_ebx # _common_recursion -STORE_INTEGER -:_END_IF_function_call_3 -:_END_IF_function_call_2 -# FOR_initialization_function_call_4 -:FOR_function_call_4 -LOAD_EFFECTIVE_ADDRESS %0 - +POP_ebp # Restore old base pointer +POP_edi # Prevent overwrite +:_END_IF_function_call_11 +# FOR_initialization_function_call_19 +:FOR_function_call_19 +LOAD_BASE_ADDRESS_eax %-16 LOAD_INTEGER PUSH_eax #_common_recursion LOAD_IMMEDIATE_eax %0 @@ -6772,13 +6250,12 @@ CMP SETG MOVEZBL TEST -JUMP_EQ %FOR_END_function_call_4 -JUMP %FOR_THEN_function_call_4 -:FOR_ITER_function_call_4 -LOAD_EFFECTIVE_ADDRESS %0 - +JUMP_EQ %FOR_END_function_call_19 +JUMP %FOR_THEN_function_call_19 +:FOR_ITER_function_call_19 +LOAD_BASE_ADDRESS_eax %-16 PUSH_eax #_common_recursion -LOAD_EFFECTIVE_ADDRESS %4 +LOAD_BASE_ADDRESS_eax %-16 LOAD_INTEGER PUSH_eax #_common_recursion LOAD_IMMEDIATE_eax %1 @@ -6787,49 +6264,802 @@ SUBTRACT_eax_from_ebx_into_ebx MOVE_ebx_to_eax POP_ebx # _common_recursion STORE_INTEGER -JUMP %FOR_function_call_4 -:FOR_THEN_function_call_4 -LOAD_EFFECTIVE_ADDRESS %20 -PUSH_eax #_common_recursion -LOAD_IMMEDIATE_eax &STRING_43 +JUMP %FOR_function_call_19 +:FOR_THEN_function_call_19 +PUSH_edi # Prevent overwriting in recursion +PUSH_ebp # Protect the old base pointer +COPY_esp_to_edi # Copy new base pointer +LOAD_IMMEDIATE_eax &STRING_function_call_20 PUSH_eax #_process_expression1 -LOAD_EFFECTIVE_ADDRESS %28 +COPY_edi_to_ebp +CALL_IMMEDIATE %FUNCTION_emit_out +POP_ebx # _process_expression_locals +POP_ebp # Restore old base pointer +POP_edi # Prevent overwrite +JUMP %FOR_ITER_function_call_19 +:FOR_END_function_call_19 +PUSH_edi # Prevent overwriting in recursion +PUSH_ebp # Protect the old base pointer +COPY_esp_to_edi # Copy new base pointer +LOAD_IMMEDIATE_eax &STRING_function_call_21 +PUSH_eax #_process_expression1 +COPY_edi_to_ebp +CALL_IMMEDIATE %FUNCTION_emit_out +POP_ebx # _process_expression_locals +POP_ebp # Restore old base pointer +POP_edi # Prevent overwrite +PUSH_edi # Prevent overwriting in recursion +PUSH_ebp # Protect the old base pointer +COPY_esp_to_edi # Copy new base pointer +LOAD_IMMEDIATE_eax &STRING_function_call_22 +PUSH_eax #_process_expression1 +COPY_edi_to_ebp +CALL_IMMEDIATE %FUNCTION_emit_out +POP_ebx # _process_expression_locals +POP_ebp # Restore old base pointer +POP_edi # Prevent overwrite +POP_ebx # _recursive_statement_locals +RETURN +# Defining function constant_load +:FUNCTION_constant_load +PUSH_edi # Prevent overwriting in recursion +PUSH_ebp # Protect the old base pointer +COPY_esp_to_edi # Copy new base pointer +LOAD_IMMEDIATE_eax &STRING_constant_load_0 +PUSH_eax #_process_expression1 +COPY_edi_to_ebp +CALL_IMMEDIATE %FUNCTION_emit_out +POP_ebx # _process_expression_locals +POP_ebp # Restore old base pointer +POP_edi # Prevent overwrite +PUSH_edi # Prevent overwriting in recursion +PUSH_ebp # Protect the old base pointer +COPY_esp_to_edi # Copy new base pointer +LOAD_BASE_ADDRESS_eax %-4 +LOAD_INTEGER +# looking up offset +# -> offset calculation +LOAD_IMMEDIATE_ebx %16 +ADD_ebx_to_eax +LOAD_INTEGER +# looking up offset +# -> offset calculation +LOAD_IMMEDIATE_ebx %8 +ADD_ebx_to_eax +LOAD_INTEGER +PUSH_eax #_process_expression1 +COPY_edi_to_ebp +CALL_IMMEDIATE %FUNCTION_emit_out +POP_ebx # _process_expression_locals +POP_ebp # Restore old base pointer +POP_edi # Prevent overwrite +PUSH_edi # Prevent overwriting in recursion +PUSH_ebp # Protect the old base pointer +COPY_esp_to_edi # Copy new base pointer +LOAD_IMMEDIATE_eax &STRING_constant_load_1 +PUSH_eax #_process_expression1 +COPY_edi_to_ebp +CALL_IMMEDIATE %FUNCTION_emit_out +POP_ebx # _process_expression_locals +POP_ebp # Restore old base pointer +POP_edi # Prevent overwrite +RETURN +# Defining function variable_load +:FUNCTION_variable_load +# IF_variable_load_0 +PUSH_edi # Prevent overwriting in recursion +PUSH_ebp # Protect the old base pointer +COPY_esp_to_edi # Copy new base pointer +LOAD_IMMEDIATE_eax &STRING_variable_load_1 +PUSH_eax #_process_expression1 +LOAD_BASE_ADDRESS_eax %-4 +LOAD_INTEGER +# looking up offset +# -> offset calculation +LOAD_IMMEDIATE_ebx %12 +ADD_ebx_to_eax +LOAD_INTEGER +# looking up offset +# -> offset calculation +LOAD_IMMEDIATE_ebx %24 +ADD_ebx_to_eax LOAD_INTEGER PUSH_eax #_process_expression2 +COPY_edi_to_ebp +CALL_IMMEDIATE %FUNCTION_match +POP_ebx # _process_expression_locals +POP_ebx # _process_expression_locals +POP_ebp # Restore old base pointer +POP_edi # Prevent overwrite +PUSH_eax #_common_recursion +PUSH_edi # Prevent overwriting in recursion +PUSH_ebp # Protect the old base pointer +COPY_esp_to_edi # Copy new base pointer +LOAD_IMMEDIATE_eax &STRING_variable_load_2 +PUSH_eax #_process_expression1 +LOAD_IMMEDIATE_eax &GLOBAL_global_token +LOAD_INTEGER +# looking up offset +# -> offset calculation +LOAD_IMMEDIATE_ebx %8 +ADD_ebx_to_eax +LOAD_INTEGER +PUSH_eax #_process_expression2 +COPY_edi_to_ebp +CALL_IMMEDIATE %FUNCTION_match +POP_ebx # _process_expression_locals +POP_ebx # _process_expression_locals +POP_ebp # Restore old base pointer +POP_edi # Prevent overwrite +POP_ebx # _common_recursion +AND_eax_ebx +TEST +JUMP_EQ %ELSE_variable_load_0 +PUSH_edi # Prevent overwriting in recursion +PUSH_ebp # Protect the old base pointer +COPY_esp_to_edi # Copy new base pointer +PUSH_edi # Prevent overwriting in recursion +PUSH_ebp # Protect the old base pointer +COPY_esp_to_edi # Copy new base pointer +LOAD_BASE_ADDRESS_eax %-4 +LOAD_INTEGER +# looking up offset +# -> offset calculation +LOAD_IMMEDIATE_ebx %16 +ADD_ebx_to_eax +LOAD_INTEGER +PUSH_eax #_process_expression1 +COPY_edi_to_ebp +CALL_IMMEDIATE %FUNCTION_numerate_number +POP_ebx # _process_expression_locals +POP_ebp # Restore old base pointer +POP_edi # Prevent overwrite +PUSH_eax #_process_expression1 +LOAD_IMMEDIATE_eax %1 +PUSH_eax #_process_expression2 +COPY_edi_to_ebp +CALL_IMMEDIATE %FUNCTION_function_call +POP_ebx # _process_expression_locals +POP_ebx # _process_expression_locals +POP_ebp # Restore old base pointer +POP_edi # Prevent overwrite +RETURN +JUMP %_END_IF_variable_load_0 +:ELSE_variable_load_0 +:_END_IF_variable_load_0 +LOAD_IMMEDIATE_eax &GLOBAL_current_target +PUSH_eax #_common_recursion +LOAD_BASE_ADDRESS_eax %-4 +LOAD_INTEGER +# looking up offset +# -> offset calculation +LOAD_IMMEDIATE_ebx %12 +ADD_ebx_to_eax +LOAD_INTEGER +POP_ebx # _common_recursion +STORE_INTEGER +PUSH_edi # Prevent overwriting in recursion +PUSH_ebp # Protect the old base pointer +COPY_esp_to_edi # Copy new base pointer +LOAD_IMMEDIATE_eax &STRING_variable_load_3 +PUSH_eax #_process_expression1 +COPY_edi_to_ebp +CALL_IMMEDIATE %FUNCTION_emit_out +POP_ebx # _process_expression_locals +POP_ebp # Restore old base pointer +POP_edi # Prevent overwrite +PUSH_edi # Prevent overwriting in recursion +PUSH_ebp # Protect the old base pointer +COPY_esp_to_edi # Copy new base pointer +PUSH_edi # Prevent overwriting in recursion +PUSH_ebp # Protect the old base pointer +COPY_esp_to_edi # Copy new base pointer +LOAD_BASE_ADDRESS_eax %-4 +LOAD_INTEGER +# looking up offset +# -> offset calculation +LOAD_IMMEDIATE_ebx %16 +ADD_ebx_to_eax +LOAD_INTEGER +PUSH_eax #_process_expression1 +COPY_edi_to_ebp +CALL_IMMEDIATE %FUNCTION_numerate_number +POP_ebx # _process_expression_locals +POP_ebp # Restore old base pointer +POP_edi # Prevent overwrite +PUSH_eax #_process_expression1 +COPY_edi_to_ebp +CALL_IMMEDIATE %FUNCTION_emit_out +POP_ebx # _process_expression_locals +POP_ebp # Restore old base pointer +POP_edi # Prevent overwrite +PUSH_edi # Prevent overwriting in recursion +PUSH_ebp # Protect the old base pointer +COPY_esp_to_edi # Copy new base pointer +LOAD_IMMEDIATE_eax &STRING_variable_load_4 +PUSH_eax #_process_expression1 +COPY_edi_to_ebp +CALL_IMMEDIATE %FUNCTION_emit_out +POP_ebx # _process_expression_locals +POP_ebp # Restore old base pointer +POP_edi # Prevent overwrite +# IF_variable_load_5 +PUSH_edi # Prevent overwriting in recursion +PUSH_ebp # Protect the old base pointer +COPY_esp_to_edi # Copy new base pointer +LOAD_IMMEDIATE_eax &STRING_variable_load_6 +PUSH_eax #_process_expression1 +LOAD_IMMEDIATE_eax &GLOBAL_global_token +LOAD_INTEGER +# looking up offset +# -> offset calculation +LOAD_IMMEDIATE_ebx %8 +ADD_ebx_to_eax +LOAD_INTEGER +PUSH_eax #_process_expression2 +COPY_edi_to_ebp +CALL_IMMEDIATE %FUNCTION_match +POP_ebx # _process_expression_locals +POP_ebx # _process_expression_locals +POP_ebp # Restore old base pointer +POP_edi # Prevent overwrite +TEST +JUMP_EQ %ELSE_variable_load_5 +RETURN +JUMP %_END_IF_variable_load_5 +:ELSE_variable_load_5 +:_END_IF_variable_load_5 +# IF_variable_load_7 +PUSH_edi # Prevent overwriting in recursion +PUSH_ebp # Protect the old base pointer +COPY_esp_to_edi # Copy new base pointer +LOAD_IMMEDIATE_eax &STRING_variable_load_8 +PUSH_eax #_process_expression1 +LOAD_BASE_ADDRESS_eax %-4 +LOAD_INTEGER +# looking up offset +# -> offset calculation +LOAD_IMMEDIATE_ebx %12 +ADD_ebx_to_eax +LOAD_INTEGER +# looking up offset +# -> offset calculation +LOAD_IMMEDIATE_ebx %24 +ADD_ebx_to_eax +LOAD_INTEGER +PUSH_eax #_process_expression2 +COPY_edi_to_ebp +CALL_IMMEDIATE %FUNCTION_match +POP_ebx # _process_expression_locals +POP_ebx # _process_expression_locals +POP_ebp # Restore old base pointer +POP_edi # Prevent overwrite +TEST +JUMP_EQ %ELSE_variable_load_7 +RETURN +JUMP %_END_IF_variable_load_7 +:ELSE_variable_load_7 +:_END_IF_variable_load_7 +PUSH_edi # Prevent overwriting in recursion +PUSH_ebp # Protect the old base pointer +COPY_esp_to_edi # Copy new base pointer +LOAD_IMMEDIATE_eax &STRING_variable_load_9 +PUSH_eax #_process_expression1 +COPY_edi_to_ebp +CALL_IMMEDIATE %FUNCTION_emit_out +POP_ebx # _process_expression_locals +POP_ebp # Restore old base pointer +POP_edi # Prevent overwrite +RETURN +# Defining function function_load +:FUNCTION_function_load +# IF_function_load_0 +PUSH_edi # Prevent overwriting in recursion +PUSH_ebp # Protect the old base pointer +COPY_esp_to_edi # Copy new base pointer +LOAD_IMMEDIATE_eax &STRING_function_load_1 +PUSH_eax #_process_expression1 +LOAD_IMMEDIATE_eax &GLOBAL_global_token +LOAD_INTEGER +# looking up offset +# -> offset calculation +LOAD_IMMEDIATE_ebx %8 +ADD_ebx_to_eax +LOAD_INTEGER +PUSH_eax #_process_expression2 +COPY_edi_to_ebp +CALL_IMMEDIATE %FUNCTION_match +POP_ebx # _process_expression_locals +POP_ebx # _process_expression_locals +POP_ebp # Restore old base pointer +POP_edi # Prevent overwrite +TEST +JUMP_EQ %ELSE_function_load_0 +PUSH_edi # Prevent overwriting in recursion +PUSH_ebp # Protect the old base pointer +COPY_esp_to_edi # Copy new base pointer +LOAD_BASE_ADDRESS_eax %-4 +LOAD_INTEGER +# looking up offset +# -> offset calculation +LOAD_IMMEDIATE_ebx %8 +ADD_ebx_to_eax +LOAD_INTEGER +PUSH_eax #_process_expression1 +LOAD_IMMEDIATE_eax %0 +PUSH_eax #_process_expression2 +COPY_edi_to_ebp +CALL_IMMEDIATE %FUNCTION_function_call +POP_ebx # _process_expression_locals +POP_ebx # _process_expression_locals +POP_ebp # Restore old base pointer +POP_edi # Prevent overwrite +RETURN +JUMP %_END_IF_function_load_0 +:ELSE_function_load_0 +:_END_IF_function_load_0 +PUSH_edi # Prevent overwriting in recursion +PUSH_ebp # Protect the old base pointer +COPY_esp_to_edi # Copy new base pointer +LOAD_IMMEDIATE_eax &STRING_function_load_2 +PUSH_eax #_process_expression1 +COPY_edi_to_ebp +CALL_IMMEDIATE %FUNCTION_emit_out +POP_ebx # _process_expression_locals +POP_ebp # Restore old base pointer +POP_edi # Prevent overwrite +PUSH_edi # Prevent overwriting in recursion +PUSH_ebp # Protect the old base pointer +COPY_esp_to_edi # Copy new base pointer +LOAD_BASE_ADDRESS_eax %-4 +LOAD_INTEGER +# looking up offset +# -> offset calculation +LOAD_IMMEDIATE_ebx %8 +ADD_ebx_to_eax +LOAD_INTEGER +PUSH_eax #_process_expression1 +COPY_edi_to_ebp +CALL_IMMEDIATE %FUNCTION_emit_out +POP_ebx # _process_expression_locals +POP_ebp # Restore old base pointer +POP_edi # Prevent overwrite +PUSH_edi # Prevent overwriting in recursion +PUSH_ebp # Protect the old base pointer +COPY_esp_to_edi # Copy new base pointer +LOAD_IMMEDIATE_eax &STRING_function_load_3 +PUSH_eax #_process_expression1 +COPY_edi_to_ebp +CALL_IMMEDIATE %FUNCTION_emit_out +POP_ebx # _process_expression_locals +POP_ebp # Restore old base pointer +POP_edi # Prevent overwrite +RETURN +# Defining function global_load +:FUNCTION_global_load +LOAD_IMMEDIATE_eax &GLOBAL_current_target +PUSH_eax #_common_recursion +LOAD_BASE_ADDRESS_eax %-4 +LOAD_INTEGER +# looking up offset +# -> offset calculation +LOAD_IMMEDIATE_ebx %12 +ADD_ebx_to_eax +LOAD_INTEGER +POP_ebx # _common_recursion +STORE_INTEGER +PUSH_edi # Prevent overwriting in recursion +PUSH_ebp # Protect the old base pointer +COPY_esp_to_edi # Copy new base pointer +LOAD_IMMEDIATE_eax &STRING_global_load_0 +PUSH_eax #_process_expression1 +COPY_edi_to_ebp +CALL_IMMEDIATE %FUNCTION_emit_out +POP_ebx # _process_expression_locals +POP_ebp # Restore old base pointer +POP_edi # Prevent overwrite +PUSH_edi # Prevent overwriting in recursion +PUSH_ebp # Protect the old base pointer +COPY_esp_to_edi # Copy new base pointer +LOAD_BASE_ADDRESS_eax %-4 +LOAD_INTEGER +# looking up offset +# -> offset calculation +LOAD_IMMEDIATE_ebx %8 +ADD_ebx_to_eax +LOAD_INTEGER +PUSH_eax #_process_expression1 +COPY_edi_to_ebp +CALL_IMMEDIATE %FUNCTION_emit_out +POP_ebx # _process_expression_locals +POP_ebp # Restore old base pointer +POP_edi # Prevent overwrite +PUSH_edi # Prevent overwriting in recursion +PUSH_ebp # Protect the old base pointer +COPY_esp_to_edi # Copy new base pointer +LOAD_IMMEDIATE_eax &STRING_global_load_1 +PUSH_eax #_process_expression1 +COPY_edi_to_ebp +CALL_IMMEDIATE %FUNCTION_emit_out +POP_ebx # _process_expression_locals +POP_ebp # Restore old base pointer +POP_edi # Prevent overwrite +# IF_global_load_2 +LOAD_IMMEDIATE_eax %1 +PUSH_eax #_common_recursion +PUSH_edi # Prevent overwriting in recursion +PUSH_ebp # Protect the old base pointer +COPY_esp_to_edi # Copy new base pointer +LOAD_IMMEDIATE_eax &STRING_global_load_3 +PUSH_eax #_process_expression1 +LOAD_IMMEDIATE_eax &GLOBAL_global_token +LOAD_INTEGER +# looking up offset +# -> offset calculation +LOAD_IMMEDIATE_ebx %8 +ADD_ebx_to_eax +LOAD_INTEGER +PUSH_eax #_process_expression2 +COPY_edi_to_ebp +CALL_IMMEDIATE %FUNCTION_match +POP_ebx # _process_expression_locals +POP_ebx # _process_expression_locals +POP_ebp # Restore old base pointer +POP_edi # Prevent overwrite +POP_ebx # _common_recursion +XOR_ebx_eax_into_eax +TEST +JUMP_EQ %ELSE_global_load_2 +PUSH_edi # Prevent overwriting in recursion +PUSH_ebp # Protect the old base pointer +COPY_esp_to_edi # Copy new base pointer +LOAD_IMMEDIATE_eax &STRING_global_load_4 +PUSH_eax #_process_expression1 +COPY_edi_to_ebp +CALL_IMMEDIATE %FUNCTION_emit_out +POP_ebx # _process_expression_locals +POP_ebp # Restore old base pointer +POP_edi # Prevent overwrite +JUMP %_END_IF_global_load_2 +:ELSE_global_load_2 +:_END_IF_global_load_2 +RETURN +# Defining function primary_expr_failure +:FUNCTION_primary_expr_failure +PUSH_edi # Prevent overwriting in recursion +PUSH_ebp # Protect the old base pointer +COPY_esp_to_edi # Copy new base pointer +LOAD_IMMEDIATE_eax &STRING_primary_expr_failure_0 +PUSH_eax #_process_expression1 +LOAD_IMMEDIATE_eax %2 +PUSH_eax #_process_expression2 +COPY_edi_to_ebp +CALL_IMMEDIATE %FUNCTION_file_print +POP_ebx # _process_expression_locals +POP_ebx # _process_expression_locals +POP_ebp # Restore old base pointer +POP_edi # Prevent overwrite +PUSH_edi # Prevent overwriting in recursion +PUSH_ebp # Protect the old base pointer +COPY_esp_to_edi # Copy new base pointer +LOAD_IMMEDIATE_eax &GLOBAL_global_token +LOAD_INTEGER +# looking up offset +# -> offset calculation +LOAD_IMMEDIATE_ebx %8 +ADD_ebx_to_eax +LOAD_INTEGER +PUSH_eax #_process_expression1 +LOAD_IMMEDIATE_eax %2 +PUSH_eax #_process_expression2 +COPY_edi_to_ebp +CALL_IMMEDIATE %FUNCTION_file_print +POP_ebx # _process_expression_locals +POP_ebx # _process_expression_locals +POP_ebp # Restore old base pointer +POP_edi # Prevent overwrite +PUSH_edi # Prevent overwriting in recursion +PUSH_ebp # Protect the old base pointer +COPY_esp_to_edi # Copy new base pointer +LOAD_IMMEDIATE_eax &STRING_primary_expr_failure_1 +PUSH_eax #_process_expression1 +LOAD_IMMEDIATE_eax %2 +PUSH_eax #_process_expression2 +COPY_edi_to_ebp +CALL_IMMEDIATE %FUNCTION_file_print +POP_ebx # _process_expression_locals +POP_ebx # _process_expression_locals +POP_ebp # Restore old base pointer +POP_edi # Prevent overwrite +PUSH_edi # Prevent overwriting in recursion +PUSH_ebp # Protect the old base pointer +COPY_esp_to_edi # Copy new base pointer +COPY_edi_to_ebp +CALL_IMMEDIATE %FUNCTION_line_error +POP_ebp # Restore old base pointer +POP_edi # Prevent overwrite +PUSH_edi # Prevent overwriting in recursion +PUSH_ebp # Protect the old base pointer +COPY_esp_to_edi # Copy new base pointer +LOAD_IMMEDIATE_eax %1 +PUSH_eax #_process_expression1 +COPY_edi_to_ebp +CALL_IMMEDIATE %FUNCTION_exit +POP_ebx # _process_expression_locals +POP_ebp # Restore old base pointer +POP_edi # Prevent overwrite +RETURN +# Defining function primary_expr_string +:FUNCTION_primary_expr_string +# Defining local number_string +PUSH_edi # Prevent overwriting in recursion +PUSH_ebp # Protect the old base pointer +COPY_esp_to_edi # Copy new base pointer +LOAD_IMMEDIATE_eax &GLOBAL_current_count +LOAD_INTEGER +PUSH_eax #_process_expression1 +COPY_edi_to_ebp +CALL_IMMEDIATE %FUNCTION_numerate_number +POP_ebx # _process_expression_locals +POP_ebp # Restore old base pointer +POP_edi # Prevent overwrite +PUSH_eax #number_string +LOAD_IMMEDIATE_eax &GLOBAL_current_count +PUSH_eax #_common_recursion +LOAD_IMMEDIATE_eax &GLOBAL_current_count +LOAD_INTEGER +PUSH_eax #_common_recursion +LOAD_IMMEDIATE_eax %1 +POP_ebx # _common_recursion +ADD_ebx_to_eax +POP_ebx # _common_recursion +STORE_INTEGER +PUSH_edi # Prevent overwriting in recursion +PUSH_ebp # Protect the old base pointer +COPY_esp_to_edi # Copy new base pointer +LOAD_IMMEDIATE_eax &STRING_primary_expr_string_0 +PUSH_eax #_process_expression1 +COPY_edi_to_ebp +CALL_IMMEDIATE %FUNCTION_emit_out +POP_ebx # _process_expression_locals +POP_ebp # Restore old base pointer +POP_edi # Prevent overwrite +PUSH_edi # Prevent overwriting in recursion +PUSH_ebp # Protect the old base pointer +COPY_esp_to_edi # Copy new base pointer +LOAD_IMMEDIATE_eax &GLOBAL_function +LOAD_INTEGER +# looking up offset +# -> offset calculation +LOAD_IMMEDIATE_ebx %8 +ADD_ebx_to_eax +LOAD_INTEGER +PUSH_eax #_process_expression1 +LOAD_BASE_ADDRESS_eax %-8 +LOAD_INTEGER +PUSH_eax #_process_expression2 +COPY_edi_to_ebp +CALL_IMMEDIATE %FUNCTION_uniqueID_out +POP_ebx # _process_expression_locals +POP_ebx # _process_expression_locals +POP_ebp # Restore old base pointer +POP_edi # Prevent overwrite +LOAD_IMMEDIATE_eax &GLOBAL_strings_list +PUSH_eax #_common_recursion +PUSH_edi # Prevent overwriting in recursion +PUSH_ebp # Protect the old base pointer +COPY_esp_to_edi # Copy new base pointer +LOAD_IMMEDIATE_eax &STRING_primary_expr_string_1 +PUSH_eax #_process_expression1 +LOAD_IMMEDIATE_eax &GLOBAL_strings_list +LOAD_INTEGER +PUSH_eax #_process_expression2 +COPY_edi_to_ebp CALL_IMMEDIATE %FUNCTION_emit POP_ebx # _process_expression_locals POP_ebx # _process_expression_locals +POP_ebp # Restore old base pointer +POP_edi # Prevent overwrite POP_ebx # _common_recursion STORE_INTEGER -LOAD_EFFECTIVE_ADDRESS %16 -LOAD_INTEGER -# looking up offset -# -> offset calculation -LOAD_IMMEDIATE_ebx %24 -ADD_ebx_to_eax +LOAD_IMMEDIATE_eax &GLOBAL_strings_list PUSH_eax #_common_recursion -LOAD_EFFECTIVE_ADDRESS %20 +PUSH_edi # Prevent overwriting in recursion +PUSH_ebp # Protect the old base pointer +COPY_esp_to_edi # Copy new base pointer +LOAD_IMMEDIATE_eax &GLOBAL_function LOAD_INTEGER # looking up offset # -> offset calculation -LOAD_IMMEDIATE_ebx %24 +LOAD_IMMEDIATE_ebx %8 +ADD_ebx_to_eax +LOAD_INTEGER +PUSH_eax #_process_expression1 +LOAD_IMMEDIATE_eax &GLOBAL_strings_list +LOAD_INTEGER +PUSH_eax #_process_expression2 +LOAD_BASE_ADDRESS_eax %-8 +LOAD_INTEGER +PUSH_eax #_process_expression2 +COPY_edi_to_ebp +CALL_IMMEDIATE %FUNCTION_uniqueID +POP_ebx # _process_expression_locals +POP_ebx # _process_expression_locals +POP_ebx # _process_expression_locals +POP_ebp # Restore old base pointer +POP_edi # Prevent overwrite +POP_ebx # _common_recursion +STORE_INTEGER +LOAD_IMMEDIATE_eax &GLOBAL_strings_list +PUSH_eax #_common_recursion +PUSH_edi # Prevent overwriting in recursion +PUSH_ebp # Protect the old base pointer +COPY_esp_to_edi # Copy new base pointer +PUSH_edi # Prevent overwriting in recursion +PUSH_ebp # Protect the old base pointer +COPY_esp_to_edi # Copy new base pointer +LOAD_IMMEDIATE_eax &GLOBAL_global_token +LOAD_INTEGER +# looking up offset +# -> offset calculation +LOAD_IMMEDIATE_ebx %8 +ADD_ebx_to_eax +LOAD_INTEGER +PUSH_eax #_process_expression1 +COPY_edi_to_ebp +CALL_IMMEDIATE %FUNCTION_parse_string +POP_ebx # _process_expression_locals +POP_ebp # Restore old base pointer +POP_edi # Prevent overwrite +PUSH_eax #_process_expression1 +LOAD_IMMEDIATE_eax &GLOBAL_strings_list +LOAD_INTEGER +PUSH_eax #_process_expression2 +COPY_edi_to_ebp +CALL_IMMEDIATE %FUNCTION_emit +POP_ebx # _process_expression_locals +POP_ebx # _process_expression_locals +POP_ebp # Restore old base pointer +POP_edi # Prevent overwrite +POP_ebx # _common_recursion +STORE_INTEGER +LOAD_IMMEDIATE_eax &GLOBAL_global_token +PUSH_eax #_common_recursion +LOAD_IMMEDIATE_eax &GLOBAL_global_token +LOAD_INTEGER +# looking up offset +LOAD_INTEGER +POP_ebx # _common_recursion +STORE_INTEGER +POP_ebx # _recursive_statement_locals +RETURN +# Defining function primary_expr_char +:FUNCTION_primary_expr_char +PUSH_edi # Prevent overwriting in recursion +PUSH_ebp # Protect the old base pointer +COPY_esp_to_edi # Copy new base pointer +LOAD_IMMEDIATE_eax &STRING_primary_expr_char_0 +PUSH_eax #_process_expression1 +COPY_edi_to_ebp +CALL_IMMEDIATE %FUNCTION_emit_out +POP_ebx # _process_expression_locals +POP_ebp # Restore old base pointer +POP_edi # Prevent overwrite +PUSH_edi # Prevent overwriting in recursion +PUSH_ebp # Protect the old base pointer +COPY_esp_to_edi # Copy new base pointer +PUSH_edi # Prevent overwriting in recursion +PUSH_ebp # Protect the old base pointer +COPY_esp_to_edi # Copy new base pointer +PUSH_edi # Prevent overwriting in recursion +PUSH_ebp # Protect the old base pointer +COPY_esp_to_edi # Copy new base pointer +LOAD_IMMEDIATE_eax &GLOBAL_global_token +LOAD_INTEGER +# looking up offset +# -> offset calculation +LOAD_IMMEDIATE_ebx %8 ADD_ebx_to_eax LOAD_INTEGER PUSH_eax #_common_recursion LOAD_IMMEDIATE_eax %1 POP_ebx # _common_recursion -SUBTRACT_eax_from_ebx_into_ebx -MOVE_ebx_to_eax +ADD_ebx_to_eax +PUSH_eax #_process_expression1 +COPY_edi_to_ebp +CALL_IMMEDIATE %FUNCTION_escape_lookup +POP_ebx # _process_expression_locals +POP_ebp # Restore old base pointer +POP_edi # Prevent overwrite +PUSH_eax #_process_expression1 +COPY_edi_to_ebp +CALL_IMMEDIATE %FUNCTION_numerate_number +POP_ebx # _process_expression_locals +POP_ebp # Restore old base pointer +POP_edi # Prevent overwrite +PUSH_eax #_process_expression1 +COPY_edi_to_ebp +CALL_IMMEDIATE %FUNCTION_emit_out +POP_ebx # _process_expression_locals +POP_ebp # Restore old base pointer +POP_edi # Prevent overwrite +PUSH_edi # Prevent overwriting in recursion +PUSH_ebp # Protect the old base pointer +COPY_esp_to_edi # Copy new base pointer +LOAD_IMMEDIATE_eax &STRING_primary_expr_char_1 +PUSH_eax #_process_expression1 +COPY_edi_to_ebp +CALL_IMMEDIATE %FUNCTION_emit_out +POP_ebx # _process_expression_locals +POP_ebp # Restore old base pointer +POP_edi # Prevent overwrite +LOAD_IMMEDIATE_eax &GLOBAL_global_token +PUSH_eax #_common_recursion +LOAD_IMMEDIATE_eax &GLOBAL_global_token +LOAD_INTEGER +# looking up offset +LOAD_INTEGER POP_ebx # _common_recursion STORE_INTEGER -JUMP %FOR_ITER_function_call_4 -:FOR_END_function_call_4 -LOAD_EFFECTIVE_ADDRESS %20 -LOAD_INTEGER -POP_ebx # _return_result_locals RETURN -# Defining function sym_get_value -:FUNCTION_sym_get_value +# Defining function primary_expr_number +:FUNCTION_primary_expr_number +PUSH_edi # Prevent overwriting in recursion +PUSH_ebp # Protect the old base pointer +COPY_esp_to_edi # Copy new base pointer +LOAD_IMMEDIATE_eax &STRING_primary_expr_number_0 +PUSH_eax #_process_expression1 +COPY_edi_to_ebp +CALL_IMMEDIATE %FUNCTION_emit_out +POP_ebx # _process_expression_locals +POP_ebp # Restore old base pointer +POP_edi # Prevent overwrite +PUSH_edi # Prevent overwriting in recursion +PUSH_ebp # Protect the old base pointer +COPY_esp_to_edi # Copy new base pointer +LOAD_IMMEDIATE_eax &GLOBAL_global_token +LOAD_INTEGER +# looking up offset +# -> offset calculation +LOAD_IMMEDIATE_ebx %8 +ADD_ebx_to_eax +LOAD_INTEGER +PUSH_eax #_process_expression1 +COPY_edi_to_ebp +CALL_IMMEDIATE %FUNCTION_emit_out +POP_ebx # _process_expression_locals +POP_ebp # Restore old base pointer +POP_edi # Prevent overwrite +PUSH_edi # Prevent overwriting in recursion +PUSH_ebp # Protect the old base pointer +COPY_esp_to_edi # Copy new base pointer +LOAD_IMMEDIATE_eax &STRING_primary_expr_number_1 +PUSH_eax #_process_expression1 +COPY_edi_to_ebp +CALL_IMMEDIATE %FUNCTION_emit_out +POP_ebx # _process_expression_locals +POP_ebp # Restore old base pointer +POP_edi # Prevent overwrite +LOAD_IMMEDIATE_eax &GLOBAL_global_token +PUSH_eax #_common_recursion +LOAD_IMMEDIATE_eax &GLOBAL_global_token +LOAD_INTEGER +# looking up offset +LOAD_INTEGER +POP_ebx # _common_recursion +STORE_INTEGER +RETURN +# Defining function primary_expr_variable +:FUNCTION_primary_expr_variable +# Defining local s +LOAD_IMMEDIATE_eax &GLOBAL_global_token +LOAD_INTEGER +# looking up offset +# -> offset calculation +LOAD_IMMEDIATE_ebx %8 +ADD_ebx_to_eax +LOAD_INTEGER +PUSH_eax #s LOAD_IMMEDIATE_eax &GLOBAL_global_token PUSH_eax #_common_recursion LOAD_IMMEDIATE_eax &GLOBAL_global_token @@ -6839,744 +7069,1031 @@ LOAD_INTEGER POP_ebx # _common_recursion STORE_INTEGER # Defining local a -LOAD_EFFECTIVE_ADDRESS %12 +PUSH_edi # Prevent overwriting in recursion +PUSH_ebp # Protect the old base pointer +COPY_esp_to_edi # Copy new base pointer +LOAD_BASE_ADDRESS_eax %-8 LOAD_INTEGER PUSH_eax #_process_expression1 LOAD_IMMEDIATE_eax &GLOBAL_global_constant_list LOAD_INTEGER PUSH_eax #_process_expression2 +COPY_edi_to_ebp CALL_IMMEDIATE %FUNCTION_sym_lookup POP_ebx # _process_expression_locals POP_ebx # _process_expression_locals +POP_ebp # Restore old base pointer +POP_edi # Prevent overwrite PUSH_eax #a -# IF_sym_get_value_0 - +# IF_primary_expr_variable_0 LOAD_IMMEDIATE_eax %0 PUSH_eax #_common_recursion -LOAD_EFFECTIVE_ADDRESS %4 +LOAD_BASE_ADDRESS_eax %-12 LOAD_INTEGER POP_ebx # _common_recursion CMP SETNE MOVEZBL TEST -JUMP_EQ %ELSE_sym_get_value_0 - -LOAD_EFFECTIVE_ADDRESS %12 -PUSH_eax #_common_recursion -LOAD_IMMEDIATE_eax &STRING_44 +JUMP_EQ %ELSE_primary_expr_variable_0 +PUSH_edi # Prevent overwriting in recursion +PUSH_ebp # Protect the old base pointer +COPY_esp_to_edi # Copy new base pointer +LOAD_BASE_ADDRESS_eax %-12 +LOAD_INTEGER PUSH_eax #_process_expression1 -LOAD_EFFECTIVE_ADDRESS %8 +COPY_edi_to_ebp +CALL_IMMEDIATE %FUNCTION_constant_load +POP_ebx # _process_expression_locals +POP_ebp # Restore old base pointer +POP_edi # Prevent overwrite +POP_ebx # _return_result_locals +POP_ebx # _return_result_locals +RETURN +JUMP %_END_IF_primary_expr_variable_0 +:ELSE_primary_expr_variable_0 +:_END_IF_primary_expr_variable_0 +LOAD_BASE_ADDRESS_eax %-12 +PUSH_eax #_common_recursion +PUSH_edi # Prevent overwriting in recursion +PUSH_ebp # Protect the old base pointer +COPY_esp_to_edi # Copy new base pointer +LOAD_BASE_ADDRESS_eax %-8 +LOAD_INTEGER +PUSH_eax #_process_expression1 +LOAD_IMMEDIATE_eax &GLOBAL_function +LOAD_INTEGER +# looking up offset +# -> offset calculation +LOAD_IMMEDIATE_ebx %4 +ADD_ebx_to_eax +LOAD_INTEGER +PUSH_eax #_process_expression2 +COPY_edi_to_ebp +CALL_IMMEDIATE %FUNCTION_sym_lookup +POP_ebx # _process_expression_locals +POP_ebx # _process_expression_locals +POP_ebp # Restore old base pointer +POP_edi # Prevent overwrite +POP_ebx # _common_recursion +STORE_INTEGER +# IF_primary_expr_variable_1 +LOAD_IMMEDIATE_eax %0 +PUSH_eax #_common_recursion +LOAD_BASE_ADDRESS_eax %-12 +LOAD_INTEGER +POP_ebx # _common_recursion +CMP +SETNE +MOVEZBL +TEST +JUMP_EQ %ELSE_primary_expr_variable_1 +PUSH_edi # Prevent overwriting in recursion +PUSH_ebp # Protect the old base pointer +COPY_esp_to_edi # Copy new base pointer +LOAD_BASE_ADDRESS_eax %-12 +LOAD_INTEGER +PUSH_eax #_process_expression1 +COPY_edi_to_ebp +CALL_IMMEDIATE %FUNCTION_variable_load +POP_ebx # _process_expression_locals +POP_ebp # Restore old base pointer +POP_edi # Prevent overwrite +POP_ebx # _return_result_locals +POP_ebx # _return_result_locals +RETURN +JUMP %_END_IF_primary_expr_variable_1 +:ELSE_primary_expr_variable_1 +:_END_IF_primary_expr_variable_1 +LOAD_BASE_ADDRESS_eax %-12 +PUSH_eax #_common_recursion +PUSH_edi # Prevent overwriting in recursion +PUSH_ebp # Protect the old base pointer +COPY_esp_to_edi # Copy new base pointer +LOAD_BASE_ADDRESS_eax %-8 +LOAD_INTEGER +PUSH_eax #_process_expression1 +LOAD_IMMEDIATE_eax &GLOBAL_function LOAD_INTEGER # looking up offset # -> offset calculation LOAD_IMMEDIATE_ebx %16 ADD_ebx_to_eax LOAD_INTEGER +PUSH_eax #_process_expression2 +COPY_edi_to_ebp +CALL_IMMEDIATE %FUNCTION_sym_lookup +POP_ebx # _process_expression_locals +POP_ebx # _process_expression_locals +POP_ebp # Restore old base pointer +POP_edi # Prevent overwrite +POP_ebx # _common_recursion +STORE_INTEGER +# IF_primary_expr_variable_2 +LOAD_IMMEDIATE_eax %0 +PUSH_eax #_common_recursion +LOAD_BASE_ADDRESS_eax %-12 +LOAD_INTEGER +POP_ebx # _common_recursion +CMP +SETNE +MOVEZBL +TEST +JUMP_EQ %ELSE_primary_expr_variable_2 +PUSH_edi # Prevent overwriting in recursion +PUSH_ebp # Protect the old base pointer +COPY_esp_to_edi # Copy new base pointer +LOAD_BASE_ADDRESS_eax %-12 +LOAD_INTEGER +PUSH_eax #_process_expression1 +COPY_edi_to_ebp +CALL_IMMEDIATE %FUNCTION_variable_load +POP_ebx # _process_expression_locals +POP_ebp # Restore old base pointer +POP_edi # Prevent overwrite +POP_ebx # _return_result_locals +POP_ebx # _return_result_locals +RETURN +JUMP %_END_IF_primary_expr_variable_2 +:ELSE_primary_expr_variable_2 +:_END_IF_primary_expr_variable_2 +LOAD_BASE_ADDRESS_eax %-12 +PUSH_eax #_common_recursion +PUSH_edi # Prevent overwriting in recursion +PUSH_ebp # Protect the old base pointer +COPY_esp_to_edi # Copy new base pointer +LOAD_BASE_ADDRESS_eax %-8 +LOAD_INTEGER +PUSH_eax #_process_expression1 +LOAD_IMMEDIATE_eax &GLOBAL_global_function_list +LOAD_INTEGER +PUSH_eax #_process_expression2 +COPY_edi_to_ebp +CALL_IMMEDIATE %FUNCTION_sym_lookup +POP_ebx # _process_expression_locals +POP_ebx # _process_expression_locals +POP_ebp # Restore old base pointer +POP_edi # Prevent overwrite +POP_ebx # _common_recursion +STORE_INTEGER +# IF_primary_expr_variable_3 +LOAD_IMMEDIATE_eax %0 +PUSH_eax #_common_recursion +LOAD_BASE_ADDRESS_eax %-12 +LOAD_INTEGER +POP_ebx # _common_recursion +CMP +SETNE +MOVEZBL +TEST +JUMP_EQ %ELSE_primary_expr_variable_3 +PUSH_edi # Prevent overwriting in recursion +PUSH_ebp # Protect the old base pointer +COPY_esp_to_edi # Copy new base pointer +LOAD_BASE_ADDRESS_eax %-12 +LOAD_INTEGER +PUSH_eax #_process_expression1 +COPY_edi_to_ebp +CALL_IMMEDIATE %FUNCTION_function_load +POP_ebx # _process_expression_locals +POP_ebp # Restore old base pointer +POP_edi # Prevent overwrite +POP_ebx # _return_result_locals +POP_ebx # _return_result_locals +RETURN +JUMP %_END_IF_primary_expr_variable_3 +:ELSE_primary_expr_variable_3 +:_END_IF_primary_expr_variable_3 +LOAD_BASE_ADDRESS_eax %-12 +PUSH_eax #_common_recursion +PUSH_edi # Prevent overwriting in recursion +PUSH_ebp # Protect the old base pointer +COPY_esp_to_edi # Copy new base pointer +LOAD_BASE_ADDRESS_eax %-8 +LOAD_INTEGER +PUSH_eax #_process_expression1 +LOAD_IMMEDIATE_eax &GLOBAL_global_symbol_list +LOAD_INTEGER +PUSH_eax #_process_expression2 +COPY_edi_to_ebp +CALL_IMMEDIATE %FUNCTION_sym_lookup +POP_ebx # _process_expression_locals +POP_ebx # _process_expression_locals +POP_ebp # Restore old base pointer +POP_edi # Prevent overwrite +POP_ebx # _common_recursion +STORE_INTEGER +# IF_primary_expr_variable_4 +LOAD_IMMEDIATE_eax %0 +PUSH_eax #_common_recursion +LOAD_BASE_ADDRESS_eax %-12 +LOAD_INTEGER +POP_ebx # _common_recursion +CMP +SETNE +MOVEZBL +TEST +JUMP_EQ %ELSE_primary_expr_variable_4 +PUSH_edi # Prevent overwriting in recursion +PUSH_ebp # Protect the old base pointer +COPY_esp_to_edi # Copy new base pointer +LOAD_BASE_ADDRESS_eax %-12 +LOAD_INTEGER +PUSH_eax #_process_expression1 +COPY_edi_to_ebp +CALL_IMMEDIATE %FUNCTION_global_load +POP_ebx # _process_expression_locals +POP_ebp # Restore old base pointer +POP_edi # Prevent overwrite +POP_ebx # _return_result_locals +POP_ebx # _return_result_locals +RETURN +JUMP %_END_IF_primary_expr_variable_4 +:ELSE_primary_expr_variable_4 +:_END_IF_primary_expr_variable_4 +PUSH_edi # Prevent overwriting in recursion +PUSH_ebp # Protect the old base pointer +COPY_esp_to_edi # Copy new base pointer +LOAD_BASE_ADDRESS_eax %-8 +LOAD_INTEGER +PUSH_eax #_process_expression1 +LOAD_IMMEDIATE_eax %2 +PUSH_eax #_process_expression2 +COPY_edi_to_ebp +CALL_IMMEDIATE %FUNCTION_file_print +POP_ebx # _process_expression_locals +POP_ebx # _process_expression_locals +POP_ebp # Restore old base pointer +POP_edi # Prevent overwrite +PUSH_edi # Prevent overwriting in recursion +PUSH_ebp # Protect the old base pointer +COPY_esp_to_edi # Copy new base pointer +LOAD_IMMEDIATE_eax &STRING_primary_expr_variable_5 +PUSH_eax #_process_expression1 +LOAD_IMMEDIATE_eax %2 +PUSH_eax #_process_expression2 +COPY_edi_to_ebp +CALL_IMMEDIATE %FUNCTION_file_print +POP_ebx # _process_expression_locals +POP_ebx # _process_expression_locals +POP_ebp # Restore old base pointer +POP_edi # Prevent overwrite +PUSH_edi # Prevent overwriting in recursion +PUSH_ebp # Protect the old base pointer +COPY_esp_to_edi # Copy new base pointer +COPY_edi_to_ebp +CALL_IMMEDIATE %FUNCTION_line_error +POP_ebp # Restore old base pointer +POP_edi # Prevent overwrite +PUSH_edi # Prevent overwriting in recursion +PUSH_ebp # Protect the old base pointer +COPY_esp_to_edi # Copy new base pointer +LOAD_IMMEDIATE_eax %1 +PUSH_eax #_process_expression1 +COPY_edi_to_ebp +CALL_IMMEDIATE %FUNCTION_exit +POP_ebx # _process_expression_locals +POP_ebp # Restore old base pointer +POP_edi # Prevent overwrite +POP_ebx # _recursive_statement_locals +POP_ebx # _recursive_statement_locals +RETURN +# Defining function promote_type +:FUNCTION_promote_type +# IF_promote_type_0 +LOAD_IMMEDIATE_eax %0 +PUSH_eax #_common_recursion +LOAD_BASE_ADDRESS_eax %-8 +LOAD_INTEGER +POP_ebx # _common_recursion +CMP +SETE +MOVEZBL +TEST +JUMP_EQ %ELSE_promote_type_0 +LOAD_BASE_ADDRESS_eax %-4 +LOAD_INTEGER +RETURN +JUMP %_END_IF_promote_type_0 +:ELSE_promote_type_0 +:_END_IF_promote_type_0 +# IF_promote_type_1 +LOAD_IMMEDIATE_eax %0 +PUSH_eax #_common_recursion +LOAD_BASE_ADDRESS_eax %-4 +LOAD_INTEGER +POP_ebx # _common_recursion +CMP +SETE +MOVEZBL +TEST +JUMP_EQ %ELSE_promote_type_1 +LOAD_BASE_ADDRESS_eax %-8 +LOAD_INTEGER +RETURN +JUMP %_END_IF_promote_type_1 +:ELSE_promote_type_1 +:_END_IF_promote_type_1 +# Defining local i +PUSH_eax #i +# FOR_initialization_promote_type_2 +LOAD_BASE_ADDRESS_eax %-16 +PUSH_eax #_common_recursion +LOAD_IMMEDIATE_eax &GLOBAL_global_types +LOAD_INTEGER +POP_ebx # _common_recursion +STORE_INTEGER +:FOR_promote_type_2 +LOAD_IMMEDIATE_eax %0 +PUSH_eax #_common_recursion +LOAD_BASE_ADDRESS_eax %-16 +LOAD_INTEGER +POP_ebx # _common_recursion +CMP +SETNE +MOVEZBL +TEST +JUMP_EQ %FOR_END_promote_type_2 +JUMP %FOR_THEN_promote_type_2 +:FOR_ITER_promote_type_2 +LOAD_BASE_ADDRESS_eax %-16 +PUSH_eax #_common_recursion +LOAD_BASE_ADDRESS_eax %-16 +LOAD_INTEGER +# looking up offset +LOAD_INTEGER +POP_ebx # _common_recursion +STORE_INTEGER +JUMP %FOR_promote_type_2 +:FOR_THEN_promote_type_2 +# IF_promote_type_3 +LOAD_BASE_ADDRESS_eax %-4 +LOAD_INTEGER +# looking up offset +# -> offset calculation +LOAD_IMMEDIATE_ebx %24 +ADD_ebx_to_eax +LOAD_INTEGER +PUSH_eax #_common_recursion +LOAD_BASE_ADDRESS_eax %-16 +LOAD_INTEGER +# looking up offset +# -> offset calculation +LOAD_IMMEDIATE_ebx %24 +ADD_ebx_to_eax +LOAD_INTEGER +POP_ebx # _common_recursion +CMP +SETE +MOVEZBL +TEST +JUMP_EQ %ELSE_promote_type_3 +JUMP %FOR_END_promote_type_2 +JUMP %_END_IF_promote_type_3 +:ELSE_promote_type_3 +:_END_IF_promote_type_3 +# IF_promote_type_4 +LOAD_BASE_ADDRESS_eax %-8 +LOAD_INTEGER +# looking up offset +# -> offset calculation +LOAD_IMMEDIATE_ebx %24 +ADD_ebx_to_eax +LOAD_INTEGER +PUSH_eax #_common_recursion +LOAD_BASE_ADDRESS_eax %-16 +LOAD_INTEGER +# looking up offset +# -> offset calculation +LOAD_IMMEDIATE_ebx %24 +ADD_ebx_to_eax +LOAD_INTEGER +POP_ebx # _common_recursion +CMP +SETE +MOVEZBL +TEST +JUMP_EQ %ELSE_promote_type_4 +JUMP %FOR_END_promote_type_2 +JUMP %_END_IF_promote_type_4 +:ELSE_promote_type_4 +:_END_IF_promote_type_4 +# IF_promote_type_5 +LOAD_BASE_ADDRESS_eax %-4 +LOAD_INTEGER +# looking up offset +# -> offset calculation +LOAD_IMMEDIATE_ebx %24 +ADD_ebx_to_eax +LOAD_INTEGER +PUSH_eax #_common_recursion +LOAD_BASE_ADDRESS_eax %-16 +LOAD_INTEGER +# looking up offset +# -> offset calculation +LOAD_IMMEDIATE_ebx %12 +ADD_ebx_to_eax +LOAD_INTEGER +# looking up offset +# -> offset calculation +LOAD_IMMEDIATE_ebx %24 +ADD_ebx_to_eax +LOAD_INTEGER +POP_ebx # _common_recursion +CMP +SETE +MOVEZBL +TEST +JUMP_EQ %ELSE_promote_type_5 +JUMP %FOR_END_promote_type_2 +JUMP %_END_IF_promote_type_5 +:ELSE_promote_type_5 +:_END_IF_promote_type_5 +# IF_promote_type_6 +LOAD_BASE_ADDRESS_eax %-8 +LOAD_INTEGER +# looking up offset +# -> offset calculation +LOAD_IMMEDIATE_ebx %24 +ADD_ebx_to_eax +LOAD_INTEGER +PUSH_eax #_common_recursion +LOAD_BASE_ADDRESS_eax %-16 +LOAD_INTEGER +# looking up offset +# -> offset calculation +LOAD_IMMEDIATE_ebx %12 +ADD_ebx_to_eax +LOAD_INTEGER +# looking up offset +# -> offset calculation +LOAD_IMMEDIATE_ebx %24 +ADD_ebx_to_eax +LOAD_INTEGER +POP_ebx # _common_recursion +CMP +SETE +MOVEZBL +TEST +JUMP_EQ %ELSE_promote_type_6 +JUMP %FOR_END_promote_type_2 +JUMP %_END_IF_promote_type_6 +:ELSE_promote_type_6 +:_END_IF_promote_type_6 +JUMP %FOR_ITER_promote_type_2 +:FOR_END_promote_type_2 +LOAD_BASE_ADDRESS_eax %-16 +LOAD_INTEGER +POP_ebx # _return_result_locals +RETURN +# Defining function common_recursion +:FUNCTION_common_recursion +LOAD_IMMEDIATE_eax &GLOBAL_last_type +PUSH_eax #_common_recursion +LOAD_IMMEDIATE_eax &GLOBAL_current_target +LOAD_INTEGER +POP_ebx # _common_recursion +STORE_INTEGER +LOAD_IMMEDIATE_eax &GLOBAL_global_token +PUSH_eax #_common_recursion +LOAD_IMMEDIATE_eax &GLOBAL_global_token +LOAD_INTEGER +# looking up offset +LOAD_INTEGER +POP_ebx # _common_recursion +STORE_INTEGER +PUSH_edi # Prevent overwriting in recursion +PUSH_ebp # Protect the old base pointer +COPY_esp_to_edi # Copy new base pointer +LOAD_IMMEDIATE_eax &STRING_common_recursion_0 +PUSH_eax #_process_expression1 +COPY_edi_to_ebp +CALL_IMMEDIATE %FUNCTION_emit_out +POP_ebx # _process_expression_locals +POP_ebp # Restore old base pointer +POP_edi # Prevent overwrite +PUSH_edi # Prevent overwriting in recursion +PUSH_ebp # Protect the old base pointer +COPY_esp_to_edi # Copy new base pointer +LOAD_BASE_ADDRESS_eax %-4 +LOAD_INTEGER +COPY_edi_to_ebp +CALL_eax +POP_ebp # Restore old base pointer +POP_edi # Prevent overwrite +LOAD_IMMEDIATE_eax &GLOBAL_current_target +PUSH_eax #_common_recursion +PUSH_edi # Prevent overwriting in recursion +PUSH_ebp # Protect the old base pointer +COPY_esp_to_edi # Copy new base pointer +LOAD_IMMEDIATE_eax &GLOBAL_current_target +LOAD_INTEGER +PUSH_eax #_process_expression1 +LOAD_IMMEDIATE_eax &GLOBAL_last_type +LOAD_INTEGER +PUSH_eax #_process_expression2 +COPY_edi_to_ebp +CALL_IMMEDIATE %FUNCTION_promote_type +POP_ebx # _process_expression_locals +POP_ebx # _process_expression_locals +POP_ebp # Restore old base pointer +POP_edi # Prevent overwrite +POP_ebx # _common_recursion +STORE_INTEGER +PUSH_edi # Prevent overwriting in recursion +PUSH_ebp # Protect the old base pointer +COPY_esp_to_edi # Copy new base pointer +LOAD_IMMEDIATE_eax &STRING_common_recursion_1 +PUSH_eax #_process_expression1 +COPY_edi_to_ebp +CALL_IMMEDIATE %FUNCTION_emit_out +POP_ebx # _process_expression_locals +POP_ebp # Restore old base pointer +POP_edi # Prevent overwrite +RETURN +# Defining function general_recursion +:FUNCTION_general_recursion +# IF_general_recursion_0 +PUSH_edi # Prevent overwriting in recursion +PUSH_ebp # Protect the old base pointer +COPY_esp_to_edi # Copy new base pointer +LOAD_BASE_ADDRESS_eax %-12 +LOAD_INTEGER +PUSH_eax #_process_expression1 +LOAD_IMMEDIATE_eax &GLOBAL_global_token +LOAD_INTEGER # looking up offset # -> offset calculation LOAD_IMMEDIATE_ebx %8 ADD_ebx_to_eax LOAD_INTEGER -PUSH_eax #_process_expression1 -LOAD_IMMEDIATE_eax %10 PUSH_eax #_process_expression2 -CALL_IMMEDIATE %FUNCTION_postpend_char +COPY_edi_to_ebp +CALL_IMMEDIATE %FUNCTION_match POP_ebx # _process_expression_locals POP_ebx # _process_expression_locals -PUSH_eax #_process_expression2 -CALL_IMMEDIATE %FUNCTION_prepend_string -POP_ebx # _process_expression_locals -POP_ebx # _process_expression_locals -PUSH_eax #_process_expression1 -LOAD_EFFECTIVE_ADDRESS %20 +POP_ebp # Restore old base pointer +POP_edi # Prevent overwrite +TEST +JUMP_EQ %ELSE_general_recursion_0 +PUSH_edi # Prevent overwriting in recursion +PUSH_ebp # Protect the old base pointer +COPY_esp_to_edi # Copy new base pointer +LOAD_BASE_ADDRESS_eax %-4 LOAD_INTEGER -PUSH_eax #_process_expression2 -CALL_IMMEDIATE %FUNCTION_emit +PUSH_eax #_process_expression1 +COPY_edi_to_ebp +CALL_IMMEDIATE %FUNCTION_common_recursion POP_ebx # _process_expression_locals +POP_ebp # Restore old base pointer +POP_edi # Prevent overwrite +PUSH_edi # Prevent overwriting in recursion +PUSH_ebp # Protect the old base pointer +COPY_esp_to_edi # Copy new base pointer +LOAD_BASE_ADDRESS_eax %-8 +LOAD_INTEGER +PUSH_eax #_process_expression1 +COPY_edi_to_ebp +CALL_IMMEDIATE %FUNCTION_emit_out POP_ebx # _process_expression_locals +POP_ebp # Restore old base pointer +POP_edi # Prevent overwrite +PUSH_edi # Prevent overwriting in recursion +PUSH_ebp # Protect the old base pointer +COPY_esp_to_edi # Copy new base pointer +LOAD_BASE_ADDRESS_eax %-16 +LOAD_INTEGER +COPY_edi_to_ebp +CALL_eax +POP_ebp # Restore old base pointer +POP_edi # Prevent overwrite +JUMP %_END_IF_general_recursion_0 +:ELSE_general_recursion_0 +:_END_IF_general_recursion_0 +RETURN +# Defining function ceil_log2 +:FUNCTION_ceil_log2 +# Defining local result +LOAD_IMMEDIATE_eax %0 +PUSH_eax #result +# IF_ceil_log2_0 +LOAD_BASE_ADDRESS_eax %-4 +LOAD_INTEGER +PUSH_eax #_common_recursion +LOAD_BASE_ADDRESS_eax %-4 +LOAD_INTEGER +PUSH_eax #_common_recursion +LOAD_IMMEDIATE_eax %1 +POP_ebx # _common_recursion +SUBTRACT_eax_from_ebx_into_ebx +MOVE_ebx_to_eax +POP_ebx # _common_recursion +AND_eax_ebx +PUSH_eax #_common_recursion +LOAD_IMMEDIATE_eax %0 +POP_ebx # _common_recursion +CMP +SETE +MOVEZBL +TEST +JUMP_EQ %ELSE_ceil_log2_0 +LOAD_BASE_ADDRESS_eax %-12 +PUSH_eax #_common_recursion +LOAD_IMMEDIATE_eax %0 +PUSH_eax #_common_recursion +LOAD_IMMEDIATE_eax %1 +POP_ebx # _common_recursion +SUBTRACT_eax_from_ebx_into_ebx +MOVE_ebx_to_eax POP_ebx # _common_recursion STORE_INTEGER -LOAD_EFFECTIVE_ADDRESS %12 +JUMP %_END_IF_ceil_log2_0 +:ELSE_ceil_log2_0 +:_END_IF_ceil_log2_0 +:WHILE_ceil_log2_1 +LOAD_BASE_ADDRESS_eax %-4 +LOAD_INTEGER +PUSH_eax #_common_recursion +LOAD_IMMEDIATE_eax %0 +POP_ebx # _common_recursion +CMP +SETG +MOVEZBL +TEST +JUMP_EQ %END_WHILE_ceil_log2_1 +# THEN_while_ceil_log2_1 +LOAD_BASE_ADDRESS_eax %-12 +PUSH_eax #_common_recursion +LOAD_BASE_ADDRESS_eax %-12 +LOAD_INTEGER +PUSH_eax #_common_recursion +LOAD_IMMEDIATE_eax %1 +POP_ebx # _common_recursion +ADD_ebx_to_eax +POP_ebx # _common_recursion +STORE_INTEGER +LOAD_BASE_ADDRESS_eax %-4 +PUSH_eax #_common_recursion +LOAD_BASE_ADDRESS_eax %-4 +LOAD_INTEGER +PUSH_eax #_common_recursion +LOAD_IMMEDIATE_eax %1 +POP_ebx # _common_recursion +COPY_eax_to_ecx +COPY_ebx_to_eax +SAR_eax_cl +POP_ebx # _common_recursion +STORE_INTEGER +JUMP %WHILE_ceil_log2_1 +:END_WHILE_ceil_log2_1 +LOAD_BASE_ADDRESS_eax %-12 LOAD_INTEGER POP_ebx # _return_result_locals RETURN -JUMP %_END_IF_sym_get_value_0 - -:ELSE_sym_get_value_0 - -:_END_IF_sym_get_value_0 - -LOAD_EFFECTIVE_ADDRESS %0 - +# Defining function postfix_expr_arrow +:FUNCTION_postfix_expr_arrow +PUSH_edi # Prevent overwriting in recursion +PUSH_ebp # Protect the old base pointer +COPY_esp_to_edi # Copy new base pointer +LOAD_IMMEDIATE_eax &STRING_postfix_expr_arrow_0 +PUSH_eax #_process_expression1 +COPY_edi_to_ebp +CALL_IMMEDIATE %FUNCTION_emit_out +POP_ebx # _process_expression_locals +POP_ebp # Restore old base pointer +POP_edi # Prevent overwrite +LOAD_IMMEDIATE_eax &GLOBAL_global_token PUSH_eax #_common_recursion -LOAD_EFFECTIVE_ADDRESS %20 +LOAD_IMMEDIATE_eax &GLOBAL_global_token +LOAD_INTEGER +# looking up offset +LOAD_INTEGER +POP_ebx # _common_recursion +STORE_INTEGER +# Defining local i +PUSH_edi # Prevent overwriting in recursion +PUSH_ebp # Protect the old base pointer +COPY_esp_to_edi # Copy new base pointer +LOAD_IMMEDIATE_eax &GLOBAL_current_target LOAD_INTEGER PUSH_eax #_process_expression1 -LOAD_EFFECTIVE_ADDRESS %16 +LOAD_IMMEDIATE_eax &GLOBAL_global_token +LOAD_INTEGER +# looking up offset +# -> offset calculation +LOAD_IMMEDIATE_ebx %8 +ADD_ebx_to_eax +LOAD_INTEGER +PUSH_eax #_process_expression2 +COPY_edi_to_ebp +CALL_IMMEDIATE %FUNCTION_lookup_member +POP_ebx # _process_expression_locals +POP_ebx # _process_expression_locals +POP_ebp # Restore old base pointer +POP_edi # Prevent overwrite +PUSH_eax #i +LOAD_IMMEDIATE_eax &GLOBAL_current_target +PUSH_eax #_common_recursion +LOAD_BASE_ADDRESS_eax %-8 LOAD_INTEGER # looking up offset # -> offset calculation LOAD_IMMEDIATE_ebx %20 ADD_ebx_to_eax LOAD_INTEGER -PUSH_eax #_process_expression2 -CALL_IMMEDIATE %FUNCTION_sym_lookup -POP_ebx # _process_expression_locals -POP_ebx # _process_expression_locals POP_ebx # _common_recursion STORE_INTEGER -# IF_sym_get_value_1 +LOAD_IMMEDIATE_eax &GLOBAL_global_token +PUSH_eax #_common_recursion +LOAD_IMMEDIATE_eax &GLOBAL_global_token +LOAD_INTEGER +# looking up offset +LOAD_INTEGER +POP_ebx # _common_recursion +STORE_INTEGER +# IF_postfix_expr_arrow_1 LOAD_IMMEDIATE_eax %0 PUSH_eax #_common_recursion -LOAD_EFFECTIVE_ADDRESS %4 +LOAD_BASE_ADDRESS_eax %-8 +LOAD_INTEGER +# looking up offset +# -> offset calculation +LOAD_IMMEDIATE_ebx %8 +ADD_ebx_to_eax LOAD_INTEGER POP_ebx # _common_recursion CMP SETNE MOVEZBL TEST -JUMP_EQ %ELSE_sym_get_value_1 -# IF_sym_get_value_2 -LOAD_IMMEDIATE_eax &STRING_45 +JUMP_EQ %ELSE_postfix_expr_arrow_1 +PUSH_edi # Prevent overwriting in recursion +PUSH_ebp # Protect the old base pointer +COPY_esp_to_edi # Copy new base pointer +LOAD_IMMEDIATE_eax &STRING_postfix_expr_arrow_2 PUSH_eax #_process_expression1 -LOAD_EFFECTIVE_ADDRESS %4 +COPY_edi_to_ebp +CALL_IMMEDIATE %FUNCTION_emit_out +POP_ebx # _process_expression_locals +POP_ebp # Restore old base pointer +POP_edi # Prevent overwrite +PUSH_edi # Prevent overwriting in recursion +PUSH_ebp # Protect the old base pointer +COPY_esp_to_edi # Copy new base pointer +LOAD_IMMEDIATE_eax &STRING_postfix_expr_arrow_3 +PUSH_eax #_process_expression1 +COPY_edi_to_ebp +CALL_IMMEDIATE %FUNCTION_emit_out +POP_ebx # _process_expression_locals +POP_ebp # Restore old base pointer +POP_edi # Prevent overwrite +PUSH_edi # Prevent overwriting in recursion +PUSH_ebp # Protect the old base pointer +COPY_esp_to_edi # Copy new base pointer +PUSH_edi # Prevent overwriting in recursion +PUSH_ebp # Protect the old base pointer +COPY_esp_to_edi # Copy new base pointer +LOAD_BASE_ADDRESS_eax %-8 LOAD_INTEGER # looking up offset # -> offset calculation -LOAD_IMMEDIATE_ebx %12 +LOAD_IMMEDIATE_ebx %8 ADD_ebx_to_eax LOAD_INTEGER +PUSH_eax #_process_expression1 +COPY_edi_to_ebp +CALL_IMMEDIATE %FUNCTION_numerate_number +POP_ebx # _process_expression_locals +POP_ebp # Restore old base pointer +POP_edi # Prevent overwrite +PUSH_eax #_process_expression1 +COPY_edi_to_ebp +CALL_IMMEDIATE %FUNCTION_emit_out +POP_ebx # _process_expression_locals +POP_ebp # Restore old base pointer +POP_edi # Prevent overwrite +PUSH_edi # Prevent overwriting in recursion +PUSH_ebp # Protect the old base pointer +COPY_esp_to_edi # Copy new base pointer +LOAD_IMMEDIATE_eax &STRING_postfix_expr_arrow_4 +PUSH_eax #_process_expression1 +COPY_edi_to_ebp +CALL_IMMEDIATE %FUNCTION_emit_out +POP_ebx # _process_expression_locals +POP_ebp # Restore old base pointer +POP_edi # Prevent overwrite +JUMP %_END_IF_postfix_expr_arrow_1 +:ELSE_postfix_expr_arrow_1 +:_END_IF_postfix_expr_arrow_1 +# IF_postfix_expr_arrow_5 +LOAD_IMMEDIATE_eax %1 +PUSH_eax #_common_recursion +PUSH_edi # Prevent overwriting in recursion +PUSH_ebp # Protect the old base pointer +COPY_esp_to_edi # Copy new base pointer +LOAD_IMMEDIATE_eax &STRING_postfix_expr_arrow_6 +PUSH_eax #_process_expression1 +LOAD_IMMEDIATE_eax &GLOBAL_global_token +LOAD_INTEGER +# looking up offset +# -> offset calculation +LOAD_IMMEDIATE_ebx %8 +ADD_ebx_to_eax +LOAD_INTEGER +PUSH_eax #_process_expression2 +COPY_edi_to_ebp +CALL_IMMEDIATE %FUNCTION_match +POP_ebx # _process_expression_locals +POP_ebx # _process_expression_locals +POP_ebp # Restore old base pointer +POP_edi # Prevent overwrite +POP_ebx # _common_recursion +XOR_ebx_eax_into_eax +PUSH_eax #_common_recursion +LOAD_IMMEDIATE_eax %1 +PUSH_eax #_common_recursion +PUSH_edi # Prevent overwriting in recursion +PUSH_ebp # Protect the old base pointer +COPY_esp_to_edi # Copy new base pointer +LOAD_IMMEDIATE_eax &STRING_postfix_expr_arrow_7 +PUSH_eax #_process_expression1 +LOAD_IMMEDIATE_eax &GLOBAL_current_target +LOAD_INTEGER # looking up offset # -> offset calculation LOAD_IMMEDIATE_ebx %24 ADD_ebx_to_eax LOAD_INTEGER PUSH_eax #_process_expression2 +COPY_edi_to_ebp CALL_IMMEDIATE %FUNCTION_match POP_ebx # _process_expression_locals POP_ebx # _process_expression_locals -TEST -JUMP_EQ %ELSE_sym_get_value_2 -# IF_sym_get_value_3 -LOAD_IMMEDIATE_eax %1 -PUSH_eax #_common_recursion -LOAD_IMMEDIATE_eax &STRING_46 -PUSH_eax #_process_expression1 -LOAD_IMMEDIATE_eax &GLOBAL_global_token -LOAD_INTEGER -# looking up offset -# -> offset calculation -LOAD_IMMEDIATE_ebx %8 -ADD_ebx_to_eax -LOAD_INTEGER -PUSH_eax #_process_expression2 -CALL_IMMEDIATE %FUNCTION_match -POP_ebx # _process_expression_locals -POP_ebx # _process_expression_locals -POP_ebx # _common_recursion -XOR_ebx_eax_into_eax -TEST -JUMP_EQ %ELSE_sym_get_value_3 -LOAD_EFFECTIVE_ADDRESS %12 -PUSH_eax #_common_recursion -LOAD_IMMEDIATE_eax &STRING_47 -PUSH_eax #_process_expression1 -LOAD_EFFECTIVE_ADDRESS %20 -LOAD_INTEGER -PUSH_eax #_process_expression2 -CALL_IMMEDIATE %FUNCTION_emit -POP_ebx # _process_expression_locals -POP_ebx # _process_expression_locals -POP_ebx # _common_recursion -STORE_INTEGER -LOAD_EFFECTIVE_ADDRESS %12 -PUSH_eax #_common_recursion -LOAD_EFFECTIVE_ADDRESS %4 -LOAD_INTEGER -PUSH_eax #_process_expression1 -LOAD_EFFECTIVE_ADDRESS %16 -LOAD_INTEGER -PUSH_eax #_process_expression2 -CALL_IMMEDIATE %FUNCTION_stack_index -POP_ebx # _process_expression_locals -POP_ebx # _process_expression_locals -PUSH_eax #_process_expression1 -CALL_IMMEDIATE %FUNCTION_numerate_number -POP_ebx # _process_expression_locals -PUSH_eax #_process_expression1 -LOAD_EFFECTIVE_ADDRESS %20 -LOAD_INTEGER -PUSH_eax #_process_expression2 -CALL_IMMEDIATE %FUNCTION_emit -POP_ebx # _process_expression_locals -POP_ebx # _process_expression_locals -POP_ebx # _common_recursion -STORE_INTEGER -LOAD_EFFECTIVE_ADDRESS %12 -PUSH_eax #_common_recursion -LOAD_IMMEDIATE_eax &STRING_48 -PUSH_eax #_process_expression1 -LOAD_EFFECTIVE_ADDRESS %20 -LOAD_INTEGER -PUSH_eax #_process_expression2 -CALL_IMMEDIATE %FUNCTION_emit -POP_ebx # _process_expression_locals -POP_ebx # _process_expression_locals -POP_ebx # _common_recursion -STORE_INTEGER -LOAD_EFFECTIVE_ADDRESS %12 -LOAD_INTEGER -POP_ebx # _return_result_locals -RETURN -JUMP %_END_IF_sym_get_value_3 -:ELSE_sym_get_value_3 -:_END_IF_sym_get_value_3 -LOAD_EFFECTIVE_ADDRESS %12 -LOAD_INTEGER -PUSH_eax #_process_expression1 -LOAD_EFFECTIVE_ADDRESS %12 -LOAD_INTEGER -PUSH_eax #_process_expression2 -LOAD_EFFECTIVE_ADDRESS %24 -LOAD_INTEGER -PUSH_eax #_process_expression2 -LOAD_IMMEDIATE_eax %2 -PUSH_eax #_process_expression2 -CALL_IMMEDIATE %FUNCTION_function_call -POP_ebx # _process_expression_locals -POP_ebx # _process_expression_locals -POP_ebx # _process_expression_locals -POP_ebx # _process_expression_locals -POP_ebx # _return_result_locals -RETURN -JUMP %_END_IF_sym_get_value_2 -:ELSE_sym_get_value_2 -:_END_IF_sym_get_value_2 -LOAD_IMMEDIATE_eax &GLOBAL_current_target -PUSH_eax #_common_recursion -LOAD_EFFECTIVE_ADDRESS %4 -LOAD_INTEGER -# looking up offset -# -> offset calculation -LOAD_IMMEDIATE_ebx %12 -ADD_ebx_to_eax -LOAD_INTEGER -POP_ebx # _common_recursion -STORE_INTEGER -LOAD_EFFECTIVE_ADDRESS %12 -PUSH_eax #_common_recursion -LOAD_IMMEDIATE_eax &STRING_49 -PUSH_eax #_process_expression1 -LOAD_EFFECTIVE_ADDRESS %20 -LOAD_INTEGER -PUSH_eax #_process_expression2 -CALL_IMMEDIATE %FUNCTION_emit -POP_ebx # _process_expression_locals -POP_ebx # _process_expression_locals -POP_ebx # _common_recursion -STORE_INTEGER -LOAD_EFFECTIVE_ADDRESS %12 -PUSH_eax #_common_recursion -LOAD_EFFECTIVE_ADDRESS %4 -LOAD_INTEGER -PUSH_eax #_process_expression1 -LOAD_EFFECTIVE_ADDRESS %16 -LOAD_INTEGER -PUSH_eax #_process_expression2 -CALL_IMMEDIATE %FUNCTION_stack_index -POP_ebx # _process_expression_locals -POP_ebx # _process_expression_locals -PUSH_eax #_process_expression1 -CALL_IMMEDIATE %FUNCTION_numerate_number -POP_ebx # _process_expression_locals -PUSH_eax #_process_expression1 -LOAD_EFFECTIVE_ADDRESS %20 -LOAD_INTEGER -PUSH_eax #_process_expression2 -CALL_IMMEDIATE %FUNCTION_emit -POP_ebx # _process_expression_locals -POP_ebx # _process_expression_locals -POP_ebx # _common_recursion -STORE_INTEGER -LOAD_EFFECTIVE_ADDRESS %12 -PUSH_eax #_common_recursion -LOAD_IMMEDIATE_eax &STRING_50 -PUSH_eax #_process_expression1 -LOAD_EFFECTIVE_ADDRESS %20 -LOAD_INTEGER -PUSH_eax #_process_expression2 -CALL_IMMEDIATE %FUNCTION_emit -POP_ebx # _process_expression_locals -POP_ebx # _process_expression_locals -POP_ebx # _common_recursion -STORE_INTEGER -# IF_sym_get_value_4 -LOAD_IMMEDIATE_eax %1 -PUSH_eax #_common_recursion -LOAD_IMMEDIATE_eax &STRING_51 -PUSH_eax #_process_expression1 -LOAD_IMMEDIATE_eax &GLOBAL_global_token -LOAD_INTEGER -# looking up offset -# -> offset calculation -LOAD_IMMEDIATE_ebx %8 -ADD_ebx_to_eax -LOAD_INTEGER -PUSH_eax #_process_expression2 -CALL_IMMEDIATE %FUNCTION_match -POP_ebx # _process_expression_locals -POP_ebx # _process_expression_locals -POP_ebx # _common_recursion -XOR_ebx_eax_into_eax -TEST -JUMP_EQ %ELSE_sym_get_value_4 -LOAD_EFFECTIVE_ADDRESS %12 -PUSH_eax #_common_recursion -LOAD_IMMEDIATE_eax &STRING_52 -PUSH_eax #_process_expression1 -LOAD_EFFECTIVE_ADDRESS %20 -LOAD_INTEGER -PUSH_eax #_process_expression2 -CALL_IMMEDIATE %FUNCTION_emit -POP_ebx # _process_expression_locals -POP_ebx # _process_expression_locals -POP_ebx # _common_recursion -STORE_INTEGER -JUMP %_END_IF_sym_get_value_4 -:ELSE_sym_get_value_4 -:_END_IF_sym_get_value_4 -LOAD_EFFECTIVE_ADDRESS %12 -LOAD_INTEGER -POP_ebx # _return_result_locals -RETURN -JUMP %_END_IF_sym_get_value_1 -:ELSE_sym_get_value_1 -:_END_IF_sym_get_value_1 -LOAD_EFFECTIVE_ADDRESS %0 - -PUSH_eax #_common_recursion -LOAD_EFFECTIVE_ADDRESS %20 -LOAD_INTEGER -PUSH_eax #_process_expression1 -LOAD_EFFECTIVE_ADDRESS %16 -LOAD_INTEGER -# looking up offset -# -> offset calculation -LOAD_IMMEDIATE_ebx %16 -ADD_ebx_to_eax -LOAD_INTEGER -PUSH_eax #_process_expression2 -CALL_IMMEDIATE %FUNCTION_sym_lookup -POP_ebx # _process_expression_locals -POP_ebx # _process_expression_locals -POP_ebx # _common_recursion -STORE_INTEGER -# IF_sym_get_value_5 -LOAD_IMMEDIATE_eax %0 -PUSH_eax #_common_recursion -LOAD_EFFECTIVE_ADDRESS %4 -LOAD_INTEGER -POP_ebx # _common_recursion -CMP -SETNE -MOVEZBL -TEST -JUMP_EQ %ELSE_sym_get_value_5 -LOAD_IMMEDIATE_eax &GLOBAL_current_target -PUSH_eax #_common_recursion -LOAD_EFFECTIVE_ADDRESS %4 -LOAD_INTEGER -# looking up offset -# -> offset calculation -LOAD_IMMEDIATE_ebx %12 -ADD_ebx_to_eax -LOAD_INTEGER -POP_ebx # _common_recursion -STORE_INTEGER -# IF_sym_get_value_6 -LOAD_IMMEDIATE_eax &STRING_53 -PUSH_eax #_process_expression1 -LOAD_EFFECTIVE_ADDRESS %4 -LOAD_INTEGER -# looking up offset -# -> offset calculation -LOAD_IMMEDIATE_ebx %12 -ADD_ebx_to_eax -LOAD_INTEGER -# looking up offset -# -> offset calculation -LOAD_IMMEDIATE_ebx %24 -ADD_ebx_to_eax -LOAD_INTEGER -PUSH_eax #_process_expression2 -CALL_IMMEDIATE %FUNCTION_match -POP_ebx # _process_expression_locals -POP_ebx # _process_expression_locals -TEST -JUMP_EQ %ELSE_sym_get_value_6 -# IF_sym_get_value_7 -LOAD_IMMEDIATE_eax %1 -PUSH_eax #_common_recursion -LOAD_IMMEDIATE_eax &STRING_54 -PUSH_eax #_process_expression1 -LOAD_IMMEDIATE_eax &GLOBAL_global_token -LOAD_INTEGER -# looking up offset -# -> offset calculation -LOAD_IMMEDIATE_ebx %8 -ADD_ebx_to_eax -LOAD_INTEGER -PUSH_eax #_process_expression2 -CALL_IMMEDIATE %FUNCTION_match -POP_ebx # _process_expression_locals -POP_ebx # _process_expression_locals -POP_ebx # _common_recursion -XOR_ebx_eax_into_eax -TEST -JUMP_EQ %ELSE_sym_get_value_7 -LOAD_EFFECTIVE_ADDRESS %12 -PUSH_eax #_common_recursion -LOAD_IMMEDIATE_eax &STRING_55 -PUSH_eax #_process_expression1 -LOAD_EFFECTIVE_ADDRESS %20 -LOAD_INTEGER -PUSH_eax #_process_expression2 -CALL_IMMEDIATE %FUNCTION_emit -POP_ebx # _process_expression_locals -POP_ebx # _process_expression_locals -POP_ebx # _common_recursion -STORE_INTEGER -LOAD_EFFECTIVE_ADDRESS %12 -PUSH_eax #_common_recursion -LOAD_EFFECTIVE_ADDRESS %4 -LOAD_INTEGER -PUSH_eax #_process_expression1 -LOAD_EFFECTIVE_ADDRESS %16 -LOAD_INTEGER -PUSH_eax #_process_expression2 -CALL_IMMEDIATE %FUNCTION_stack_index -POP_ebx # _process_expression_locals -POP_ebx # _process_expression_locals -PUSH_eax #_process_expression1 -CALL_IMMEDIATE %FUNCTION_numerate_number -POP_ebx # _process_expression_locals -PUSH_eax #_process_expression1 -LOAD_EFFECTIVE_ADDRESS %20 -LOAD_INTEGER -PUSH_eax #_process_expression2 -CALL_IMMEDIATE %FUNCTION_emit -POP_ebx # _process_expression_locals -POP_ebx # _process_expression_locals -POP_ebx # _common_recursion -STORE_INTEGER -LOAD_EFFECTIVE_ADDRESS %12 -PUSH_eax #_common_recursion -LOAD_IMMEDIATE_eax &STRING_56 -PUSH_eax #_process_expression1 -LOAD_EFFECTIVE_ADDRESS %20 -LOAD_INTEGER -PUSH_eax #_process_expression2 -CALL_IMMEDIATE %FUNCTION_emit -POP_ebx # _process_expression_locals -POP_ebx # _process_expression_locals -POP_ebx # _common_recursion -STORE_INTEGER -LOAD_EFFECTIVE_ADDRESS %12 -LOAD_INTEGER -POP_ebx # _return_result_locals -RETURN -JUMP %_END_IF_sym_get_value_7 -:ELSE_sym_get_value_7 -:_END_IF_sym_get_value_7 -LOAD_EFFECTIVE_ADDRESS %12 -LOAD_INTEGER -PUSH_eax #_process_expression1 -LOAD_EFFECTIVE_ADDRESS %12 -LOAD_INTEGER -PUSH_eax #_process_expression2 -LOAD_EFFECTIVE_ADDRESS %24 -LOAD_INTEGER -PUSH_eax #_process_expression2 -LOAD_IMMEDIATE_eax %1 -PUSH_eax #_process_expression2 -CALL_IMMEDIATE %FUNCTION_function_call -POP_ebx # _process_expression_locals -POP_ebx # _process_expression_locals -POP_ebx # _process_expression_locals -POP_ebx # _process_expression_locals -POP_ebx # _return_result_locals -RETURN -JUMP %_END_IF_sym_get_value_6 -:ELSE_sym_get_value_6 -:_END_IF_sym_get_value_6 -LOAD_EFFECTIVE_ADDRESS %12 -PUSH_eax #_common_recursion -LOAD_IMMEDIATE_eax &STRING_57 -PUSH_eax #_process_expression1 -LOAD_EFFECTIVE_ADDRESS %20 -LOAD_INTEGER -PUSH_eax #_process_expression2 -CALL_IMMEDIATE %FUNCTION_emit -POP_ebx # _process_expression_locals -POP_ebx # _process_expression_locals -POP_ebx # _common_recursion -STORE_INTEGER -LOAD_EFFECTIVE_ADDRESS %12 -PUSH_eax #_common_recursion -LOAD_EFFECTIVE_ADDRESS %4 -LOAD_INTEGER -PUSH_eax #_process_expression1 -LOAD_EFFECTIVE_ADDRESS %16 -LOAD_INTEGER -PUSH_eax #_process_expression2 -CALL_IMMEDIATE %FUNCTION_stack_index -POP_ebx # _process_expression_locals -POP_ebx # _process_expression_locals -PUSH_eax #_process_expression1 -CALL_IMMEDIATE %FUNCTION_numerate_number -POP_ebx # _process_expression_locals -PUSH_eax #_process_expression1 -LOAD_EFFECTIVE_ADDRESS %20 -LOAD_INTEGER -PUSH_eax #_process_expression2 -CALL_IMMEDIATE %FUNCTION_emit -POP_ebx # _process_expression_locals -POP_ebx # _process_expression_locals -POP_ebx # _common_recursion -STORE_INTEGER -LOAD_EFFECTIVE_ADDRESS %12 -PUSH_eax #_common_recursion -LOAD_IMMEDIATE_eax &STRING_58 -PUSH_eax #_process_expression1 -LOAD_EFFECTIVE_ADDRESS %20 -LOAD_INTEGER -PUSH_eax #_process_expression2 -CALL_IMMEDIATE %FUNCTION_emit -POP_ebx # _process_expression_locals -POP_ebx # _process_expression_locals -POP_ebx # _common_recursion -STORE_INTEGER -# IF_sym_get_value_8 -LOAD_IMMEDIATE_eax %1 -PUSH_eax #_common_recursion -LOAD_IMMEDIATE_eax &STRING_59 -PUSH_eax #_process_expression1 -LOAD_IMMEDIATE_eax &GLOBAL_global_token -LOAD_INTEGER -# looking up offset -# -> offset calculation -LOAD_IMMEDIATE_ebx %8 -ADD_ebx_to_eax -LOAD_INTEGER -PUSH_eax #_process_expression2 -CALL_IMMEDIATE %FUNCTION_match -POP_ebx # _process_expression_locals -POP_ebx # _process_expression_locals -POP_ebx # _common_recursion -XOR_ebx_eax_into_eax -PUSH_eax #_common_recursion -LOAD_IMMEDIATE_eax %1 -PUSH_eax #_common_recursion -LOAD_IMMEDIATE_eax &STRING_60 -PUSH_eax #_process_expression1 -LOAD_EFFECTIVE_ADDRESS %28 -LOAD_INTEGER -PUSH_eax #_process_expression2 -CALL_IMMEDIATE %FUNCTION_match -POP_ebx # _process_expression_locals -POP_ebx # _process_expression_locals +POP_ebp # Restore old base pointer +POP_edi # Prevent overwrite POP_ebx # _common_recursion XOR_ebx_eax_into_eax POP_ebx # _common_recursion AND_eax_ebx TEST -JUMP_EQ %ELSE_sym_get_value_8 -LOAD_EFFECTIVE_ADDRESS %12 -PUSH_eax #_common_recursion -LOAD_IMMEDIATE_eax &STRING_61 +JUMP_EQ %ELSE_postfix_expr_arrow_5 +PUSH_edi # Prevent overwriting in recursion +PUSH_ebp # Protect the old base pointer +COPY_esp_to_edi # Copy new base pointer +LOAD_IMMEDIATE_eax &STRING_postfix_expr_arrow_8 PUSH_eax #_process_expression1 -LOAD_EFFECTIVE_ADDRESS %20 -LOAD_INTEGER -PUSH_eax #_process_expression2 -CALL_IMMEDIATE %FUNCTION_emit +COPY_edi_to_ebp +CALL_IMMEDIATE %FUNCTION_emit_out POP_ebx # _process_expression_locals -POP_ebx # _process_expression_locals -POP_ebx # _common_recursion -STORE_INTEGER -JUMP %_END_IF_sym_get_value_8 -:ELSE_sym_get_value_8 -:_END_IF_sym_get_value_8 -LOAD_EFFECTIVE_ADDRESS %12 -LOAD_INTEGER -POP_ebx # _return_result_locals +POP_ebp # Restore old base pointer +POP_edi # Prevent overwrite +JUMP %_END_IF_postfix_expr_arrow_5 +:ELSE_postfix_expr_arrow_5 +:_END_IF_postfix_expr_arrow_5 +POP_ebx # _recursive_statement_locals RETURN -JUMP %_END_IF_sym_get_value_5 -:ELSE_sym_get_value_5 -:_END_IF_sym_get_value_5 -LOAD_EFFECTIVE_ADDRESS %0 - -PUSH_eax #_common_recursion -LOAD_EFFECTIVE_ADDRESS %20 +# Defining function postfix_expr_array +:FUNCTION_postfix_expr_array +# Defining local array +LOAD_IMMEDIATE_eax &GLOBAL_current_target LOAD_INTEGER +PUSH_eax #array +PUSH_edi # Prevent overwriting in recursion +PUSH_ebp # Protect the old base pointer +COPY_esp_to_edi # Copy new base pointer +LOAD_IMMEDIATE_eax &FUNCTION_expression PUSH_eax #_process_expression1 -LOAD_IMMEDIATE_eax &GLOBAL_global_function_list +COPY_edi_to_ebp +CALL_IMMEDIATE %FUNCTION_common_recursion +POP_ebx # _process_expression_locals +POP_ebp # Restore old base pointer +POP_edi # Prevent overwrite +LOAD_IMMEDIATE_eax &GLOBAL_current_target +PUSH_eax #_common_recursion +LOAD_BASE_ADDRESS_eax %-8 LOAD_INTEGER -PUSH_eax #_process_expression2 -CALL_IMMEDIATE %FUNCTION_sym_lookup -POP_ebx # _process_expression_locals -POP_ebx # _process_expression_locals POP_ebx # _common_recursion STORE_INTEGER -# IF_sym_get_value_9 -LOAD_IMMEDIATE_eax %0 -PUSH_eax #_common_recursion -LOAD_EFFECTIVE_ADDRESS %4 -LOAD_INTEGER -POP_ebx # _common_recursion -CMP -SETNE -MOVEZBL -TEST -JUMP_EQ %ELSE_sym_get_value_9 -# IF_sym_get_value_10 -LOAD_IMMEDIATE_eax %1 -PUSH_eax #_common_recursion -LOAD_IMMEDIATE_eax &STRING_62 +# Defining local assign +LOAD_IMMEDIATE_eax &STRING_postfix_expr_array_0 +PUSH_eax #assign +# IF_postfix_expr_array_1 +PUSH_edi # Prevent overwriting in recursion +PUSH_ebp # Protect the old base pointer +COPY_esp_to_edi # Copy new base pointer +LOAD_IMMEDIATE_eax &STRING_postfix_expr_array_2 PUSH_eax #_process_expression1 -LOAD_IMMEDIATE_eax &GLOBAL_global_token +LOAD_IMMEDIATE_eax &GLOBAL_current_target LOAD_INTEGER # looking up offset # -> offset calculation -LOAD_IMMEDIATE_ebx %8 +LOAD_IMMEDIATE_ebx %24 ADD_ebx_to_eax LOAD_INTEGER PUSH_eax #_process_expression2 +COPY_edi_to_ebp CALL_IMMEDIATE %FUNCTION_match POP_ebx # _process_expression_locals POP_ebx # _process_expression_locals -POP_ebx # _common_recursion -XOR_ebx_eax_into_eax +POP_ebp # Restore old base pointer +POP_edi # Prevent overwrite TEST -JUMP_EQ %ELSE_sym_get_value_10 -LOAD_EFFECTIVE_ADDRESS %12 +JUMP_EQ %ELSE_postfix_expr_array_1 +LOAD_BASE_ADDRESS_eax %-12 PUSH_eax #_common_recursion -LOAD_IMMEDIATE_eax &STRING_63 -PUSH_eax #_process_expression1 -LOAD_EFFECTIVE_ADDRESS %24 -LOAD_INTEGER -PUSH_eax #_process_expression1 -LOAD_IMMEDIATE_eax %10 -PUSH_eax #_process_expression2 -CALL_IMMEDIATE %FUNCTION_postpend_char -POP_ebx # _process_expression_locals -POP_ebx # _process_expression_locals -PUSH_eax #_process_expression2 -CALL_IMMEDIATE %FUNCTION_prepend_string -POP_ebx # _process_expression_locals -POP_ebx # _process_expression_locals -PUSH_eax #_process_expression1 -LOAD_EFFECTIVE_ADDRESS %20 -LOAD_INTEGER -PUSH_eax #_process_expression2 -CALL_IMMEDIATE %FUNCTION_emit -POP_ebx # _process_expression_locals -POP_ebx # _process_expression_locals +LOAD_IMMEDIATE_eax &STRING_postfix_expr_array_3 POP_ebx # _common_recursion STORE_INTEGER -LOAD_EFFECTIVE_ADDRESS %12 -LOAD_INTEGER -POP_ebx # _return_result_locals -RETURN -JUMP %_END_IF_sym_get_value_10 -:ELSE_sym_get_value_10 -LOAD_EFFECTIVE_ADDRESS %12 -LOAD_INTEGER +JUMP %_END_IF_postfix_expr_array_1 +:ELSE_postfix_expr_array_1 +PUSH_edi # Prevent overwriting in recursion +PUSH_ebp # Protect the old base pointer +COPY_esp_to_edi # Copy new base pointer +LOAD_IMMEDIATE_eax &STRING_postfix_expr_array_4 PUSH_eax #_process_expression1 -LOAD_EFFECTIVE_ADDRESS %12 -LOAD_INTEGER -PUSH_eax #_process_expression2 -LOAD_EFFECTIVE_ADDRESS %24 -LOAD_INTEGER -PUSH_eax #_process_expression2 -LOAD_IMMEDIATE_eax %0 -PUSH_eax #_process_expression2 -CALL_IMMEDIATE %FUNCTION_function_call +COPY_edi_to_ebp +CALL_IMMEDIATE %FUNCTION_emit_out POP_ebx # _process_expression_locals -POP_ebx # _process_expression_locals -POP_ebx # _process_expression_locals -POP_ebx # _process_expression_locals -POP_ebx # _return_result_locals -RETURN -:_END_IF_sym_get_value_10 -JUMP %_END_IF_sym_get_value_9 -:ELSE_sym_get_value_9 -:_END_IF_sym_get_value_9 -LOAD_EFFECTIVE_ADDRESS %0 - -PUSH_eax #_common_recursion -LOAD_EFFECTIVE_ADDRESS %20 -LOAD_INTEGER -PUSH_eax #_process_expression1 -LOAD_IMMEDIATE_eax &GLOBAL_global_symbol_list -LOAD_INTEGER -PUSH_eax #_process_expression2 -CALL_IMMEDIATE %FUNCTION_sym_lookup -POP_ebx # _process_expression_locals -POP_ebx # _process_expression_locals -POP_ebx # _common_recursion -STORE_INTEGER -# IF_sym_get_value_11 -LOAD_IMMEDIATE_eax %0 -PUSH_eax #_common_recursion -LOAD_EFFECTIVE_ADDRESS %4 -LOAD_INTEGER -POP_ebx # _common_recursion -CMP -SETNE -MOVEZBL -TEST -JUMP_EQ %ELSE_sym_get_value_11 +POP_ebp # Restore old base pointer +POP_edi # Prevent overwrite +PUSH_edi # Prevent overwriting in recursion +PUSH_ebp # Protect the old base pointer +COPY_esp_to_edi # Copy new base pointer +PUSH_edi # Prevent overwriting in recursion +PUSH_ebp # Protect the old base pointer +COPY_esp_to_edi # Copy new base pointer +PUSH_edi # Prevent overwriting in recursion +PUSH_ebp # Protect the old base pointer +COPY_esp_to_edi # Copy new base pointer LOAD_IMMEDIATE_eax &GLOBAL_current_target -PUSH_eax #_common_recursion -LOAD_EFFECTIVE_ADDRESS %4 LOAD_INTEGER # looking up offset # -> offset calculation LOAD_IMMEDIATE_ebx %12 ADD_ebx_to_eax LOAD_INTEGER -POP_ebx # _common_recursion -STORE_INTEGER -LOAD_EFFECTIVE_ADDRESS %12 -PUSH_eax #_common_recursion -LOAD_IMMEDIATE_eax &STRING_64 -PUSH_eax #_process_expression1 -LOAD_EFFECTIVE_ADDRESS %24 +# looking up offset +# -> offset calculation +LOAD_IMMEDIATE_ebx %4 +ADD_ebx_to_eax LOAD_INTEGER PUSH_eax #_process_expression1 -LOAD_IMMEDIATE_eax %10 -PUSH_eax #_process_expression2 -CALL_IMMEDIATE %FUNCTION_postpend_char -POP_ebx # _process_expression_locals -POP_ebx # _process_expression_locals -PUSH_eax #_process_expression2 -CALL_IMMEDIATE %FUNCTION_prepend_string -POP_ebx # _process_expression_locals +COPY_edi_to_ebp +CALL_IMMEDIATE %FUNCTION_ceil_log2 POP_ebx # _process_expression_locals +POP_ebp # Restore old base pointer +POP_edi # Prevent overwrite PUSH_eax #_process_expression1 -LOAD_EFFECTIVE_ADDRESS %20 -LOAD_INTEGER +COPY_edi_to_ebp +CALL_IMMEDIATE %FUNCTION_numerate_number +POP_ebx # _process_expression_locals +POP_ebp # Restore old base pointer +POP_edi # Prevent overwrite +PUSH_eax #_process_expression1 +COPY_edi_to_ebp +CALL_IMMEDIATE %FUNCTION_emit_out +POP_ebx # _process_expression_locals +POP_ebp # Restore old base pointer +POP_edi # Prevent overwrite +PUSH_edi # Prevent overwriting in recursion +PUSH_ebp # Protect the old base pointer +COPY_esp_to_edi # Copy new base pointer +LOAD_IMMEDIATE_eax &STRING_postfix_expr_array_5 +PUSH_eax #_process_expression1 +COPY_edi_to_ebp +CALL_IMMEDIATE %FUNCTION_emit_out +POP_ebx # _process_expression_locals +POP_ebp # Restore old base pointer +POP_edi # Prevent overwrite +:_END_IF_postfix_expr_array_1 +PUSH_edi # Prevent overwriting in recursion +PUSH_ebp # Protect the old base pointer +COPY_esp_to_edi # Copy new base pointer +LOAD_IMMEDIATE_eax &STRING_postfix_expr_array_6 +PUSH_eax #_process_expression1 +COPY_edi_to_ebp +CALL_IMMEDIATE %FUNCTION_emit_out +POP_ebx # _process_expression_locals +POP_ebp # Restore old base pointer +POP_edi # Prevent overwrite +PUSH_edi # Prevent overwriting in recursion +PUSH_ebp # Protect the old base pointer +COPY_esp_to_edi # Copy new base pointer +LOAD_IMMEDIATE_eax &STRING_postfix_expr_array_7 +PUSH_eax #_process_expression1 +LOAD_IMMEDIATE_eax &STRING_postfix_expr_array_8 PUSH_eax #_process_expression2 -CALL_IMMEDIATE %FUNCTION_emit +COPY_edi_to_ebp +CALL_IMMEDIATE %FUNCTION_require_match POP_ebx # _process_expression_locals POP_ebx # _process_expression_locals -POP_ebx # _common_recursion -STORE_INTEGER -# IF_sym_get_value_12 -LOAD_IMMEDIATE_eax %1 -PUSH_eax #_common_recursion -LOAD_IMMEDIATE_eax &STRING_65 +POP_ebp # Restore old base pointer +POP_edi # Prevent overwrite +# IF_postfix_expr_array_9 +PUSH_edi # Prevent overwriting in recursion +PUSH_ebp # Protect the old base pointer +COPY_esp_to_edi # Copy new base pointer +LOAD_IMMEDIATE_eax &STRING_postfix_expr_array_10 PUSH_eax #_process_expression1 LOAD_IMMEDIATE_eax &GLOBAL_global_token LOAD_INTEGER @@ -7586,63 +8103,636 @@ LOAD_IMMEDIATE_ebx %8 ADD_ebx_to_eax LOAD_INTEGER PUSH_eax #_process_expression2 +COPY_edi_to_ebp CALL_IMMEDIATE %FUNCTION_match POP_ebx # _process_expression_locals POP_ebx # _process_expression_locals -POP_ebx # _common_recursion -XOR_ebx_eax_into_eax +POP_ebp # Restore old base pointer +POP_edi # Prevent overwrite TEST -JUMP_EQ %ELSE_sym_get_value_12 -LOAD_EFFECTIVE_ADDRESS %12 +JUMP_EQ %ELSE_postfix_expr_array_9 +LOAD_BASE_ADDRESS_eax %-12 PUSH_eax #_common_recursion -LOAD_IMMEDIATE_eax &STRING_66 -PUSH_eax #_process_expression1 -LOAD_EFFECTIVE_ADDRESS %20 -LOAD_INTEGER -PUSH_eax #_process_expression2 -CALL_IMMEDIATE %FUNCTION_emit -POP_ebx # _process_expression_locals -POP_ebx # _process_expression_locals +LOAD_IMMEDIATE_eax &STRING_postfix_expr_array_11 POP_ebx # _common_recursion STORE_INTEGER -JUMP %_END_IF_sym_get_value_12 -:ELSE_sym_get_value_12 -:_END_IF_sym_get_value_12 -LOAD_EFFECTIVE_ADDRESS %12 -LOAD_INTEGER -POP_ebx # _return_result_locals -RETURN -JUMP %_END_IF_sym_get_value_11 -:ELSE_sym_get_value_11 -:_END_IF_sym_get_value_11 -LOAD_EFFECTIVE_ADDRESS %16 +JUMP %_END_IF_postfix_expr_array_9 +:ELSE_postfix_expr_array_9 +:_END_IF_postfix_expr_array_9 +PUSH_edi # Prevent overwriting in recursion +PUSH_ebp # Protect the old base pointer +COPY_esp_to_edi # Copy new base pointer +LOAD_BASE_ADDRESS_eax %-12 LOAD_INTEGER PUSH_eax #_process_expression1 -LOAD_IMMEDIATE_eax %2 -PUSH_eax #_process_expression2 -CALL_IMMEDIATE %FUNCTION_file_print -POP_ebx # _process_expression_locals -POP_ebx # _process_expression_locals -LOAD_IMMEDIATE_eax &STRING_67 -PUSH_eax #_process_expression1 -LOAD_IMMEDIATE_eax %2 -PUSH_eax #_process_expression2 -CALL_IMMEDIATE %FUNCTION_file_print -POP_ebx # _process_expression_locals -POP_ebx # _process_expression_locals -CALL_IMMEDIATE %FUNCTION_line_error -LOAD_IMMEDIATE_eax %1 -PUSH_eax #_process_expression1 -CALL_IMMEDIATE %FUNCTION_exit +COPY_edi_to_ebp +CALL_IMMEDIATE %FUNCTION_emit_out POP_ebx # _process_expression_locals +POP_ebp # Restore old base pointer +POP_edi # Prevent overwrite POP_ebx # _recursive_statement_locals +POP_ebx # _recursive_statement_locals +RETURN +# Defining function unary_expr_sizeof +:FUNCTION_unary_expr_sizeof +LOAD_IMMEDIATE_eax &GLOBAL_global_token +PUSH_eax #_common_recursion +LOAD_IMMEDIATE_eax &GLOBAL_global_token +LOAD_INTEGER +# looking up offset +LOAD_INTEGER +POP_ebx # _common_recursion +STORE_INTEGER +PUSH_edi # Prevent overwriting in recursion +PUSH_ebp # Protect the old base pointer +COPY_esp_to_edi # Copy new base pointer +LOAD_IMMEDIATE_eax &STRING_unary_expr_sizeof_0 +PUSH_eax #_process_expression1 +LOAD_IMMEDIATE_eax &STRING_unary_expr_sizeof_1 +PUSH_eax #_process_expression2 +COPY_edi_to_ebp +CALL_IMMEDIATE %FUNCTION_require_match +POP_ebx # _process_expression_locals +POP_ebx # _process_expression_locals +POP_ebp # Restore old base pointer +POP_edi # Prevent overwrite +# Defining local a +PUSH_edi # Prevent overwriting in recursion +PUSH_ebp # Protect the old base pointer +COPY_esp_to_edi # Copy new base pointer +COPY_edi_to_ebp +CALL_IMMEDIATE %FUNCTION_type_name +POP_ebp # Restore old base pointer +POP_edi # Prevent overwrite +PUSH_eax #a +PUSH_edi # Prevent overwriting in recursion +PUSH_ebp # Protect the old base pointer +COPY_esp_to_edi # Copy new base pointer +LOAD_IMMEDIATE_eax &STRING_unary_expr_sizeof_2 +PUSH_eax #_process_expression1 +LOAD_IMMEDIATE_eax &STRING_unary_expr_sizeof_3 +PUSH_eax #_process_expression2 +COPY_edi_to_ebp +CALL_IMMEDIATE %FUNCTION_require_match +POP_ebx # _process_expression_locals +POP_ebx # _process_expression_locals +POP_ebp # Restore old base pointer +POP_edi # Prevent overwrite +PUSH_edi # Prevent overwriting in recursion +PUSH_ebp # Protect the old base pointer +COPY_esp_to_edi # Copy new base pointer +LOAD_IMMEDIATE_eax &STRING_unary_expr_sizeof_4 +PUSH_eax #_process_expression1 +COPY_edi_to_ebp +CALL_IMMEDIATE %FUNCTION_emit_out +POP_ebx # _process_expression_locals +POP_ebp # Restore old base pointer +POP_edi # Prevent overwrite +PUSH_edi # Prevent overwriting in recursion +PUSH_ebp # Protect the old base pointer +COPY_esp_to_edi # Copy new base pointer +PUSH_edi # Prevent overwriting in recursion +PUSH_ebp # Protect the old base pointer +COPY_esp_to_edi # Copy new base pointer +LOAD_BASE_ADDRESS_eax %-8 +LOAD_INTEGER +# looking up offset +# -> offset calculation +LOAD_IMMEDIATE_ebx %4 +ADD_ebx_to_eax +LOAD_INTEGER +PUSH_eax #_process_expression1 +COPY_edi_to_ebp +CALL_IMMEDIATE %FUNCTION_numerate_number +POP_ebx # _process_expression_locals +POP_ebp # Restore old base pointer +POP_edi # Prevent overwrite +PUSH_eax #_process_expression1 +COPY_edi_to_ebp +CALL_IMMEDIATE %FUNCTION_emit_out +POP_ebx # _process_expression_locals +POP_ebp # Restore old base pointer +POP_edi # Prevent overwrite +PUSH_edi # Prevent overwriting in recursion +PUSH_ebp # Protect the old base pointer +COPY_esp_to_edi # Copy new base pointer +LOAD_IMMEDIATE_eax &STRING_unary_expr_sizeof_5 +PUSH_eax #_process_expression1 +COPY_edi_to_ebp +CALL_IMMEDIATE %FUNCTION_emit_out +POP_ebx # _process_expression_locals +POP_ebp # Restore old base pointer +POP_edi # Prevent overwrite +POP_ebx # _recursive_statement_locals +RETURN +# Defining function postfix_expr_stub +:FUNCTION_postfix_expr_stub +# IF_postfix_expr_stub_0 +PUSH_edi # Prevent overwriting in recursion +PUSH_ebp # Protect the old base pointer +COPY_esp_to_edi # Copy new base pointer +LOAD_IMMEDIATE_eax &STRING_postfix_expr_stub_1 +PUSH_eax #_process_expression1 +LOAD_IMMEDIATE_eax &GLOBAL_global_token +LOAD_INTEGER +# looking up offset +# -> offset calculation +LOAD_IMMEDIATE_ebx %8 +ADD_ebx_to_eax +LOAD_INTEGER +PUSH_eax #_process_expression2 +COPY_edi_to_ebp +CALL_IMMEDIATE %FUNCTION_match +POP_ebx # _process_expression_locals +POP_ebx # _process_expression_locals +POP_ebp # Restore old base pointer +POP_edi # Prevent overwrite +TEST +JUMP_EQ %ELSE_postfix_expr_stub_0 +PUSH_edi # Prevent overwriting in recursion +PUSH_ebp # Protect the old base pointer +COPY_esp_to_edi # Copy new base pointer +COPY_edi_to_ebp +CALL_IMMEDIATE %FUNCTION_postfix_expr_array +POP_ebp # Restore old base pointer +POP_edi # Prevent overwrite +PUSH_edi # Prevent overwriting in recursion +PUSH_ebp # Protect the old base pointer +COPY_esp_to_edi # Copy new base pointer +COPY_edi_to_ebp +CALL_IMMEDIATE %FUNCTION_postfix_expr_stub +POP_ebp # Restore old base pointer +POP_edi # Prevent overwrite +JUMP %_END_IF_postfix_expr_stub_0 +:ELSE_postfix_expr_stub_0 +:_END_IF_postfix_expr_stub_0 +# IF_postfix_expr_stub_2 +PUSH_edi # Prevent overwriting in recursion +PUSH_ebp # Protect the old base pointer +COPY_esp_to_edi # Copy new base pointer +LOAD_IMMEDIATE_eax &STRING_postfix_expr_stub_3 +PUSH_eax #_process_expression1 +LOAD_IMMEDIATE_eax &GLOBAL_global_token +LOAD_INTEGER +# looking up offset +# -> offset calculation +LOAD_IMMEDIATE_ebx %8 +ADD_ebx_to_eax +LOAD_INTEGER +PUSH_eax #_process_expression2 +COPY_edi_to_ebp +CALL_IMMEDIATE %FUNCTION_match +POP_ebx # _process_expression_locals +POP_ebx # _process_expression_locals +POP_ebp # Restore old base pointer +POP_edi # Prevent overwrite +TEST +JUMP_EQ %ELSE_postfix_expr_stub_2 +PUSH_edi # Prevent overwriting in recursion +PUSH_ebp # Protect the old base pointer +COPY_esp_to_edi # Copy new base pointer +COPY_edi_to_ebp +CALL_IMMEDIATE %FUNCTION_postfix_expr_arrow +POP_ebp # Restore old base pointer +POP_edi # Prevent overwrite +PUSH_edi # Prevent overwriting in recursion +PUSH_ebp # Protect the old base pointer +COPY_esp_to_edi # Copy new base pointer +COPY_edi_to_ebp +CALL_IMMEDIATE %FUNCTION_postfix_expr_stub +POP_ebp # Restore old base pointer +POP_edi # Prevent overwrite +JUMP %_END_IF_postfix_expr_stub_2 +:ELSE_postfix_expr_stub_2 +:_END_IF_postfix_expr_stub_2 +RETURN +# Defining function postfix_expr +:FUNCTION_postfix_expr +PUSH_edi # Prevent overwriting in recursion +PUSH_ebp # Protect the old base pointer +COPY_esp_to_edi # Copy new base pointer +COPY_edi_to_ebp +CALL_IMMEDIATE %FUNCTION_primary_expr +POP_ebp # Restore old base pointer +POP_edi # Prevent overwrite +PUSH_edi # Prevent overwriting in recursion +PUSH_ebp # Protect the old base pointer +COPY_esp_to_edi # Copy new base pointer +COPY_edi_to_ebp +CALL_IMMEDIATE %FUNCTION_postfix_expr_stub +POP_ebp # Restore old base pointer +POP_edi # Prevent overwrite +RETURN +# Defining function additive_expr_stub +:FUNCTION_additive_expr_stub +PUSH_edi # Prevent overwriting in recursion +PUSH_ebp # Protect the old base pointer +COPY_esp_to_edi # Copy new base pointer +LOAD_IMMEDIATE_eax &FUNCTION_postfix_expr +PUSH_eax #_process_expression1 +LOAD_IMMEDIATE_eax &STRING_additive_expr_stub_0 +PUSH_eax #_process_expression2 +LOAD_IMMEDIATE_eax &STRING_additive_expr_stub_1 +PUSH_eax #_process_expression2 +LOAD_IMMEDIATE_eax &FUNCTION_additive_expr_stub +PUSH_eax #_process_expression2 +COPY_edi_to_ebp +CALL_IMMEDIATE %FUNCTION_general_recursion +POP_ebx # _process_expression_locals +POP_ebx # _process_expression_locals +POP_ebx # _process_expression_locals +POP_ebx # _process_expression_locals +POP_ebp # Restore old base pointer +POP_edi # Prevent overwrite +PUSH_edi # Prevent overwriting in recursion +PUSH_ebp # Protect the old base pointer +COPY_esp_to_edi # Copy new base pointer +LOAD_IMMEDIATE_eax &FUNCTION_postfix_expr +PUSH_eax #_process_expression1 +LOAD_IMMEDIATE_eax &STRING_additive_expr_stub_2 +PUSH_eax #_process_expression2 +LOAD_IMMEDIATE_eax &STRING_additive_expr_stub_3 +PUSH_eax #_process_expression2 +LOAD_IMMEDIATE_eax &FUNCTION_additive_expr_stub +PUSH_eax #_process_expression2 +COPY_edi_to_ebp +CALL_IMMEDIATE %FUNCTION_general_recursion +POP_ebx # _process_expression_locals +POP_ebx # _process_expression_locals +POP_ebx # _process_expression_locals +POP_ebx # _process_expression_locals +POP_ebp # Restore old base pointer +POP_edi # Prevent overwrite +PUSH_edi # Prevent overwriting in recursion +PUSH_ebp # Protect the old base pointer +COPY_esp_to_edi # Copy new base pointer +LOAD_IMMEDIATE_eax &FUNCTION_postfix_expr +PUSH_eax #_process_expression1 +LOAD_IMMEDIATE_eax &STRING_additive_expr_stub_4 +PUSH_eax #_process_expression2 +LOAD_IMMEDIATE_eax &STRING_additive_expr_stub_5 +PUSH_eax #_process_expression2 +LOAD_IMMEDIATE_eax &FUNCTION_additive_expr_stub +PUSH_eax #_process_expression2 +COPY_edi_to_ebp +CALL_IMMEDIATE %FUNCTION_general_recursion +POP_ebx # _process_expression_locals +POP_ebx # _process_expression_locals +POP_ebx # _process_expression_locals +POP_ebx # _process_expression_locals +POP_ebp # Restore old base pointer +POP_edi # Prevent overwrite +PUSH_edi # Prevent overwriting in recursion +PUSH_ebp # Protect the old base pointer +COPY_esp_to_edi # Copy new base pointer +LOAD_IMMEDIATE_eax &FUNCTION_postfix_expr +PUSH_eax #_process_expression1 +LOAD_IMMEDIATE_eax &STRING_additive_expr_stub_6 +PUSH_eax #_process_expression2 +LOAD_IMMEDIATE_eax &STRING_additive_expr_stub_7 +PUSH_eax #_process_expression2 +LOAD_IMMEDIATE_eax &FUNCTION_additive_expr_stub +PUSH_eax #_process_expression2 +COPY_edi_to_ebp +CALL_IMMEDIATE %FUNCTION_general_recursion +POP_ebx # _process_expression_locals +POP_ebx # _process_expression_locals +POP_ebx # _process_expression_locals +POP_ebx # _process_expression_locals +POP_ebp # Restore old base pointer +POP_edi # Prevent overwrite +PUSH_edi # Prevent overwriting in recursion +PUSH_ebp # Protect the old base pointer +COPY_esp_to_edi # Copy new base pointer +LOAD_IMMEDIATE_eax &FUNCTION_postfix_expr +PUSH_eax #_process_expression1 +LOAD_IMMEDIATE_eax &STRING_additive_expr_stub_8 +PUSH_eax #_process_expression2 +LOAD_IMMEDIATE_eax &STRING_additive_expr_stub_9 +PUSH_eax #_process_expression2 +LOAD_IMMEDIATE_eax &FUNCTION_additive_expr_stub +PUSH_eax #_process_expression2 +COPY_edi_to_ebp +CALL_IMMEDIATE %FUNCTION_general_recursion +POP_ebx # _process_expression_locals +POP_ebx # _process_expression_locals +POP_ebx # _process_expression_locals +POP_ebx # _process_expression_locals +POP_ebp # Restore old base pointer +POP_edi # Prevent overwrite +PUSH_edi # Prevent overwriting in recursion +PUSH_ebp # Protect the old base pointer +COPY_esp_to_edi # Copy new base pointer +LOAD_IMMEDIATE_eax &FUNCTION_postfix_expr +PUSH_eax #_process_expression1 +LOAD_IMMEDIATE_eax &STRING_additive_expr_stub_10 +PUSH_eax #_process_expression2 +LOAD_IMMEDIATE_eax &STRING_additive_expr_stub_11 +PUSH_eax #_process_expression2 +LOAD_IMMEDIATE_eax &FUNCTION_additive_expr_stub +PUSH_eax #_process_expression2 +COPY_edi_to_ebp +CALL_IMMEDIATE %FUNCTION_general_recursion +POP_ebx # _process_expression_locals +POP_ebx # _process_expression_locals +POP_ebx # _process_expression_locals +POP_ebx # _process_expression_locals +POP_ebp # Restore old base pointer +POP_edi # Prevent overwrite +PUSH_edi # Prevent overwriting in recursion +PUSH_ebp # Protect the old base pointer +COPY_esp_to_edi # Copy new base pointer +LOAD_IMMEDIATE_eax &FUNCTION_postfix_expr +PUSH_eax #_process_expression1 +LOAD_IMMEDIATE_eax &STRING_additive_expr_stub_12 +PUSH_eax #_process_expression2 +LOAD_IMMEDIATE_eax &STRING_additive_expr_stub_13 +PUSH_eax #_process_expression2 +LOAD_IMMEDIATE_eax &FUNCTION_additive_expr_stub +PUSH_eax #_process_expression2 +COPY_edi_to_ebp +CALL_IMMEDIATE %FUNCTION_general_recursion +POP_ebx # _process_expression_locals +POP_ebx # _process_expression_locals +POP_ebx # _process_expression_locals +POP_ebx # _process_expression_locals +POP_ebp # Restore old base pointer +POP_edi # Prevent overwrite +RETURN +# Defining function additive_expr +:FUNCTION_additive_expr +PUSH_edi # Prevent overwriting in recursion +PUSH_ebp # Protect the old base pointer +COPY_esp_to_edi # Copy new base pointer +COPY_edi_to_ebp +CALL_IMMEDIATE %FUNCTION_postfix_expr +POP_ebp # Restore old base pointer +POP_edi # Prevent overwrite +PUSH_edi # Prevent overwriting in recursion +PUSH_ebp # Protect the old base pointer +COPY_esp_to_edi # Copy new base pointer +COPY_edi_to_ebp +CALL_IMMEDIATE %FUNCTION_additive_expr_stub +POP_ebp # Restore old base pointer +POP_edi # Prevent overwrite +RETURN +# Defining function relational_expr_stub +:FUNCTION_relational_expr_stub +PUSH_edi # Prevent overwriting in recursion +PUSH_ebp # Protect the old base pointer +COPY_esp_to_edi # Copy new base pointer +LOAD_IMMEDIATE_eax &FUNCTION_additive_expr +PUSH_eax #_process_expression1 +LOAD_IMMEDIATE_eax &STRING_relational_expr_stub_0 +PUSH_eax #_process_expression2 +LOAD_IMMEDIATE_eax &STRING_relational_expr_stub_1 +PUSH_eax #_process_expression2 +LOAD_IMMEDIATE_eax &FUNCTION_relational_expr_stub +PUSH_eax #_process_expression2 +COPY_edi_to_ebp +CALL_IMMEDIATE %FUNCTION_general_recursion +POP_ebx # _process_expression_locals +POP_ebx # _process_expression_locals +POP_ebx # _process_expression_locals +POP_ebx # _process_expression_locals +POP_ebp # Restore old base pointer +POP_edi # Prevent overwrite +PUSH_edi # Prevent overwriting in recursion +PUSH_ebp # Protect the old base pointer +COPY_esp_to_edi # Copy new base pointer +LOAD_IMMEDIATE_eax &FUNCTION_additive_expr +PUSH_eax #_process_expression1 +LOAD_IMMEDIATE_eax &STRING_relational_expr_stub_2 +PUSH_eax #_process_expression2 +LOAD_IMMEDIATE_eax &STRING_relational_expr_stub_3 +PUSH_eax #_process_expression2 +LOAD_IMMEDIATE_eax &FUNCTION_relational_expr_stub +PUSH_eax #_process_expression2 +COPY_edi_to_ebp +CALL_IMMEDIATE %FUNCTION_general_recursion +POP_ebx # _process_expression_locals +POP_ebx # _process_expression_locals +POP_ebx # _process_expression_locals +POP_ebx # _process_expression_locals +POP_ebp # Restore old base pointer +POP_edi # Prevent overwrite +PUSH_edi # Prevent overwriting in recursion +PUSH_ebp # Protect the old base pointer +COPY_esp_to_edi # Copy new base pointer +LOAD_IMMEDIATE_eax &FUNCTION_additive_expr +PUSH_eax #_process_expression1 +LOAD_IMMEDIATE_eax &STRING_relational_expr_stub_4 +PUSH_eax #_process_expression2 +LOAD_IMMEDIATE_eax &STRING_relational_expr_stub_5 +PUSH_eax #_process_expression2 +LOAD_IMMEDIATE_eax &FUNCTION_relational_expr_stub +PUSH_eax #_process_expression2 +COPY_edi_to_ebp +CALL_IMMEDIATE %FUNCTION_general_recursion +POP_ebx # _process_expression_locals +POP_ebx # _process_expression_locals +POP_ebx # _process_expression_locals +POP_ebx # _process_expression_locals +POP_ebp # Restore old base pointer +POP_edi # Prevent overwrite +PUSH_edi # Prevent overwriting in recursion +PUSH_ebp # Protect the old base pointer +COPY_esp_to_edi # Copy new base pointer +LOAD_IMMEDIATE_eax &FUNCTION_additive_expr +PUSH_eax #_process_expression1 +LOAD_IMMEDIATE_eax &STRING_relational_expr_stub_6 +PUSH_eax #_process_expression2 +LOAD_IMMEDIATE_eax &STRING_relational_expr_stub_7 +PUSH_eax #_process_expression2 +LOAD_IMMEDIATE_eax &FUNCTION_relational_expr_stub +PUSH_eax #_process_expression2 +COPY_edi_to_ebp +CALL_IMMEDIATE %FUNCTION_general_recursion +POP_ebx # _process_expression_locals +POP_ebx # _process_expression_locals +POP_ebx # _process_expression_locals +POP_ebx # _process_expression_locals +POP_ebp # Restore old base pointer +POP_edi # Prevent overwrite +PUSH_edi # Prevent overwriting in recursion +PUSH_ebp # Protect the old base pointer +COPY_esp_to_edi # Copy new base pointer +LOAD_IMMEDIATE_eax &FUNCTION_additive_expr +PUSH_eax #_process_expression1 +LOAD_IMMEDIATE_eax &STRING_relational_expr_stub_8 +PUSH_eax #_process_expression2 +LOAD_IMMEDIATE_eax &STRING_relational_expr_stub_9 +PUSH_eax #_process_expression2 +LOAD_IMMEDIATE_eax &FUNCTION_relational_expr_stub +PUSH_eax #_process_expression2 +COPY_edi_to_ebp +CALL_IMMEDIATE %FUNCTION_general_recursion +POP_ebx # _process_expression_locals +POP_ebx # _process_expression_locals +POP_ebx # _process_expression_locals +POP_ebx # _process_expression_locals +POP_ebp # Restore old base pointer +POP_edi # Prevent overwrite +PUSH_edi # Prevent overwriting in recursion +PUSH_ebp # Protect the old base pointer +COPY_esp_to_edi # Copy new base pointer +LOAD_IMMEDIATE_eax &FUNCTION_additive_expr +PUSH_eax #_process_expression1 +LOAD_IMMEDIATE_eax &STRING_relational_expr_stub_10 +PUSH_eax #_process_expression2 +LOAD_IMMEDIATE_eax &STRING_relational_expr_stub_11 +PUSH_eax #_process_expression2 +LOAD_IMMEDIATE_eax &FUNCTION_relational_expr_stub +PUSH_eax #_process_expression2 +COPY_edi_to_ebp +CALL_IMMEDIATE %FUNCTION_general_recursion +POP_ebx # _process_expression_locals +POP_ebx # _process_expression_locals +POP_ebx # _process_expression_locals +POP_ebx # _process_expression_locals +POP_ebp # Restore old base pointer +POP_edi # Prevent overwrite +RETURN +# Defining function relational_expr +:FUNCTION_relational_expr +PUSH_edi # Prevent overwriting in recursion +PUSH_ebp # Protect the old base pointer +COPY_esp_to_edi # Copy new base pointer +COPY_edi_to_ebp +CALL_IMMEDIATE %FUNCTION_additive_expr +POP_ebp # Restore old base pointer +POP_edi # Prevent overwrite +PUSH_edi # Prevent overwriting in recursion +PUSH_ebp # Protect the old base pointer +COPY_esp_to_edi # Copy new base pointer +COPY_edi_to_ebp +CALL_IMMEDIATE %FUNCTION_relational_expr_stub +POP_ebp # Restore old base pointer +POP_edi # Prevent overwrite +RETURN +# Defining function bitwise_expr_stub +:FUNCTION_bitwise_expr_stub +PUSH_edi # Prevent overwriting in recursion +PUSH_ebp # Protect the old base pointer +COPY_esp_to_edi # Copy new base pointer +LOAD_IMMEDIATE_eax &FUNCTION_relational_expr +PUSH_eax #_process_expression1 +LOAD_IMMEDIATE_eax &STRING_bitwise_expr_stub_0 +PUSH_eax #_process_expression2 +LOAD_IMMEDIATE_eax &STRING_bitwise_expr_stub_1 +PUSH_eax #_process_expression2 +LOAD_IMMEDIATE_eax &FUNCTION_bitwise_expr_stub +PUSH_eax #_process_expression2 +COPY_edi_to_ebp +CALL_IMMEDIATE %FUNCTION_general_recursion +POP_ebx # _process_expression_locals +POP_ebx # _process_expression_locals +POP_ebx # _process_expression_locals +POP_ebx # _process_expression_locals +POP_ebp # Restore old base pointer +POP_edi # Prevent overwrite +PUSH_edi # Prevent overwriting in recursion +PUSH_ebp # Protect the old base pointer +COPY_esp_to_edi # Copy new base pointer +LOAD_IMMEDIATE_eax &FUNCTION_relational_expr +PUSH_eax #_process_expression1 +LOAD_IMMEDIATE_eax &STRING_bitwise_expr_stub_2 +PUSH_eax #_process_expression2 +LOAD_IMMEDIATE_eax &STRING_bitwise_expr_stub_3 +PUSH_eax #_process_expression2 +LOAD_IMMEDIATE_eax &FUNCTION_bitwise_expr_stub +PUSH_eax #_process_expression2 +COPY_edi_to_ebp +CALL_IMMEDIATE %FUNCTION_general_recursion +POP_ebx # _process_expression_locals +POP_ebx # _process_expression_locals +POP_ebx # _process_expression_locals +POP_ebx # _process_expression_locals +POP_ebp # Restore old base pointer +POP_edi # Prevent overwrite +PUSH_edi # Prevent overwriting in recursion +PUSH_ebp # Protect the old base pointer +COPY_esp_to_edi # Copy new base pointer +LOAD_IMMEDIATE_eax &FUNCTION_relational_expr +PUSH_eax #_process_expression1 +LOAD_IMMEDIATE_eax &STRING_bitwise_expr_stub_4 +PUSH_eax #_process_expression2 +LOAD_IMMEDIATE_eax &STRING_bitwise_expr_stub_5 +PUSH_eax #_process_expression2 +LOAD_IMMEDIATE_eax &FUNCTION_bitwise_expr_stub +PUSH_eax #_process_expression2 +COPY_edi_to_ebp +CALL_IMMEDIATE %FUNCTION_general_recursion +POP_ebx # _process_expression_locals +POP_ebx # _process_expression_locals +POP_ebx # _process_expression_locals +POP_ebx # _process_expression_locals +POP_ebp # Restore old base pointer +POP_edi # Prevent overwrite +PUSH_edi # Prevent overwriting in recursion +PUSH_ebp # Protect the old base pointer +COPY_esp_to_edi # Copy new base pointer +LOAD_IMMEDIATE_eax &FUNCTION_relational_expr +PUSH_eax #_process_expression1 +LOAD_IMMEDIATE_eax &STRING_bitwise_expr_stub_6 +PUSH_eax #_process_expression2 +LOAD_IMMEDIATE_eax &STRING_bitwise_expr_stub_7 +PUSH_eax #_process_expression2 +LOAD_IMMEDIATE_eax &FUNCTION_bitwise_expr_stub +PUSH_eax #_process_expression2 +COPY_edi_to_ebp +CALL_IMMEDIATE %FUNCTION_general_recursion +POP_ebx # _process_expression_locals +POP_ebx # _process_expression_locals +POP_ebx # _process_expression_locals +POP_ebx # _process_expression_locals +POP_ebp # Restore old base pointer +POP_edi # Prevent overwrite +PUSH_edi # Prevent overwriting in recursion +PUSH_ebp # Protect the old base pointer +COPY_esp_to_edi # Copy new base pointer +LOAD_IMMEDIATE_eax &FUNCTION_relational_expr +PUSH_eax #_process_expression1 +LOAD_IMMEDIATE_eax &STRING_bitwise_expr_stub_8 +PUSH_eax #_process_expression2 +LOAD_IMMEDIATE_eax &STRING_bitwise_expr_stub_9 +PUSH_eax #_process_expression2 +LOAD_IMMEDIATE_eax &FUNCTION_bitwise_expr_stub +PUSH_eax #_process_expression2 +COPY_edi_to_ebp +CALL_IMMEDIATE %FUNCTION_general_recursion +POP_ebx # _process_expression_locals +POP_ebx # _process_expression_locals +POP_ebx # _process_expression_locals +POP_ebx # _process_expression_locals +POP_ebp # Restore old base pointer +POP_edi # Prevent overwrite +RETURN +# Defining function bitwise_expr +:FUNCTION_bitwise_expr +PUSH_edi # Prevent overwriting in recursion +PUSH_ebp # Protect the old base pointer +COPY_esp_to_edi # Copy new base pointer +COPY_edi_to_ebp +CALL_IMMEDIATE %FUNCTION_relational_expr +POP_ebp # Restore old base pointer +POP_edi # Prevent overwrite +PUSH_edi # Prevent overwriting in recursion +PUSH_ebp # Protect the old base pointer +COPY_esp_to_edi # Copy new base pointer +COPY_edi_to_ebp +CALL_IMMEDIATE %FUNCTION_bitwise_expr_stub +POP_ebp # Restore old base pointer +POP_edi # Prevent overwrite RETURN # Defining function primary_expr :FUNCTION_primary_expr # IF_primary_expr_0 - -LOAD_IMMEDIATE_eax %48 -PUSH_eax #_common_recursion +PUSH_edi # Prevent overwriting in recursion +PUSH_ebp # Protect the old base pointer +COPY_esp_to_edi # Copy new base pointer +LOAD_IMMEDIATE_eax &STRING_primary_expr_1 +PUSH_eax #_process_expression1 LOAD_IMMEDIATE_eax &GLOBAL_global_token LOAD_INTEGER # looking up offset @@ -7650,190 +8740,131 @@ LOAD_INTEGER LOAD_IMMEDIATE_ebx %8 ADD_ebx_to_eax LOAD_INTEGER -PUSH_eax #_common_recursion -LOAD_IMMEDIATE_eax %0 -POP_ebx # _common_recursion -ADD_ebx_to_eax -LOAD_BYTE -POP_ebx # _common_recursion -CMP -SETLE -MOVEZBL -PUSH_eax #_common_recursion -LOAD_IMMEDIATE_eax &GLOBAL_global_token -LOAD_INTEGER -# looking up offset -# -> offset calculation -LOAD_IMMEDIATE_ebx %8 -ADD_ebx_to_eax -LOAD_INTEGER -PUSH_eax #_common_recursion -LOAD_IMMEDIATE_eax %0 -POP_ebx # _common_recursion -ADD_ebx_to_eax -LOAD_BYTE -PUSH_eax #_common_recursion -LOAD_IMMEDIATE_eax %57 -POP_ebx # _common_recursion -CMP -SETLE -MOVEZBL -POP_ebx # _common_recursion -AND_eax_ebx +PUSH_eax #_process_expression2 +COPY_edi_to_ebp +CALL_IMMEDIATE %FUNCTION_match +POP_ebx # _process_expression_locals +POP_ebx # _process_expression_locals +POP_ebp # Restore old base pointer +POP_edi # Prevent overwrite TEST JUMP_EQ %ELSE_primary_expr_0 - -LOAD_EFFECTIVE_ADDRESS %8 -PUSH_eax #_common_recursion -LOAD_IMMEDIATE_eax &STRING_68 -PUSH_eax #_process_expression1 -LOAD_IMMEDIATE_eax &GLOBAL_global_token -LOAD_INTEGER -# looking up offset -# -> offset calculation -LOAD_IMMEDIATE_ebx %8 -ADD_ebx_to_eax -LOAD_INTEGER -PUSH_eax #_process_expression1 -LOAD_IMMEDIATE_eax %10 -PUSH_eax #_process_expression2 -CALL_IMMEDIATE %FUNCTION_postpend_char -POP_ebx # _process_expression_locals -POP_ebx # _process_expression_locals -PUSH_eax #_process_expression2 -CALL_IMMEDIATE %FUNCTION_prepend_string -POP_ebx # _process_expression_locals -POP_ebx # _process_expression_locals -PUSH_eax #_process_expression1 -LOAD_EFFECTIVE_ADDRESS %16 -LOAD_INTEGER -PUSH_eax #_process_expression2 -CALL_IMMEDIATE %FUNCTION_emit -POP_ebx # _process_expression_locals -POP_ebx # _process_expression_locals -POP_ebx # _common_recursion -STORE_INTEGER -LOAD_IMMEDIATE_eax &GLOBAL_global_token -PUSH_eax #_common_recursion -LOAD_IMMEDIATE_eax &GLOBAL_global_token -LOAD_INTEGER -# looking up offset -LOAD_INTEGER -POP_ebx # _common_recursion -STORE_INTEGER +PUSH_edi # Prevent overwriting in recursion +PUSH_ebp # Protect the old base pointer +COPY_esp_to_edi # Copy new base pointer +COPY_edi_to_ebp +CALL_IMMEDIATE %FUNCTION_unary_expr_sizeof +POP_ebp # Restore old base pointer +POP_edi # Prevent overwrite JUMP %_END_IF_primary_expr_0 - :ELSE_primary_expr_0 - -# IF_primary_expr_1 -LOAD_IMMEDIATE_eax %97 -PUSH_eax #_common_recursion -LOAD_IMMEDIATE_eax &GLOBAL_global_token -LOAD_INTEGER -# looking up offset -# -> offset calculation -LOAD_IMMEDIATE_ebx %8 -ADD_ebx_to_eax -LOAD_INTEGER -PUSH_eax #_common_recursion -LOAD_IMMEDIATE_eax %0 -POP_ebx # _common_recursion -ADD_ebx_to_eax -LOAD_BYTE -POP_ebx # _common_recursion -CMP -SETLE -MOVEZBL -PUSH_eax #_common_recursion -LOAD_IMMEDIATE_eax &GLOBAL_global_token -LOAD_INTEGER -# looking up offset -# -> offset calculation -LOAD_IMMEDIATE_ebx %8 -ADD_ebx_to_eax -LOAD_INTEGER -PUSH_eax #_common_recursion -LOAD_IMMEDIATE_eax %0 -POP_ebx # _common_recursion -ADD_ebx_to_eax -LOAD_BYTE -PUSH_eax #_common_recursion -LOAD_IMMEDIATE_eax %122 -POP_ebx # _common_recursion -CMP -SETLE -MOVEZBL -POP_ebx # _common_recursion -AND_eax_ebx -PUSH_eax #_common_recursion -LOAD_IMMEDIATE_eax %65 -PUSH_eax #_common_recursion -LOAD_IMMEDIATE_eax &GLOBAL_global_token -LOAD_INTEGER -# looking up offset -# -> offset calculation -LOAD_IMMEDIATE_ebx %8 -ADD_ebx_to_eax -LOAD_INTEGER -PUSH_eax #_common_recursion -LOAD_IMMEDIATE_eax %0 -POP_ebx # _common_recursion -ADD_ebx_to_eax -LOAD_BYTE -POP_ebx # _common_recursion -CMP -SETLE -MOVEZBL -PUSH_eax #_common_recursion -LOAD_IMMEDIATE_eax &GLOBAL_global_token -LOAD_INTEGER -# looking up offset -# -> offset calculation -LOAD_IMMEDIATE_ebx %8 -ADD_ebx_to_eax -LOAD_INTEGER -PUSH_eax #_common_recursion -LOAD_IMMEDIATE_eax %0 -POP_ebx # _common_recursion -ADD_ebx_to_eax -LOAD_BYTE -PUSH_eax #_common_recursion -LOAD_IMMEDIATE_eax %90 -POP_ebx # _common_recursion -CMP -SETLE -MOVEZBL -POP_ebx # _common_recursion -AND_eax_ebx -POP_ebx # _common_recursion -OR_eax_ebx -TEST -JUMP_EQ %ELSE_primary_expr_1 -LOAD_EFFECTIVE_ADDRESS %8 -PUSH_eax #_common_recursion -LOAD_IMMEDIATE_eax &GLOBAL_global_token -LOAD_INTEGER -# looking up offset -# -> offset calculation -LOAD_IMMEDIATE_ebx %8 -ADD_ebx_to_eax -LOAD_INTEGER -PUSH_eax #_process_expression1 -LOAD_EFFECTIVE_ADDRESS %16 -LOAD_INTEGER -PUSH_eax #_process_expression2 -LOAD_EFFECTIVE_ADDRESS %16 -LOAD_INTEGER -PUSH_eax #_process_expression2 -CALL_IMMEDIATE %FUNCTION_sym_get_value -POP_ebx # _process_expression_locals -POP_ebx # _process_expression_locals -POP_ebx # _process_expression_locals -POP_ebx # _common_recursion -STORE_INTEGER -JUMP %_END_IF_primary_expr_1 -:ELSE_primary_expr_1 # IF_primary_expr_2 +LOAD_IMMEDIATE_eax %45 +PUSH_eax #_common_recursion +LOAD_IMMEDIATE_eax &GLOBAL_global_token +LOAD_INTEGER +# looking up offset +# -> offset calculation +LOAD_IMMEDIATE_ebx %8 +ADD_ebx_to_eax +LOAD_INTEGER +PUSH_eax #_common_recursion +LOAD_IMMEDIATE_eax %0 +POP_ebx # _common_recursion +ADD_ebx_to_eax +LOAD_BYTE +POP_ebx # _common_recursion +CMP +SETE +MOVEZBL +TEST +JUMP_EQ %ELSE_primary_expr_2 +PUSH_edi # Prevent overwriting in recursion +PUSH_ebp # Protect the old base pointer +COPY_esp_to_edi # Copy new base pointer +LOAD_IMMEDIATE_eax &STRING_primary_expr_3 +PUSH_eax #_process_expression1 +COPY_edi_to_ebp +CALL_IMMEDIATE %FUNCTION_emit_out +POP_ebx # _process_expression_locals +POP_ebp # Restore old base pointer +POP_edi # Prevent overwrite +PUSH_edi # Prevent overwriting in recursion +PUSH_ebp # Protect the old base pointer +COPY_esp_to_edi # Copy new base pointer +LOAD_IMMEDIATE_eax &FUNCTION_primary_expr +PUSH_eax #_process_expression1 +COPY_edi_to_ebp +CALL_IMMEDIATE %FUNCTION_common_recursion +POP_ebx # _process_expression_locals +POP_ebp # Restore old base pointer +POP_edi # Prevent overwrite +PUSH_edi # Prevent overwriting in recursion +PUSH_ebp # Protect the old base pointer +COPY_esp_to_edi # Copy new base pointer +LOAD_IMMEDIATE_eax &STRING_primary_expr_4 +PUSH_eax #_process_expression1 +COPY_edi_to_ebp +CALL_IMMEDIATE %FUNCTION_emit_out +POP_ebx # _process_expression_locals +POP_ebp # Restore old base pointer +POP_edi # Prevent overwrite +JUMP %_END_IF_primary_expr_2 +:ELSE_primary_expr_2 +# IF_primary_expr_5 +LOAD_IMMEDIATE_eax %33 +PUSH_eax #_common_recursion +LOAD_IMMEDIATE_eax &GLOBAL_global_token +LOAD_INTEGER +# looking up offset +# -> offset calculation +LOAD_IMMEDIATE_ebx %8 +ADD_ebx_to_eax +LOAD_INTEGER +PUSH_eax #_common_recursion +LOAD_IMMEDIATE_eax %0 +POP_ebx # _common_recursion +ADD_ebx_to_eax +LOAD_BYTE +POP_ebx # _common_recursion +CMP +SETE +MOVEZBL +TEST +JUMP_EQ %ELSE_primary_expr_5 +PUSH_edi # Prevent overwriting in recursion +PUSH_ebp # Protect the old base pointer +COPY_esp_to_edi # Copy new base pointer +LOAD_IMMEDIATE_eax &STRING_primary_expr_6 +PUSH_eax #_process_expression1 +COPY_edi_to_ebp +CALL_IMMEDIATE %FUNCTION_emit_out +POP_ebx # _process_expression_locals +POP_ebp # Restore old base pointer +POP_edi # Prevent overwrite +PUSH_edi # Prevent overwriting in recursion +PUSH_ebp # Protect the old base pointer +COPY_esp_to_edi # Copy new base pointer +LOAD_IMMEDIATE_eax &FUNCTION_postfix_expr +PUSH_eax #_process_expression1 +COPY_edi_to_ebp +CALL_IMMEDIATE %FUNCTION_common_recursion +POP_ebx # _process_expression_locals +POP_ebp # Restore old base pointer +POP_edi # Prevent overwrite +PUSH_edi # Prevent overwriting in recursion +PUSH_ebp # Protect the old base pointer +COPY_esp_to_edi # Copy new base pointer +LOAD_IMMEDIATE_eax &STRING_primary_expr_7 +PUSH_eax #_process_expression1 +COPY_edi_to_ebp +CALL_IMMEDIATE %FUNCTION_emit_out +POP_ebx # _process_expression_locals +POP_ebp # Restore old base pointer +POP_edi # Prevent overwrite +JUMP %_END_IF_primary_expr_5 +:ELSE_primary_expr_5 +# IF_primary_expr_8 LOAD_IMMEDIATE_eax &GLOBAL_global_token LOAD_INTEGER # looking up offset @@ -7853,7 +8884,7 @@ CMP SETE MOVEZBL TEST -JUMP_EQ %ELSE_primary_expr_2 +JUMP_EQ %ELSE_primary_expr_8 LOAD_IMMEDIATE_eax &GLOBAL_global_token PUSH_eax #_common_recursion LOAD_IMMEDIATE_eax &GLOBAL_global_token @@ -7862,29 +8893,29 @@ LOAD_INTEGER LOAD_INTEGER POP_ebx # _common_recursion STORE_INTEGER -LOAD_EFFECTIVE_ADDRESS %8 -PUSH_eax #_common_recursion -LOAD_EFFECTIVE_ADDRESS %12 -LOAD_INTEGER -PUSH_eax #_process_expression1 -LOAD_EFFECTIVE_ADDRESS %12 -LOAD_INTEGER -PUSH_eax #_process_expression2 +PUSH_edi # Prevent overwriting in recursion +PUSH_ebp # Protect the old base pointer +COPY_esp_to_edi # Copy new base pointer +COPY_edi_to_ebp CALL_IMMEDIATE %FUNCTION_expression -POP_ebx # _process_expression_locals -POP_ebx # _process_expression_locals -POP_ebx # _common_recursion -STORE_INTEGER -LOAD_IMMEDIATE_eax &STRING_69 +POP_ebp # Restore old base pointer +POP_edi # Prevent overwrite +PUSH_edi # Prevent overwriting in recursion +PUSH_ebp # Protect the old base pointer +COPY_esp_to_edi # Copy new base pointer +LOAD_IMMEDIATE_eax &STRING_primary_expr_9 PUSH_eax #_process_expression1 -LOAD_IMMEDIATE_eax &STRING_70 +LOAD_IMMEDIATE_eax &STRING_primary_expr_10 PUSH_eax #_process_expression2 +COPY_edi_to_ebp CALL_IMMEDIATE %FUNCTION_require_match POP_ebx # _process_expression_locals POP_ebx # _process_expression_locals -JUMP %_END_IF_primary_expr_2 -:ELSE_primary_expr_2 -# IF_primary_expr_3 +POP_ebp # Restore old base pointer +POP_edi # Prevent overwrite +JUMP %_END_IF_primary_expr_8 +:ELSE_primary_expr_8 +# IF_primary_expr_11 LOAD_IMMEDIATE_eax &GLOBAL_global_token LOAD_INTEGER # looking up offset @@ -7904,120 +8935,17 @@ CMP SETE MOVEZBL TEST -JUMP_EQ %ELSE_primary_expr_3 -LOAD_EFFECTIVE_ADDRESS %8 -PUSH_eax #_common_recursion -LOAD_IMMEDIATE_eax &STRING_71 -PUSH_eax #_process_expression1 -LOAD_EFFECTIVE_ADDRESS %16 -LOAD_INTEGER -PUSH_eax #_process_expression2 -CALL_IMMEDIATE %FUNCTION_emit -POP_ebx # _process_expression_locals -POP_ebx # _process_expression_locals -POP_ebx # _common_recursion -STORE_INTEGER -# IF_primary_expr_4 -LOAD_IMMEDIATE_eax %92 -PUSH_eax #_common_recursion -LOAD_IMMEDIATE_eax &GLOBAL_global_token -LOAD_INTEGER -# looking up offset -# -> offset calculation -LOAD_IMMEDIATE_ebx %8 -ADD_ebx_to_eax -LOAD_INTEGER -PUSH_eax #_common_recursion -LOAD_IMMEDIATE_eax %1 -POP_ebx # _common_recursion -ADD_ebx_to_eax -LOAD_BYTE -POP_ebx # _common_recursion -CMP -SETE -MOVEZBL -TEST -JUMP_EQ %ELSE_primary_expr_4 -LOAD_EFFECTIVE_ADDRESS %8 -PUSH_eax #_common_recursion -LOAD_IMMEDIATE_eax &GLOBAL_global_token -LOAD_INTEGER -# looking up offset -# -> offset calculation -LOAD_IMMEDIATE_ebx %8 -ADD_ebx_to_eax -LOAD_INTEGER -PUSH_eax #_common_recursion -LOAD_IMMEDIATE_eax %1 -POP_ebx # _common_recursion -ADD_ebx_to_eax -PUSH_eax #_process_expression1 -CALL_IMMEDIATE %FUNCTION_escape_lookup -POP_ebx # _process_expression_locals -PUSH_eax #_process_expression1 -CALL_IMMEDIATE %FUNCTION_numerate_number -POP_ebx # _process_expression_locals -PUSH_eax #_process_expression1 -LOAD_EFFECTIVE_ADDRESS %16 -LOAD_INTEGER -PUSH_eax #_process_expression2 -CALL_IMMEDIATE %FUNCTION_emit -POP_ebx # _process_expression_locals -POP_ebx # _process_expression_locals -POP_ebx # _common_recursion -STORE_INTEGER -JUMP %_END_IF_primary_expr_4 -:ELSE_primary_expr_4 -LOAD_EFFECTIVE_ADDRESS %8 -PUSH_eax #_common_recursion -LOAD_IMMEDIATE_eax &GLOBAL_global_token -LOAD_INTEGER -# looking up offset -# -> offset calculation -LOAD_IMMEDIATE_ebx %8 -ADD_ebx_to_eax -LOAD_INTEGER -PUSH_eax #_common_recursion -LOAD_IMMEDIATE_eax %1 -POP_ebx # _common_recursion -ADD_ebx_to_eax -LOAD_BYTE -PUSH_eax #_process_expression1 -CALL_IMMEDIATE %FUNCTION_numerate_number -POP_ebx # _process_expression_locals -PUSH_eax #_process_expression1 -LOAD_EFFECTIVE_ADDRESS %16 -LOAD_INTEGER -PUSH_eax #_process_expression2 -CALL_IMMEDIATE %FUNCTION_emit -POP_ebx # _process_expression_locals -POP_ebx # _process_expression_locals -POP_ebx # _common_recursion -STORE_INTEGER -:_END_IF_primary_expr_4 -LOAD_EFFECTIVE_ADDRESS %8 -PUSH_eax #_common_recursion -LOAD_IMMEDIATE_eax &STRING_72 -PUSH_eax #_process_expression1 -LOAD_EFFECTIVE_ADDRESS %16 -LOAD_INTEGER -PUSH_eax #_process_expression2 -CALL_IMMEDIATE %FUNCTION_emit -POP_ebx # _process_expression_locals -POP_ebx # _process_expression_locals -POP_ebx # _common_recursion -STORE_INTEGER -LOAD_IMMEDIATE_eax &GLOBAL_global_token -PUSH_eax #_common_recursion -LOAD_IMMEDIATE_eax &GLOBAL_global_token -LOAD_INTEGER -# looking up offset -LOAD_INTEGER -POP_ebx # _common_recursion -STORE_INTEGER -JUMP %_END_IF_primary_expr_3 -:ELSE_primary_expr_3 -# IF_primary_expr_5 +JUMP_EQ %ELSE_primary_expr_11 +PUSH_edi # Prevent overwriting in recursion +PUSH_ebp # Protect the old base pointer +COPY_esp_to_edi # Copy new base pointer +COPY_edi_to_ebp +CALL_IMMEDIATE %FUNCTION_primary_expr_char +POP_ebp # Restore old base pointer +POP_edi # Prevent overwrite +JUMP %_END_IF_primary_expr_11 +:ELSE_primary_expr_11 +# IF_primary_expr_12 LOAD_IMMEDIATE_eax &GLOBAL_global_token LOAD_INTEGER # looking up offset @@ -8037,90 +8965,20 @@ CMP SETE MOVEZBL TEST -JUMP_EQ %ELSE_primary_expr_5 -# Defining local number_string -LOAD_IMMEDIATE_eax &GLOBAL_string_num -LOAD_INTEGER -PUSH_eax #_process_expression1 -CALL_IMMEDIATE %FUNCTION_numerate_number -POP_ebx # _process_expression_locals -PUSH_eax #number_string -LOAD_EFFECTIVE_ADDRESS %12 -PUSH_eax #_common_recursion -LOAD_IMMEDIATE_eax &STRING_73 -PUSH_eax #_process_expression1 -LOAD_EFFECTIVE_ADDRESS %20 -LOAD_INTEGER -PUSH_eax #_process_expression2 -CALL_IMMEDIATE %FUNCTION_emit -POP_ebx # _process_expression_locals -POP_ebx # _process_expression_locals -POP_ebx # _common_recursion -STORE_INTEGER -LOAD_EFFECTIVE_ADDRESS %12 -PUSH_eax #_common_recursion -LOAD_EFFECTIVE_ADDRESS %4 -LOAD_INTEGER -PUSH_eax #_process_expression1 -LOAD_EFFECTIVE_ADDRESS %20 -LOAD_INTEGER -PUSH_eax #_process_expression2 -CALL_IMMEDIATE %FUNCTION_emit -POP_ebx # _process_expression_locals -POP_ebx # _process_expression_locals -POP_ebx # _common_recursion -STORE_INTEGER -LOAD_EFFECTIVE_ADDRESS %12 -PUSH_eax #_common_recursion -LOAD_IMMEDIATE_eax &STRING_74 -PUSH_eax #_process_expression1 -LOAD_EFFECTIVE_ADDRESS %20 -LOAD_INTEGER -PUSH_eax #_process_expression2 -CALL_IMMEDIATE %FUNCTION_emit -POP_ebx # _process_expression_locals -POP_ebx # _process_expression_locals -POP_ebx # _common_recursion -STORE_INTEGER -LOAD_IMMEDIATE_eax &GLOBAL_strings_list -PUSH_eax #_common_recursion -LOAD_IMMEDIATE_eax &STRING_75 -PUSH_eax #_process_expression1 -LOAD_IMMEDIATE_eax &GLOBAL_strings_list -LOAD_INTEGER -PUSH_eax #_process_expression2 -CALL_IMMEDIATE %FUNCTION_emit -POP_ebx # _process_expression_locals -POP_ebx # _process_expression_locals -POP_ebx # _common_recursion -STORE_INTEGER -LOAD_IMMEDIATE_eax &GLOBAL_strings_list -PUSH_eax #_common_recursion -LOAD_EFFECTIVE_ADDRESS %4 -LOAD_INTEGER -PUSH_eax #_process_expression1 -LOAD_IMMEDIATE_eax &GLOBAL_strings_list -LOAD_INTEGER -PUSH_eax #_process_expression2 -CALL_IMMEDIATE %FUNCTION_emit -POP_ebx # _process_expression_locals -POP_ebx # _process_expression_locals -POP_ebx # _common_recursion -STORE_INTEGER -LOAD_IMMEDIATE_eax &GLOBAL_strings_list -PUSH_eax #_common_recursion -LOAD_IMMEDIATE_eax &STRING_76 -PUSH_eax #_process_expression1 -LOAD_IMMEDIATE_eax &GLOBAL_strings_list -LOAD_INTEGER -PUSH_eax #_process_expression2 -CALL_IMMEDIATE %FUNCTION_emit -POP_ebx # _process_expression_locals -POP_ebx # _process_expression_locals -POP_ebx # _common_recursion -STORE_INTEGER -LOAD_IMMEDIATE_eax &GLOBAL_strings_list -PUSH_eax #_common_recursion +JUMP_EQ %ELSE_primary_expr_12 +PUSH_edi # Prevent overwriting in recursion +PUSH_ebp # Protect the old base pointer +COPY_esp_to_edi # Copy new base pointer +COPY_edi_to_ebp +CALL_IMMEDIATE %FUNCTION_primary_expr_string +POP_ebp # Restore old base pointer +POP_edi # Prevent overwrite +JUMP %_END_IF_primary_expr_12 +:ELSE_primary_expr_12 +# IF_primary_expr_13 +PUSH_edi # Prevent overwriting in recursion +PUSH_ebp # Protect the old base pointer +COPY_esp_to_edi # Copy new base pointer LOAD_IMMEDIATE_eax &GLOBAL_global_token LOAD_INTEGER # looking up offset @@ -8128,46 +8986,35 @@ LOAD_INTEGER LOAD_IMMEDIATE_ebx %8 ADD_ebx_to_eax LOAD_INTEGER -PUSH_eax #_process_expression1 -CALL_IMMEDIATE %FUNCTION_parse_string -POP_ebx # _process_expression_locals -PUSH_eax #_process_expression1 -LOAD_IMMEDIATE_eax &GLOBAL_strings_list -LOAD_INTEGER -PUSH_eax #_process_expression2 -CALL_IMMEDIATE %FUNCTION_emit -POP_ebx # _process_expression_locals -POP_ebx # _process_expression_locals -POP_ebx # _common_recursion -STORE_INTEGER -LOAD_IMMEDIATE_eax &GLOBAL_global_token PUSH_eax #_common_recursion -LOAD_IMMEDIATE_eax &GLOBAL_global_token -LOAD_INTEGER -# looking up offset -LOAD_INTEGER -POP_ebx # _common_recursion -STORE_INTEGER -LOAD_IMMEDIATE_eax &GLOBAL_string_num -PUSH_eax #_common_recursion -LOAD_IMMEDIATE_eax &GLOBAL_string_num -LOAD_INTEGER -PUSH_eax #_common_recursion -LOAD_IMMEDIATE_eax %1 +LOAD_IMMEDIATE_eax %0 POP_ebx # _common_recursion ADD_ebx_to_eax -POP_ebx # _common_recursion -STORE_INTEGER -POP_ebx # _recursive_statement_locals -JUMP %_END_IF_primary_expr_5 -:ELSE_primary_expr_5 -LOAD_IMMEDIATE_eax &STRING_77 +LOAD_BYTE PUSH_eax #_process_expression1 -LOAD_IMMEDIATE_eax %2 +LOAD_IMMEDIATE_eax &STRING_primary_expr_14 PUSH_eax #_process_expression2 -CALL_IMMEDIATE %FUNCTION_file_print +COPY_edi_to_ebp +CALL_IMMEDIATE %FUNCTION_in_set POP_ebx # _process_expression_locals POP_ebx # _process_expression_locals +POP_ebp # Restore old base pointer +POP_edi # Prevent overwrite +TEST +JUMP_EQ %ELSE_primary_expr_13 +PUSH_edi # Prevent overwriting in recursion +PUSH_ebp # Protect the old base pointer +COPY_esp_to_edi # Copy new base pointer +COPY_edi_to_ebp +CALL_IMMEDIATE %FUNCTION_primary_expr_variable +POP_ebp # Restore old base pointer +POP_edi # Prevent overwrite +JUMP %_END_IF_primary_expr_13 +:ELSE_primary_expr_13 +# IF_primary_expr_15 +PUSH_edi # Prevent overwriting in recursion +PUSH_ebp # Protect the old base pointer +COPY_esp_to_edi # Copy new base pointer LOAD_IMMEDIATE_eax &GLOBAL_global_token LOAD_INTEGER # looking up offset @@ -8175,2758 +9022,332 @@ LOAD_INTEGER LOAD_IMMEDIATE_ebx %8 ADD_ebx_to_eax LOAD_INTEGER +PUSH_eax #_common_recursion +LOAD_IMMEDIATE_eax %0 +POP_ebx # _common_recursion +ADD_ebx_to_eax +LOAD_BYTE PUSH_eax #_process_expression1 -LOAD_IMMEDIATE_eax %2 +LOAD_IMMEDIATE_eax &STRING_primary_expr_16 PUSH_eax #_process_expression2 -CALL_IMMEDIATE %FUNCTION_file_print +COPY_edi_to_ebp +CALL_IMMEDIATE %FUNCTION_in_set POP_ebx # _process_expression_locals POP_ebx # _process_expression_locals -LOAD_IMMEDIATE_eax &STRING_78 -PUSH_eax #_process_expression1 -LOAD_IMMEDIATE_eax %2 -PUSH_eax #_process_expression2 -CALL_IMMEDIATE %FUNCTION_file_print -POP_ebx # _process_expression_locals -POP_ebx # _process_expression_locals -CALL_IMMEDIATE %FUNCTION_line_error -LOAD_IMMEDIATE_eax %1 -PUSH_eax #_process_expression1 -CALL_IMMEDIATE %FUNCTION_exit -POP_ebx # _process_expression_locals +POP_ebp # Restore old base pointer +POP_edi # Prevent overwrite +TEST +JUMP_EQ %ELSE_primary_expr_15 +PUSH_edi # Prevent overwriting in recursion +PUSH_ebp # Protect the old base pointer +COPY_esp_to_edi # Copy new base pointer +COPY_edi_to_ebp +CALL_IMMEDIATE %FUNCTION_primary_expr_number +POP_ebp # Restore old base pointer +POP_edi # Prevent overwrite +JUMP %_END_IF_primary_expr_15 +:ELSE_primary_expr_15 +PUSH_edi # Prevent overwriting in recursion +PUSH_ebp # Protect the old base pointer +COPY_esp_to_edi # Copy new base pointer +COPY_edi_to_ebp +CALL_IMMEDIATE %FUNCTION_primary_expr_failure +POP_ebp # Restore old base pointer +POP_edi # Prevent overwrite +:_END_IF_primary_expr_15 +:_END_IF_primary_expr_13 +:_END_IF_primary_expr_12 +:_END_IF_primary_expr_11 +:_END_IF_primary_expr_8 :_END_IF_primary_expr_5 -:_END_IF_primary_expr_3 :_END_IF_primary_expr_2 -:_END_IF_primary_expr_1 :_END_IF_primary_expr_0 - -LOAD_EFFECTIVE_ADDRESS %8 -LOAD_INTEGER -RETURN -# Defining function pre_recursion -:FUNCTION_pre_recursion -LOAD_IMMEDIATE_eax &GLOBAL_last_type -PUSH_eax #_common_recursion -LOAD_IMMEDIATE_eax &GLOBAL_current_target -LOAD_INTEGER -POP_ebx # _common_recursion -STORE_INTEGER -LOAD_IMMEDIATE_eax &GLOBAL_global_token -PUSH_eax #_common_recursion -LOAD_IMMEDIATE_eax &GLOBAL_global_token -LOAD_INTEGER -# looking up offset -LOAD_INTEGER -POP_ebx # _common_recursion -STORE_INTEGER -LOAD_EFFECTIVE_ADDRESS %8 -PUSH_eax #_common_recursion -LOAD_IMMEDIATE_eax &STRING_79 -PUSH_eax #_process_expression1 -LOAD_EFFECTIVE_ADDRESS %16 -LOAD_INTEGER -PUSH_eax #_process_expression2 -CALL_IMMEDIATE %FUNCTION_emit -POP_ebx # _process_expression_locals -POP_ebx # _process_expression_locals -POP_ebx # _common_recursion -STORE_INTEGER -LOAD_EFFECTIVE_ADDRESS %4 -LOAD_INTEGER -# looking up offset -# -> offset calculation -LOAD_IMMEDIATE_ebx %24 -ADD_ebx_to_eax -PUSH_eax #_common_recursion -LOAD_EFFECTIVE_ADDRESS %8 -LOAD_INTEGER -# looking up offset -# -> offset calculation -LOAD_IMMEDIATE_ebx %24 -ADD_ebx_to_eax -LOAD_INTEGER -PUSH_eax #_common_recursion -LOAD_IMMEDIATE_eax %1 -POP_ebx # _common_recursion -ADD_ebx_to_eax -POP_ebx # _common_recursion -STORE_INTEGER -LOAD_EFFECTIVE_ADDRESS %8 -LOAD_INTEGER -RETURN -# Defining function promote_type -:FUNCTION_promote_type -# IF_promote_type_0 - -LOAD_IMMEDIATE_eax %0 -PUSH_eax #_common_recursion -LOAD_EFFECTIVE_ADDRESS %12 -LOAD_INTEGER -POP_ebx # _common_recursion -CMP -SETE -MOVEZBL -TEST -JUMP_EQ %ELSE_promote_type_0 - -LOAD_EFFECTIVE_ADDRESS %4 -LOAD_INTEGER -RETURN -JUMP %_END_IF_promote_type_0 - -:ELSE_promote_type_0 - -:_END_IF_promote_type_0 - -# IF_promote_type_1 -LOAD_IMMEDIATE_eax %0 -PUSH_eax #_common_recursion -LOAD_EFFECTIVE_ADDRESS %8 -LOAD_INTEGER -POP_ebx # _common_recursion -CMP -SETE -MOVEZBL -TEST -JUMP_EQ %ELSE_promote_type_1 -LOAD_EFFECTIVE_ADDRESS %8 -LOAD_INTEGER -RETURN -JUMP %_END_IF_promote_type_1 -:ELSE_promote_type_1 -:_END_IF_promote_type_1 -# Defining local i -PUSH_eax #i -# FOR_initialization_promote_type_2 -LOAD_EFFECTIVE_ADDRESS %0 - -PUSH_eax #_common_recursion -LOAD_IMMEDIATE_eax &GLOBAL_global_types -LOAD_INTEGER -POP_ebx # _common_recursion -STORE_INTEGER -:FOR_promote_type_2 -LOAD_IMMEDIATE_eax %0 -PUSH_eax #_common_recursion -LOAD_EFFECTIVE_ADDRESS %4 -LOAD_INTEGER -POP_ebx # _common_recursion -CMP -SETNE -MOVEZBL -TEST -JUMP_EQ %FOR_END_promote_type_2 -JUMP %FOR_THEN_promote_type_2 -:FOR_ITER_promote_type_2 -LOAD_EFFECTIVE_ADDRESS %0 - -PUSH_eax #_common_recursion -LOAD_EFFECTIVE_ADDRESS %4 -LOAD_INTEGER -# looking up offset -LOAD_INTEGER -POP_ebx # _common_recursion -STORE_INTEGER -JUMP %FOR_promote_type_2 -:FOR_THEN_promote_type_2 -# IF_promote_type_3 -LOAD_EFFECTIVE_ADDRESS %12 -LOAD_INTEGER -# looking up offset -# -> offset calculation -LOAD_IMMEDIATE_ebx %24 -ADD_ebx_to_eax -LOAD_INTEGER -PUSH_eax #_common_recursion -LOAD_EFFECTIVE_ADDRESS %4 -LOAD_INTEGER -# looking up offset -# -> offset calculation -LOAD_IMMEDIATE_ebx %24 -ADD_ebx_to_eax -LOAD_INTEGER -POP_ebx # _common_recursion -CMP -SETE -MOVEZBL -TEST -JUMP_EQ %ELSE_promote_type_3 -LOAD_EFFECTIVE_ADDRESS %12 -LOAD_INTEGER -POP_ebx # _return_result_locals -RETURN -JUMP %_END_IF_promote_type_3 -:ELSE_promote_type_3 -:_END_IF_promote_type_3 -# IF_promote_type_4 -LOAD_EFFECTIVE_ADDRESS %8 -LOAD_INTEGER -# looking up offset -# -> offset calculation -LOAD_IMMEDIATE_ebx %24 -ADD_ebx_to_eax -LOAD_INTEGER -PUSH_eax #_common_recursion -LOAD_EFFECTIVE_ADDRESS %4 -LOAD_INTEGER -# looking up offset -# -> offset calculation -LOAD_IMMEDIATE_ebx %24 -ADD_ebx_to_eax -LOAD_INTEGER -POP_ebx # _common_recursion -CMP -SETE -MOVEZBL -TEST -JUMP_EQ %ELSE_promote_type_4 -LOAD_EFFECTIVE_ADDRESS %8 -LOAD_INTEGER -POP_ebx # _return_result_locals -RETURN -JUMP %_END_IF_promote_type_4 -:ELSE_promote_type_4 -:_END_IF_promote_type_4 -# IF_promote_type_5 -LOAD_EFFECTIVE_ADDRESS %12 -LOAD_INTEGER -# looking up offset -# -> offset calculation -LOAD_IMMEDIATE_ebx %24 -ADD_ebx_to_eax -LOAD_INTEGER -PUSH_eax #_common_recursion -LOAD_EFFECTIVE_ADDRESS %4 -LOAD_INTEGER -# looking up offset -# -> offset calculation -LOAD_IMMEDIATE_ebx %12 -ADD_ebx_to_eax -LOAD_INTEGER -# looking up offset -# -> offset calculation -LOAD_IMMEDIATE_ebx %24 -ADD_ebx_to_eax -LOAD_INTEGER -POP_ebx # _common_recursion -CMP -SETE -MOVEZBL -TEST -JUMP_EQ %ELSE_promote_type_5 -LOAD_EFFECTIVE_ADDRESS %12 -LOAD_INTEGER -POP_ebx # _return_result_locals -RETURN -JUMP %_END_IF_promote_type_5 -:ELSE_promote_type_5 -:_END_IF_promote_type_5 -# IF_promote_type_6 -LOAD_EFFECTIVE_ADDRESS %8 -LOAD_INTEGER -# looking up offset -# -> offset calculation -LOAD_IMMEDIATE_ebx %24 -ADD_ebx_to_eax -LOAD_INTEGER -PUSH_eax #_common_recursion -LOAD_EFFECTIVE_ADDRESS %4 -LOAD_INTEGER -# looking up offset -# -> offset calculation -LOAD_IMMEDIATE_ebx %12 -ADD_ebx_to_eax -LOAD_INTEGER -# looking up offset -# -> offset calculation -LOAD_IMMEDIATE_ebx %24 -ADD_ebx_to_eax -LOAD_INTEGER -POP_ebx # _common_recursion -CMP -SETE -MOVEZBL -TEST -JUMP_EQ %ELSE_promote_type_6 -LOAD_EFFECTIVE_ADDRESS %8 -LOAD_INTEGER -POP_ebx # _return_result_locals -RETURN -JUMP %_END_IF_promote_type_6 -:ELSE_promote_type_6 -:_END_IF_promote_type_6 -JUMP %FOR_ITER_promote_type_2 -:FOR_END_promote_type_2 -LOAD_IMMEDIATE_eax %0 -POP_ebx # _return_result_locals -RETURN -# Defining function post_recursion -:FUNCTION_post_recursion -LOAD_IMMEDIATE_eax &GLOBAL_current_target -PUSH_eax #_common_recursion -LOAD_IMMEDIATE_eax &GLOBAL_current_target -LOAD_INTEGER -PUSH_eax #_process_expression1 -LOAD_IMMEDIATE_eax &GLOBAL_last_type -LOAD_INTEGER -PUSH_eax #_process_expression2 -CALL_IMMEDIATE %FUNCTION_promote_type -POP_ebx # _process_expression_locals -POP_ebx # _process_expression_locals -POP_ebx # _common_recursion -STORE_INTEGER -LOAD_EFFECTIVE_ADDRESS %4 -LOAD_INTEGER -# looking up offset -# -> offset calculation -LOAD_IMMEDIATE_ebx %24 -ADD_ebx_to_eax -PUSH_eax #_common_recursion -LOAD_EFFECTIVE_ADDRESS %8 -LOAD_INTEGER -# looking up offset -# -> offset calculation -LOAD_IMMEDIATE_ebx %24 -ADD_ebx_to_eax -LOAD_INTEGER -PUSH_eax #_common_recursion -LOAD_IMMEDIATE_eax %1 -POP_ebx # _common_recursion -SUBTRACT_eax_from_ebx_into_ebx -MOVE_ebx_to_eax -POP_ebx # _common_recursion -STORE_INTEGER -LOAD_EFFECTIVE_ADDRESS %8 -PUSH_eax #_common_recursion -LOAD_IMMEDIATE_eax &STRING_80 -PUSH_eax #_process_expression1 -LOAD_EFFECTIVE_ADDRESS %16 -LOAD_INTEGER -PUSH_eax #_process_expression2 -CALL_IMMEDIATE %FUNCTION_emit -POP_ebx # _process_expression_locals -POP_ebx # _process_expression_locals -POP_ebx # _common_recursion -STORE_INTEGER -LOAD_EFFECTIVE_ADDRESS %8 -LOAD_INTEGER -RETURN -# Defining function ceil_log2 -:FUNCTION_ceil_log2 -# Defining local result -LOAD_IMMEDIATE_eax %0 -PUSH_eax #result -# IF_ceil_log2_0 - -LOAD_EFFECTIVE_ADDRESS %8 -LOAD_INTEGER -PUSH_eax #_common_recursion -LOAD_EFFECTIVE_ADDRESS %12 -LOAD_INTEGER -PUSH_eax #_common_recursion -LOAD_IMMEDIATE_eax %1 -POP_ebx # _common_recursion -SUBTRACT_eax_from_ebx_into_ebx -MOVE_ebx_to_eax -POP_ebx # _common_recursion -AND_eax_ebx -PUSH_eax #_common_recursion -LOAD_IMMEDIATE_eax %0 -POP_ebx # _common_recursion -CMP -SETE -MOVEZBL -TEST -JUMP_EQ %ELSE_ceil_log2_0 - -LOAD_EFFECTIVE_ADDRESS %0 - -PUSH_eax #_common_recursion -LOAD_IMMEDIATE_eax %0 -PUSH_eax #_common_recursion -LOAD_IMMEDIATE_eax %1 -POP_ebx # _common_recursion -SUBTRACT_eax_from_ebx_into_ebx -MOVE_ebx_to_eax -POP_ebx # _common_recursion -STORE_INTEGER -JUMP %_END_IF_ceil_log2_0 - -:ELSE_ceil_log2_0 - -:_END_IF_ceil_log2_0 - -:WHILE_ceil_log2_1 -LOAD_EFFECTIVE_ADDRESS %8 -LOAD_INTEGER -PUSH_eax #_common_recursion -LOAD_IMMEDIATE_eax %0 -POP_ebx # _common_recursion -CMP -SETG -MOVEZBL -TEST -JUMP_EQ %END_WHILE_ceil_log2_1 -# THEN_while_ceil_log2_1 -LOAD_EFFECTIVE_ADDRESS %0 - -PUSH_eax #_common_recursion -LOAD_EFFECTIVE_ADDRESS %4 -LOAD_INTEGER -PUSH_eax #_common_recursion -LOAD_IMMEDIATE_eax %1 -POP_ebx # _common_recursion -ADD_ebx_to_eax -POP_ebx # _common_recursion -STORE_INTEGER -LOAD_EFFECTIVE_ADDRESS %8 -PUSH_eax #_common_recursion -LOAD_EFFECTIVE_ADDRESS %12 -LOAD_INTEGER -PUSH_eax #_common_recursion -LOAD_IMMEDIATE_eax %1 -COPY_eax_to_ecx -POP_eax -SAR_eax_cl -POP_ebx # _common_recursion -STORE_INTEGER -JUMP %WHILE_ceil_log2_1 -:END_WHILE_ceil_log2_1 -LOAD_EFFECTIVE_ADDRESS %0 - -LOAD_INTEGER -POP_ebx # _return_result_locals -RETURN -# Defining function postfix_expr -:FUNCTION_postfix_expr -LOAD_EFFECTIVE_ADDRESS %8 -PUSH_eax #_common_recursion -LOAD_EFFECTIVE_ADDRESS %12 -LOAD_INTEGER -PUSH_eax #_process_expression1 -LOAD_EFFECTIVE_ADDRESS %12 -LOAD_INTEGER -PUSH_eax #_process_expression2 -CALL_IMMEDIATE %FUNCTION_primary_expr -POP_ebx # _process_expression_locals -POP_ebx # _process_expression_locals -POP_ebx # _common_recursion -STORE_INTEGER -:WHILE_postfix_expr_0 - -LOAD_IMMEDIATE_eax %1 -TEST -JUMP_EQ %END_WHILE_postfix_expr_0 - -# THEN_while_postfix_expr_0 - -# IF_postfix_expr_1 -LOAD_IMMEDIATE_eax &GLOBAL_global_token -LOAD_INTEGER -# looking up offset -# -> offset calculation -LOAD_IMMEDIATE_ebx %8 -ADD_ebx_to_eax -LOAD_INTEGER -PUSH_eax #_common_recursion -LOAD_IMMEDIATE_eax %0 -POP_ebx # _common_recursion -ADD_ebx_to_eax -LOAD_BYTE -PUSH_eax #_common_recursion -LOAD_IMMEDIATE_eax %91 -POP_ebx # _common_recursion -CMP -SETE -MOVEZBL -TEST -JUMP_EQ %ELSE_postfix_expr_1 -# Defining local target -LOAD_IMMEDIATE_eax &GLOBAL_current_target -LOAD_INTEGER -PUSH_eax #target -# Defining local a -LOAD_IMMEDIATE_eax &GLOBAL_current_target -LOAD_INTEGER -PUSH_eax #a -LOAD_EFFECTIVE_ADDRESS %16 -PUSH_eax #_common_recursion -LOAD_EFFECTIVE_ADDRESS %20 -LOAD_INTEGER -PUSH_eax #_process_expression1 -LOAD_EFFECTIVE_ADDRESS %20 -LOAD_INTEGER -PUSH_eax #_process_expression2 -CALL_IMMEDIATE %FUNCTION_pre_recursion -POP_ebx # _process_expression_locals -POP_ebx # _process_expression_locals -POP_ebx # _common_recursion -STORE_INTEGER -LOAD_EFFECTIVE_ADDRESS %16 -PUSH_eax #_common_recursion -LOAD_EFFECTIVE_ADDRESS %20 -LOAD_INTEGER -PUSH_eax #_process_expression1 -LOAD_EFFECTIVE_ADDRESS %20 -LOAD_INTEGER -PUSH_eax #_process_expression2 -CALL_IMMEDIATE %FUNCTION_expression -POP_ebx # _process_expression_locals -POP_ebx # _process_expression_locals -POP_ebx # _common_recursion -STORE_INTEGER -LOAD_EFFECTIVE_ADDRESS %16 -PUSH_eax #_common_recursion -LOAD_EFFECTIVE_ADDRESS %20 -LOAD_INTEGER -PUSH_eax #_process_expression1 -LOAD_EFFECTIVE_ADDRESS %20 -LOAD_INTEGER -PUSH_eax #_process_expression2 -CALL_IMMEDIATE %FUNCTION_post_recursion -POP_ebx # _process_expression_locals -POP_ebx # _process_expression_locals -POP_ebx # _common_recursion -STORE_INTEGER -# IF_postfix_expr_2 -LOAD_IMMEDIATE_eax %1 -PUSH_eax #_common_recursion -LOAD_EFFECTIVE_ADDRESS %4 -LOAD_INTEGER -# looking up offset -# -> offset calculation -LOAD_IMMEDIATE_ebx %12 -ADD_ebx_to_eax -LOAD_INTEGER -# looking up offset -# -> offset calculation -LOAD_IMMEDIATE_ebx %4 -ADD_ebx_to_eax -LOAD_INTEGER -POP_ebx # _common_recursion -CMP -SETNE -MOVEZBL -TEST -JUMP_EQ %ELSE_postfix_expr_2 -LOAD_EFFECTIVE_ADDRESS %16 -PUSH_eax #_common_recursion -LOAD_IMMEDIATE_eax &STRING_81 -PUSH_eax #_process_expression1 -LOAD_EFFECTIVE_ADDRESS %24 -LOAD_INTEGER -PUSH_eax #_process_expression2 -CALL_IMMEDIATE %FUNCTION_emit -POP_ebx # _process_expression_locals -POP_ebx # _process_expression_locals -POP_ebx # _common_recursion -STORE_INTEGER -LOAD_EFFECTIVE_ADDRESS %16 -PUSH_eax #_common_recursion -LOAD_EFFECTIVE_ADDRESS %4 -LOAD_INTEGER -# looking up offset -# -> offset calculation -LOAD_IMMEDIATE_ebx %12 -ADD_ebx_to_eax -LOAD_INTEGER -# looking up offset -# -> offset calculation -LOAD_IMMEDIATE_ebx %4 -ADD_ebx_to_eax -LOAD_INTEGER -PUSH_eax #_process_expression1 -CALL_IMMEDIATE %FUNCTION_ceil_log2 -POP_ebx # _process_expression_locals -PUSH_eax #_process_expression1 -CALL_IMMEDIATE %FUNCTION_numerate_number -POP_ebx # _process_expression_locals -PUSH_eax #_process_expression1 -LOAD_EFFECTIVE_ADDRESS %24 -LOAD_INTEGER -PUSH_eax #_process_expression2 -CALL_IMMEDIATE %FUNCTION_emit -POP_ebx # _process_expression_locals -POP_ebx # _process_expression_locals -POP_ebx # _common_recursion -STORE_INTEGER -LOAD_EFFECTIVE_ADDRESS %16 -PUSH_eax #_common_recursion -LOAD_IMMEDIATE_eax &STRING_82 -PUSH_eax #_process_expression1 -LOAD_EFFECTIVE_ADDRESS %24 -LOAD_INTEGER -PUSH_eax #_process_expression2 -CALL_IMMEDIATE %FUNCTION_emit -POP_ebx # _process_expression_locals -POP_ebx # _process_expression_locals -POP_ebx # _common_recursion -STORE_INTEGER -JUMP %_END_IF_postfix_expr_2 -:ELSE_postfix_expr_2 -:_END_IF_postfix_expr_2 -LOAD_EFFECTIVE_ADDRESS %16 -PUSH_eax #_common_recursion -LOAD_IMMEDIATE_eax &STRING_83 -PUSH_eax #_process_expression1 -LOAD_EFFECTIVE_ADDRESS %24 -LOAD_INTEGER -PUSH_eax #_process_expression2 -CALL_IMMEDIATE %FUNCTION_emit -POP_ebx # _process_expression_locals -POP_ebx # _process_expression_locals -POP_ebx # _common_recursion -STORE_INTEGER -LOAD_IMMEDIATE_eax &GLOBAL_current_target -PUSH_eax #_common_recursion -LOAD_EFFECTIVE_ADDRESS %8 -LOAD_INTEGER -POP_ebx # _common_recursion -STORE_INTEGER -# IF_postfix_expr_3 -LOAD_IMMEDIATE_eax %1 -PUSH_eax #_common_recursion -LOAD_IMMEDIATE_eax &STRING_84 -PUSH_eax #_process_expression1 -LOAD_IMMEDIATE_eax &GLOBAL_global_token -LOAD_INTEGER -# looking up offset -LOAD_INTEGER -# looking up offset -# -> offset calculation -LOAD_IMMEDIATE_ebx %8 -ADD_ebx_to_eax -LOAD_INTEGER -PUSH_eax #_process_expression2 -CALL_IMMEDIATE %FUNCTION_match -POP_ebx # _process_expression_locals -POP_ebx # _process_expression_locals -POP_ebx # _common_recursion -XOR_ebx_eax_into_eax -TEST -JUMP_EQ %ELSE_postfix_expr_3 -# IF_postfix_expr_4 -LOAD_IMMEDIATE_eax %4 -PUSH_eax #_common_recursion -LOAD_EFFECTIVE_ADDRESS %4 -LOAD_INTEGER -# looking up offset -# -> offset calculation -LOAD_IMMEDIATE_ebx %12 -ADD_ebx_to_eax -LOAD_INTEGER -# looking up offset -# -> offset calculation -LOAD_IMMEDIATE_ebx %4 -ADD_ebx_to_eax -LOAD_INTEGER -POP_ebx # _common_recursion -CMP -SETE -MOVEZBL -TEST -JUMP_EQ %ELSE_postfix_expr_4 -LOAD_EFFECTIVE_ADDRESS %16 -PUSH_eax #_common_recursion -LOAD_IMMEDIATE_eax &STRING_85 -PUSH_eax #_process_expression1 -LOAD_EFFECTIVE_ADDRESS %24 -LOAD_INTEGER -PUSH_eax #_process_expression2 -CALL_IMMEDIATE %FUNCTION_emit -POP_ebx # _process_expression_locals -POP_ebx # _process_expression_locals -POP_ebx # _common_recursion -STORE_INTEGER -JUMP %_END_IF_postfix_expr_4 -:ELSE_postfix_expr_4 -LOAD_EFFECTIVE_ADDRESS %16 -PUSH_eax #_common_recursion -LOAD_IMMEDIATE_eax &STRING_86 -PUSH_eax #_process_expression1 -LOAD_EFFECTIVE_ADDRESS %24 -LOAD_INTEGER -PUSH_eax #_process_expression2 -CALL_IMMEDIATE %FUNCTION_emit -POP_ebx # _process_expression_locals -POP_ebx # _process_expression_locals -POP_ebx # _common_recursion -STORE_INTEGER -:_END_IF_postfix_expr_4 -JUMP %_END_IF_postfix_expr_3 -:ELSE_postfix_expr_3 -:_END_IF_postfix_expr_3 -LOAD_IMMEDIATE_eax &STRING_87 -PUSH_eax #_process_expression1 -LOAD_IMMEDIATE_eax &STRING_88 -PUSH_eax #_process_expression2 -CALL_IMMEDIATE %FUNCTION_require_match -POP_ebx # _process_expression_locals -POP_ebx # _process_expression_locals -POP_ebx # _recursive_statement_locals -POP_ebx # _recursive_statement_locals -JUMP %_END_IF_postfix_expr_1 -:ELSE_postfix_expr_1 -# IF_postfix_expr_5 -LOAD_IMMEDIATE_eax &STRING_89 -PUSH_eax #_process_expression1 -LOAD_IMMEDIATE_eax &GLOBAL_global_token -LOAD_INTEGER -# looking up offset -# -> offset calculation -LOAD_IMMEDIATE_ebx %8 -ADD_ebx_to_eax -LOAD_INTEGER -PUSH_eax #_process_expression2 -CALL_IMMEDIATE %FUNCTION_match -POP_ebx # _process_expression_locals -POP_ebx # _process_expression_locals -TEST -JUMP_EQ %ELSE_postfix_expr_5 -LOAD_EFFECTIVE_ADDRESS %8 -PUSH_eax #_common_recursion -LOAD_IMMEDIATE_eax &STRING_90 -PUSH_eax #_process_expression1 -LOAD_EFFECTIVE_ADDRESS %16 -LOAD_INTEGER -PUSH_eax #_process_expression2 -CALL_IMMEDIATE %FUNCTION_emit -POP_ebx # _process_expression_locals -POP_ebx # _process_expression_locals -POP_ebx # _common_recursion -STORE_INTEGER -LOAD_IMMEDIATE_eax &GLOBAL_global_token -PUSH_eax #_common_recursion -LOAD_IMMEDIATE_eax &GLOBAL_global_token -LOAD_INTEGER -# looking up offset -LOAD_INTEGER -POP_ebx # _common_recursion -STORE_INTEGER -# Defining local i -PUSH_eax #i -# FOR_initialization_postfix_expr_6 -LOAD_EFFECTIVE_ADDRESS %0 - -PUSH_eax #_common_recursion -LOAD_IMMEDIATE_eax &GLOBAL_current_target -LOAD_INTEGER -# looking up offset -# -> offset calculation -LOAD_IMMEDIATE_ebx %16 -ADD_ebx_to_eax -LOAD_INTEGER -POP_ebx # _common_recursion -STORE_INTEGER -:FOR_postfix_expr_6 -LOAD_IMMEDIATE_eax %0 -PUSH_eax #_common_recursion -LOAD_EFFECTIVE_ADDRESS %4 -LOAD_INTEGER -POP_ebx # _common_recursion -CMP -SETNE -MOVEZBL -TEST -JUMP_EQ %FOR_END_postfix_expr_6 -JUMP %FOR_THEN_postfix_expr_6 -:FOR_ITER_postfix_expr_6 -LOAD_EFFECTIVE_ADDRESS %0 - -PUSH_eax #_common_recursion -LOAD_EFFECTIVE_ADDRESS %4 -LOAD_INTEGER -# looking up offset -# -> offset calculation -LOAD_IMMEDIATE_ebx %16 -ADD_ebx_to_eax -LOAD_INTEGER -POP_ebx # _common_recursion -STORE_INTEGER -JUMP %FOR_postfix_expr_6 -:FOR_THEN_postfix_expr_6 -# IF_postfix_expr_7 -LOAD_EFFECTIVE_ADDRESS %0 - -LOAD_INTEGER -# looking up offset -# -> offset calculation -LOAD_IMMEDIATE_ebx %24 -ADD_ebx_to_eax -LOAD_INTEGER -PUSH_eax #_process_expression1 -LOAD_IMMEDIATE_eax &GLOBAL_global_token -LOAD_INTEGER -# looking up offset -# -> offset calculation -LOAD_IMMEDIATE_ebx %8 -ADD_ebx_to_eax -LOAD_INTEGER -PUSH_eax #_process_expression2 -CALL_IMMEDIATE %FUNCTION_match -POP_ebx # _process_expression_locals -POP_ebx # _process_expression_locals -TEST -JUMP_EQ %ELSE_postfix_expr_7 -JUMP %FOR_END_postfix_expr_6 -JUMP %_END_IF_postfix_expr_7 -:ELSE_postfix_expr_7 -:_END_IF_postfix_expr_7 -JUMP %FOR_ITER_postfix_expr_6 -:FOR_END_postfix_expr_6 -# IF_postfix_expr_8 -LOAD_IMMEDIATE_eax %0 -PUSH_eax #_common_recursion -LOAD_EFFECTIVE_ADDRESS %4 -LOAD_INTEGER -POP_ebx # _common_recursion -CMP -SETE -MOVEZBL -TEST -JUMP_EQ %ELSE_postfix_expr_8 -LOAD_IMMEDIATE_eax &STRING_91 -PUSH_eax #_process_expression1 -LOAD_IMMEDIATE_eax %2 -PUSH_eax #_process_expression2 -CALL_IMMEDIATE %FUNCTION_file_print -POP_ebx # _process_expression_locals -POP_ebx # _process_expression_locals -LOAD_IMMEDIATE_eax &GLOBAL_current_target -LOAD_INTEGER -# looking up offset -# -> offset calculation -LOAD_IMMEDIATE_ebx %24 -ADD_ebx_to_eax -LOAD_INTEGER -PUSH_eax #_process_expression1 -LOAD_IMMEDIATE_eax %2 -PUSH_eax #_process_expression2 -CALL_IMMEDIATE %FUNCTION_file_print -POP_ebx # _process_expression_locals -POP_ebx # _process_expression_locals -LOAD_IMMEDIATE_eax &STRING_92 -PUSH_eax #_process_expression1 -LOAD_IMMEDIATE_eax %2 -PUSH_eax #_process_expression2 -CALL_IMMEDIATE %FUNCTION_file_print -POP_ebx # _process_expression_locals -POP_ebx # _process_expression_locals -LOAD_IMMEDIATE_eax &GLOBAL_global_token -LOAD_INTEGER -# looking up offset -# -> offset calculation -LOAD_IMMEDIATE_ebx %8 -ADD_ebx_to_eax -LOAD_INTEGER -PUSH_eax #_process_expression1 -LOAD_IMMEDIATE_eax %2 -PUSH_eax #_process_expression2 -CALL_IMMEDIATE %FUNCTION_file_print -POP_ebx # _process_expression_locals -POP_ebx # _process_expression_locals -LOAD_IMMEDIATE_eax &STRING_93 -PUSH_eax #_process_expression1 -LOAD_IMMEDIATE_eax %2 -PUSH_eax #_process_expression2 -CALL_IMMEDIATE %FUNCTION_file_print -POP_ebx # _process_expression_locals -POP_ebx # _process_expression_locals -CALL_IMMEDIATE %FUNCTION_line_error -LOAD_IMMEDIATE_eax %1 -PUSH_eax #_process_expression1 -CALL_IMMEDIATE %FUNCTION_exit -POP_ebx # _process_expression_locals -JUMP %_END_IF_postfix_expr_8 -:ELSE_postfix_expr_8 -:_END_IF_postfix_expr_8 -# IF_postfix_expr_9 -LOAD_IMMEDIATE_eax %0 -PUSH_eax #_common_recursion -LOAD_EFFECTIVE_ADDRESS %4 -LOAD_INTEGER -# looking up offset -# -> offset calculation -LOAD_IMMEDIATE_ebx %8 -ADD_ebx_to_eax -LOAD_INTEGER -POP_ebx # _common_recursion -CMP -SETNE -MOVEZBL -TEST -JUMP_EQ %ELSE_postfix_expr_9 -LOAD_EFFECTIVE_ADDRESS %12 -PUSH_eax #_common_recursion -LOAD_IMMEDIATE_eax &STRING_94 -PUSH_eax #_process_expression1 -LOAD_EFFECTIVE_ADDRESS %20 -LOAD_INTEGER -PUSH_eax #_process_expression2 -CALL_IMMEDIATE %FUNCTION_emit -POP_ebx # _process_expression_locals -POP_ebx # _process_expression_locals -POP_ebx # _common_recursion -STORE_INTEGER -LOAD_EFFECTIVE_ADDRESS %12 -PUSH_eax #_common_recursion -LOAD_IMMEDIATE_eax &STRING_95 -PUSH_eax #_process_expression1 -LOAD_EFFECTIVE_ADDRESS %20 -LOAD_INTEGER -PUSH_eax #_process_expression2 -CALL_IMMEDIATE %FUNCTION_emit -POP_ebx # _process_expression_locals -POP_ebx # _process_expression_locals -POP_ebx # _common_recursion -STORE_INTEGER -LOAD_EFFECTIVE_ADDRESS %12 -PUSH_eax #_common_recursion -LOAD_EFFECTIVE_ADDRESS %4 -LOAD_INTEGER -# looking up offset -# -> offset calculation -LOAD_IMMEDIATE_ebx %8 -ADD_ebx_to_eax -LOAD_INTEGER -PUSH_eax #_process_expression1 -CALL_IMMEDIATE %FUNCTION_numerate_number -POP_ebx # _process_expression_locals -PUSH_eax #_process_expression1 -LOAD_EFFECTIVE_ADDRESS %20 -LOAD_INTEGER -PUSH_eax #_process_expression2 -CALL_IMMEDIATE %FUNCTION_emit -POP_ebx # _process_expression_locals -POP_ebx # _process_expression_locals -POP_ebx # _common_recursion -STORE_INTEGER -LOAD_EFFECTIVE_ADDRESS %12 -PUSH_eax #_common_recursion -LOAD_IMMEDIATE_eax &STRING_96 -PUSH_eax #_process_expression1 -LOAD_EFFECTIVE_ADDRESS %20 -LOAD_INTEGER -PUSH_eax #_process_expression2 -CALL_IMMEDIATE %FUNCTION_emit -POP_ebx # _process_expression_locals -POP_ebx # _process_expression_locals -POP_ebx # _common_recursion -STORE_INTEGER -JUMP %_END_IF_postfix_expr_9 -:ELSE_postfix_expr_9 -:_END_IF_postfix_expr_9 -# IF_postfix_expr_10 -LOAD_IMMEDIATE_eax %1 -PUSH_eax #_common_recursion -LOAD_IMMEDIATE_eax &STRING_97 -PUSH_eax #_process_expression1 -LOAD_IMMEDIATE_eax &GLOBAL_global_token -LOAD_INTEGER -# looking up offset -LOAD_INTEGER -# looking up offset -# -> offset calculation -LOAD_IMMEDIATE_ebx %8 -ADD_ebx_to_eax -LOAD_INTEGER -PUSH_eax #_process_expression2 -CALL_IMMEDIATE %FUNCTION_match -POP_ebx # _process_expression_locals -POP_ebx # _process_expression_locals -POP_ebx # _common_recursion -XOR_ebx_eax_into_eax -TEST -JUMP_EQ %ELSE_postfix_expr_10 -LOAD_EFFECTIVE_ADDRESS %12 -PUSH_eax #_common_recursion -LOAD_IMMEDIATE_eax &STRING_98 -PUSH_eax #_process_expression1 -LOAD_EFFECTIVE_ADDRESS %20 -LOAD_INTEGER -PUSH_eax #_process_expression2 -CALL_IMMEDIATE %FUNCTION_emit -POP_ebx # _process_expression_locals -POP_ebx # _process_expression_locals -POP_ebx # _common_recursion -STORE_INTEGER -JUMP %_END_IF_postfix_expr_10 -:ELSE_postfix_expr_10 -:_END_IF_postfix_expr_10 -LOAD_IMMEDIATE_eax &GLOBAL_current_target -PUSH_eax #_common_recursion -LOAD_EFFECTIVE_ADDRESS %4 -LOAD_INTEGER -# looking up offset -# -> offset calculation -LOAD_IMMEDIATE_ebx %20 -ADD_ebx_to_eax -LOAD_INTEGER -POP_ebx # _common_recursion -STORE_INTEGER -LOAD_IMMEDIATE_eax &GLOBAL_global_token -PUSH_eax #_common_recursion -LOAD_IMMEDIATE_eax &GLOBAL_global_token -LOAD_INTEGER -# looking up offset -LOAD_INTEGER -POP_ebx # _common_recursion -STORE_INTEGER -POP_ebx # _recursive_statement_locals -JUMP %_END_IF_postfix_expr_5 -:ELSE_postfix_expr_5 -LOAD_EFFECTIVE_ADDRESS %8 -LOAD_INTEGER -RETURN -:_END_IF_postfix_expr_5 -:_END_IF_postfix_expr_1 -JUMP %WHILE_postfix_expr_0 - -:END_WHILE_postfix_expr_0 - -RETURN -# Defining function unary_expr -:FUNCTION_unary_expr -# IF_unary_expr_0 - -LOAD_IMMEDIATE_eax &STRING_99 -PUSH_eax #_process_expression1 -LOAD_IMMEDIATE_eax &GLOBAL_global_token -LOAD_INTEGER -# looking up offset -# -> offset calculation -LOAD_IMMEDIATE_ebx %8 -ADD_ebx_to_eax -LOAD_INTEGER -PUSH_eax #_process_expression2 -CALL_IMMEDIATE %FUNCTION_match -POP_ebx # _process_expression_locals -POP_ebx # _process_expression_locals -TEST -JUMP_EQ %ELSE_unary_expr_0 - -LOAD_EFFECTIVE_ADDRESS %8 -PUSH_eax #_common_recursion -LOAD_IMMEDIATE_eax &STRING_100 -PUSH_eax #_process_expression1 -LOAD_EFFECTIVE_ADDRESS %16 -LOAD_INTEGER -PUSH_eax #_process_expression2 -CALL_IMMEDIATE %FUNCTION_emit -POP_ebx # _process_expression_locals -POP_ebx # _process_expression_locals -POP_ebx # _common_recursion -STORE_INTEGER -LOAD_EFFECTIVE_ADDRESS %8 -PUSH_eax #_common_recursion -LOAD_EFFECTIVE_ADDRESS %12 -LOAD_INTEGER -PUSH_eax #_process_expression1 -LOAD_EFFECTIVE_ADDRESS %12 -LOAD_INTEGER -PUSH_eax #_process_expression2 -CALL_IMMEDIATE %FUNCTION_pre_recursion -POP_ebx # _process_expression_locals -POP_ebx # _process_expression_locals -POP_ebx # _common_recursion -STORE_INTEGER -LOAD_EFFECTIVE_ADDRESS %8 -PUSH_eax #_common_recursion -LOAD_EFFECTIVE_ADDRESS %12 -LOAD_INTEGER -PUSH_eax #_process_expression1 -LOAD_EFFECTIVE_ADDRESS %12 -LOAD_INTEGER -PUSH_eax #_process_expression2 -CALL_IMMEDIATE %FUNCTION_postfix_expr -POP_ebx # _process_expression_locals -POP_ebx # _process_expression_locals -POP_ebx # _common_recursion -STORE_INTEGER -LOAD_EFFECTIVE_ADDRESS %8 -PUSH_eax #_common_recursion -LOAD_EFFECTIVE_ADDRESS %12 -LOAD_INTEGER -PUSH_eax #_process_expression1 -LOAD_EFFECTIVE_ADDRESS %12 -LOAD_INTEGER -PUSH_eax #_process_expression2 -CALL_IMMEDIATE %FUNCTION_post_recursion -POP_ebx # _process_expression_locals -POP_ebx # _process_expression_locals -POP_ebx # _common_recursion -STORE_INTEGER -LOAD_EFFECTIVE_ADDRESS %8 -PUSH_eax #_common_recursion -LOAD_IMMEDIATE_eax &STRING_101 -PUSH_eax #_process_expression1 -LOAD_EFFECTIVE_ADDRESS %16 -LOAD_INTEGER -PUSH_eax #_process_expression2 -CALL_IMMEDIATE %FUNCTION_emit -POP_ebx # _process_expression_locals -POP_ebx # _process_expression_locals -POP_ebx # _common_recursion -STORE_INTEGER -JUMP %_END_IF_unary_expr_0 - -:ELSE_unary_expr_0 - -# IF_unary_expr_1 -LOAD_IMMEDIATE_eax &STRING_102 -PUSH_eax #_process_expression1 -LOAD_IMMEDIATE_eax &GLOBAL_global_token -LOAD_INTEGER -# looking up offset -# -> offset calculation -LOAD_IMMEDIATE_ebx %8 -ADD_ebx_to_eax -LOAD_INTEGER -PUSH_eax #_process_expression2 -CALL_IMMEDIATE %FUNCTION_match -POP_ebx # _process_expression_locals -POP_ebx # _process_expression_locals -TEST -JUMP_EQ %ELSE_unary_expr_1 -LOAD_EFFECTIVE_ADDRESS %8 -PUSH_eax #_common_recursion -LOAD_IMMEDIATE_eax &STRING_103 -PUSH_eax #_process_expression1 -LOAD_EFFECTIVE_ADDRESS %16 -LOAD_INTEGER -PUSH_eax #_process_expression2 -CALL_IMMEDIATE %FUNCTION_emit -POP_ebx # _process_expression_locals -POP_ebx # _process_expression_locals -POP_ebx # _common_recursion -STORE_INTEGER -LOAD_EFFECTIVE_ADDRESS %8 -PUSH_eax #_common_recursion -LOAD_EFFECTIVE_ADDRESS %12 -LOAD_INTEGER -PUSH_eax #_process_expression1 -LOAD_EFFECTIVE_ADDRESS %12 -LOAD_INTEGER -PUSH_eax #_process_expression2 -CALL_IMMEDIATE %FUNCTION_pre_recursion -POP_ebx # _process_expression_locals -POP_ebx # _process_expression_locals -POP_ebx # _common_recursion -STORE_INTEGER -LOAD_EFFECTIVE_ADDRESS %8 -PUSH_eax #_common_recursion -LOAD_EFFECTIVE_ADDRESS %12 -LOAD_INTEGER -PUSH_eax #_process_expression1 -LOAD_EFFECTIVE_ADDRESS %12 -LOAD_INTEGER -PUSH_eax #_process_expression2 -CALL_IMMEDIATE %FUNCTION_postfix_expr -POP_ebx # _process_expression_locals -POP_ebx # _process_expression_locals -POP_ebx # _common_recursion -STORE_INTEGER -LOAD_EFFECTIVE_ADDRESS %8 -PUSH_eax #_common_recursion -LOAD_EFFECTIVE_ADDRESS %12 -LOAD_INTEGER -PUSH_eax #_process_expression1 -LOAD_EFFECTIVE_ADDRESS %12 -LOAD_INTEGER -PUSH_eax #_process_expression2 -CALL_IMMEDIATE %FUNCTION_post_recursion -POP_ebx # _process_expression_locals -POP_ebx # _process_expression_locals -POP_ebx # _common_recursion -STORE_INTEGER -LOAD_EFFECTIVE_ADDRESS %8 -PUSH_eax #_common_recursion -LOAD_IMMEDIATE_eax &STRING_104 -PUSH_eax #_process_expression1 -LOAD_EFFECTIVE_ADDRESS %16 -LOAD_INTEGER -PUSH_eax #_process_expression2 -CALL_IMMEDIATE %FUNCTION_emit -POP_ebx # _process_expression_locals -POP_ebx # _process_expression_locals -POP_ebx # _common_recursion -STORE_INTEGER -JUMP %_END_IF_unary_expr_1 -:ELSE_unary_expr_1 -# IF_unary_expr_2 -LOAD_IMMEDIATE_eax &STRING_105 -PUSH_eax #_process_expression1 -LOAD_IMMEDIATE_eax &GLOBAL_global_token -LOAD_INTEGER -# looking up offset -# -> offset calculation -LOAD_IMMEDIATE_ebx %8 -ADD_ebx_to_eax -LOAD_INTEGER -PUSH_eax #_process_expression2 -CALL_IMMEDIATE %FUNCTION_match -POP_ebx # _process_expression_locals -POP_ebx # _process_expression_locals -TEST -JUMP_EQ %ELSE_unary_expr_2 -LOAD_IMMEDIATE_eax &GLOBAL_global_token -PUSH_eax #_common_recursion -LOAD_IMMEDIATE_eax &GLOBAL_global_token -LOAD_INTEGER -# looking up offset -LOAD_INTEGER -POP_ebx # _common_recursion -STORE_INTEGER -LOAD_IMMEDIATE_eax &STRING_106 -PUSH_eax #_process_expression1 -LOAD_IMMEDIATE_eax &STRING_107 -PUSH_eax #_process_expression2 -CALL_IMMEDIATE %FUNCTION_require_match -POP_ebx # _process_expression_locals -POP_ebx # _process_expression_locals -# Defining local a -CALL_IMMEDIATE %FUNCTION_type_name -PUSH_eax #a -LOAD_IMMEDIATE_eax &STRING_108 -PUSH_eax #_process_expression1 -LOAD_IMMEDIATE_eax &STRING_109 -PUSH_eax #_process_expression2 -CALL_IMMEDIATE %FUNCTION_require_match -POP_ebx # _process_expression_locals -POP_ebx # _process_expression_locals -LOAD_EFFECTIVE_ADDRESS %12 -PUSH_eax #_common_recursion -LOAD_IMMEDIATE_eax &STRING_110 -PUSH_eax #_process_expression1 -LOAD_EFFECTIVE_ADDRESS %20 -LOAD_INTEGER -PUSH_eax #_process_expression2 -CALL_IMMEDIATE %FUNCTION_emit -POP_ebx # _process_expression_locals -POP_ebx # _process_expression_locals -POP_ebx # _common_recursion -STORE_INTEGER -LOAD_EFFECTIVE_ADDRESS %12 -PUSH_eax #_common_recursion -LOAD_EFFECTIVE_ADDRESS %4 -LOAD_INTEGER -# looking up offset -# -> offset calculation -LOAD_IMMEDIATE_ebx %4 -ADD_ebx_to_eax -LOAD_INTEGER -PUSH_eax #_process_expression1 -CALL_IMMEDIATE %FUNCTION_numerate_number -POP_ebx # _process_expression_locals -PUSH_eax #_process_expression1 -LOAD_EFFECTIVE_ADDRESS %20 -LOAD_INTEGER -PUSH_eax #_process_expression2 -CALL_IMMEDIATE %FUNCTION_emit -POP_ebx # _process_expression_locals -POP_ebx # _process_expression_locals -POP_ebx # _common_recursion -STORE_INTEGER -LOAD_EFFECTIVE_ADDRESS %12 -PUSH_eax #_common_recursion -LOAD_IMMEDIATE_eax &STRING_111 -PUSH_eax #_process_expression1 -LOAD_EFFECTIVE_ADDRESS %20 -LOAD_INTEGER -PUSH_eax #_process_expression2 -CALL_IMMEDIATE %FUNCTION_emit -POP_ebx # _process_expression_locals -POP_ebx # _process_expression_locals -POP_ebx # _common_recursion -STORE_INTEGER -POP_ebx # _recursive_statement_locals -JUMP %_END_IF_unary_expr_2 -:ELSE_unary_expr_2 -LOAD_EFFECTIVE_ADDRESS %8 -PUSH_eax #_common_recursion -LOAD_EFFECTIVE_ADDRESS %12 -LOAD_INTEGER -PUSH_eax #_process_expression1 -LOAD_EFFECTIVE_ADDRESS %12 -LOAD_INTEGER -PUSH_eax #_process_expression2 -CALL_IMMEDIATE %FUNCTION_postfix_expr -POP_ebx # _process_expression_locals -POP_ebx # _process_expression_locals -POP_ebx # _common_recursion -STORE_INTEGER -:_END_IF_unary_expr_2 -:_END_IF_unary_expr_1 -:_END_IF_unary_expr_0 - -LOAD_EFFECTIVE_ADDRESS %8 -LOAD_INTEGER -RETURN -# Defining function additive_expr -:FUNCTION_additive_expr -LOAD_EFFECTIVE_ADDRESS %8 -PUSH_eax #_common_recursion -LOAD_EFFECTIVE_ADDRESS %12 -LOAD_INTEGER -PUSH_eax #_process_expression1 -LOAD_EFFECTIVE_ADDRESS %12 -LOAD_INTEGER -PUSH_eax #_process_expression2 -CALL_IMMEDIATE %FUNCTION_unary_expr -POP_ebx # _process_expression_locals -POP_ebx # _process_expression_locals -POP_ebx # _common_recursion -STORE_INTEGER -:WHILE_additive_expr_0 - -LOAD_IMMEDIATE_eax %1 -TEST -JUMP_EQ %END_WHILE_additive_expr_0 - -# THEN_while_additive_expr_0 - -# IF_additive_expr_1 -LOAD_IMMEDIATE_eax &STRING_112 -PUSH_eax #_process_expression1 -LOAD_IMMEDIATE_eax &GLOBAL_global_token -LOAD_INTEGER -# looking up offset -# -> offset calculation -LOAD_IMMEDIATE_ebx %8 -ADD_ebx_to_eax -LOAD_INTEGER -PUSH_eax #_process_expression2 -CALL_IMMEDIATE %FUNCTION_match -POP_ebx # _process_expression_locals -POP_ebx # _process_expression_locals -TEST -JUMP_EQ %ELSE_additive_expr_1 -LOAD_EFFECTIVE_ADDRESS %8 -PUSH_eax #_common_recursion -LOAD_EFFECTIVE_ADDRESS %12 -LOAD_INTEGER -PUSH_eax #_process_expression1 -LOAD_EFFECTIVE_ADDRESS %12 -LOAD_INTEGER -PUSH_eax #_process_expression2 -CALL_IMMEDIATE %FUNCTION_pre_recursion -POP_ebx # _process_expression_locals -POP_ebx # _process_expression_locals -POP_ebx # _common_recursion -STORE_INTEGER -LOAD_EFFECTIVE_ADDRESS %8 -PUSH_eax #_common_recursion -LOAD_EFFECTIVE_ADDRESS %12 -LOAD_INTEGER -PUSH_eax #_process_expression1 -LOAD_EFFECTIVE_ADDRESS %12 -LOAD_INTEGER -PUSH_eax #_process_expression2 -CALL_IMMEDIATE %FUNCTION_unary_expr -POP_ebx # _process_expression_locals -POP_ebx # _process_expression_locals -POP_ebx # _common_recursion -STORE_INTEGER -LOAD_EFFECTIVE_ADDRESS %8 -PUSH_eax #_common_recursion -LOAD_EFFECTIVE_ADDRESS %12 -LOAD_INTEGER -PUSH_eax #_process_expression1 -LOAD_EFFECTIVE_ADDRESS %12 -LOAD_INTEGER -PUSH_eax #_process_expression2 -CALL_IMMEDIATE %FUNCTION_post_recursion -POP_ebx # _process_expression_locals -POP_ebx # _process_expression_locals -POP_ebx # _common_recursion -STORE_INTEGER -LOAD_EFFECTIVE_ADDRESS %8 -PUSH_eax #_common_recursion -LOAD_IMMEDIATE_eax &STRING_113 -PUSH_eax #_process_expression1 -LOAD_EFFECTIVE_ADDRESS %16 -LOAD_INTEGER -PUSH_eax #_process_expression2 -CALL_IMMEDIATE %FUNCTION_emit -POP_ebx # _process_expression_locals -POP_ebx # _process_expression_locals -POP_ebx # _common_recursion -STORE_INTEGER -JUMP %_END_IF_additive_expr_1 -:ELSE_additive_expr_1 -# IF_additive_expr_2 -LOAD_IMMEDIATE_eax &STRING_114 -PUSH_eax #_process_expression1 -LOAD_IMMEDIATE_eax &GLOBAL_global_token -LOAD_INTEGER -# looking up offset -# -> offset calculation -LOAD_IMMEDIATE_ebx %8 -ADD_ebx_to_eax -LOAD_INTEGER -PUSH_eax #_process_expression2 -CALL_IMMEDIATE %FUNCTION_match -POP_ebx # _process_expression_locals -POP_ebx # _process_expression_locals -TEST -JUMP_EQ %ELSE_additive_expr_2 -LOAD_EFFECTIVE_ADDRESS %8 -PUSH_eax #_common_recursion -LOAD_EFFECTIVE_ADDRESS %12 -LOAD_INTEGER -PUSH_eax #_process_expression1 -LOAD_EFFECTIVE_ADDRESS %12 -LOAD_INTEGER -PUSH_eax #_process_expression2 -CALL_IMMEDIATE %FUNCTION_pre_recursion -POP_ebx # _process_expression_locals -POP_ebx # _process_expression_locals -POP_ebx # _common_recursion -STORE_INTEGER -LOAD_EFFECTIVE_ADDRESS %8 -PUSH_eax #_common_recursion -LOAD_EFFECTIVE_ADDRESS %12 -LOAD_INTEGER -PUSH_eax #_process_expression1 -LOAD_EFFECTIVE_ADDRESS %12 -LOAD_INTEGER -PUSH_eax #_process_expression2 -CALL_IMMEDIATE %FUNCTION_unary_expr -POP_ebx # _process_expression_locals -POP_ebx # _process_expression_locals -POP_ebx # _common_recursion -STORE_INTEGER -LOAD_EFFECTIVE_ADDRESS %8 -PUSH_eax #_common_recursion -LOAD_EFFECTIVE_ADDRESS %12 -LOAD_INTEGER -PUSH_eax #_process_expression1 -LOAD_EFFECTIVE_ADDRESS %12 -LOAD_INTEGER -PUSH_eax #_process_expression2 -CALL_IMMEDIATE %FUNCTION_post_recursion -POP_ebx # _process_expression_locals -POP_ebx # _process_expression_locals -POP_ebx # _common_recursion -STORE_INTEGER -LOAD_EFFECTIVE_ADDRESS %8 -PUSH_eax #_common_recursion -LOAD_IMMEDIATE_eax &STRING_115 -PUSH_eax #_process_expression1 -LOAD_EFFECTIVE_ADDRESS %16 -LOAD_INTEGER -PUSH_eax #_process_expression2 -CALL_IMMEDIATE %FUNCTION_emit -POP_ebx # _process_expression_locals -POP_ebx # _process_expression_locals -POP_ebx # _common_recursion -STORE_INTEGER -JUMP %_END_IF_additive_expr_2 -:ELSE_additive_expr_2 -# IF_additive_expr_3 -LOAD_IMMEDIATE_eax &STRING_116 -PUSH_eax #_process_expression1 -LOAD_IMMEDIATE_eax &GLOBAL_global_token -LOAD_INTEGER -# looking up offset -# -> offset calculation -LOAD_IMMEDIATE_ebx %8 -ADD_ebx_to_eax -LOAD_INTEGER -PUSH_eax #_process_expression2 -CALL_IMMEDIATE %FUNCTION_match -POP_ebx # _process_expression_locals -POP_ebx # _process_expression_locals -TEST -JUMP_EQ %ELSE_additive_expr_3 -LOAD_EFFECTIVE_ADDRESS %8 -PUSH_eax #_common_recursion -LOAD_EFFECTIVE_ADDRESS %12 -LOAD_INTEGER -PUSH_eax #_process_expression1 -LOAD_EFFECTIVE_ADDRESS %12 -LOAD_INTEGER -PUSH_eax #_process_expression2 -CALL_IMMEDIATE %FUNCTION_pre_recursion -POP_ebx # _process_expression_locals -POP_ebx # _process_expression_locals -POP_ebx # _common_recursion -STORE_INTEGER -LOAD_EFFECTIVE_ADDRESS %8 -PUSH_eax #_common_recursion -LOAD_EFFECTIVE_ADDRESS %12 -LOAD_INTEGER -PUSH_eax #_process_expression1 -LOAD_EFFECTIVE_ADDRESS %12 -LOAD_INTEGER -PUSH_eax #_process_expression2 -CALL_IMMEDIATE %FUNCTION_unary_expr -POP_ebx # _process_expression_locals -POP_ebx # _process_expression_locals -POP_ebx # _common_recursion -STORE_INTEGER -LOAD_EFFECTIVE_ADDRESS %8 -PUSH_eax #_common_recursion -LOAD_EFFECTIVE_ADDRESS %12 -LOAD_INTEGER -PUSH_eax #_process_expression1 -LOAD_EFFECTIVE_ADDRESS %12 -LOAD_INTEGER -PUSH_eax #_process_expression2 -CALL_IMMEDIATE %FUNCTION_post_recursion -POP_ebx # _process_expression_locals -POP_ebx # _process_expression_locals -POP_ebx # _common_recursion -STORE_INTEGER -LOAD_EFFECTIVE_ADDRESS %8 -PUSH_eax #_common_recursion -LOAD_IMMEDIATE_eax &STRING_117 -PUSH_eax #_process_expression1 -LOAD_EFFECTIVE_ADDRESS %16 -LOAD_INTEGER -PUSH_eax #_process_expression2 -CALL_IMMEDIATE %FUNCTION_emit -POP_ebx # _process_expression_locals -POP_ebx # _process_expression_locals -POP_ebx # _common_recursion -STORE_INTEGER -JUMP %_END_IF_additive_expr_3 -:ELSE_additive_expr_3 -# IF_additive_expr_4 -LOAD_IMMEDIATE_eax &STRING_118 -PUSH_eax #_process_expression1 -LOAD_IMMEDIATE_eax &GLOBAL_global_token -LOAD_INTEGER -# looking up offset -# -> offset calculation -LOAD_IMMEDIATE_ebx %8 -ADD_ebx_to_eax -LOAD_INTEGER -PUSH_eax #_process_expression2 -CALL_IMMEDIATE %FUNCTION_match -POP_ebx # _process_expression_locals -POP_ebx # _process_expression_locals -TEST -JUMP_EQ %ELSE_additive_expr_4 -LOAD_EFFECTIVE_ADDRESS %8 -PUSH_eax #_common_recursion -LOAD_EFFECTIVE_ADDRESS %12 -LOAD_INTEGER -PUSH_eax #_process_expression1 -LOAD_EFFECTIVE_ADDRESS %12 -LOAD_INTEGER -PUSH_eax #_process_expression2 -CALL_IMMEDIATE %FUNCTION_pre_recursion -POP_ebx # _process_expression_locals -POP_ebx # _process_expression_locals -POP_ebx # _common_recursion -STORE_INTEGER -LOAD_EFFECTIVE_ADDRESS %8 -PUSH_eax #_common_recursion -LOAD_EFFECTIVE_ADDRESS %12 -LOAD_INTEGER -PUSH_eax #_process_expression1 -LOAD_EFFECTIVE_ADDRESS %12 -LOAD_INTEGER -PUSH_eax #_process_expression2 -CALL_IMMEDIATE %FUNCTION_unary_expr -POP_ebx # _process_expression_locals -POP_ebx # _process_expression_locals -POP_ebx # _common_recursion -STORE_INTEGER -LOAD_EFFECTIVE_ADDRESS %8 -PUSH_eax #_common_recursion -LOAD_EFFECTIVE_ADDRESS %12 -LOAD_INTEGER -PUSH_eax #_process_expression1 -LOAD_EFFECTIVE_ADDRESS %12 -LOAD_INTEGER -PUSH_eax #_process_expression2 -CALL_IMMEDIATE %FUNCTION_post_recursion -POP_ebx # _process_expression_locals -POP_ebx # _process_expression_locals -POP_ebx # _common_recursion -STORE_INTEGER -LOAD_EFFECTIVE_ADDRESS %8 -PUSH_eax #_common_recursion -LOAD_IMMEDIATE_eax &STRING_119 -PUSH_eax #_process_expression1 -LOAD_EFFECTIVE_ADDRESS %16 -LOAD_INTEGER -PUSH_eax #_process_expression2 -CALL_IMMEDIATE %FUNCTION_emit -POP_ebx # _process_expression_locals -POP_ebx # _process_expression_locals -POP_ebx # _common_recursion -STORE_INTEGER -JUMP %_END_IF_additive_expr_4 -:ELSE_additive_expr_4 -# IF_additive_expr_5 -LOAD_IMMEDIATE_eax &STRING_120 -PUSH_eax #_process_expression1 -LOAD_IMMEDIATE_eax &GLOBAL_global_token -LOAD_INTEGER -# looking up offset -# -> offset calculation -LOAD_IMMEDIATE_ebx %8 -ADD_ebx_to_eax -LOAD_INTEGER -PUSH_eax #_process_expression2 -CALL_IMMEDIATE %FUNCTION_match -POP_ebx # _process_expression_locals -POP_ebx # _process_expression_locals -TEST -JUMP_EQ %ELSE_additive_expr_5 -LOAD_EFFECTIVE_ADDRESS %8 -PUSH_eax #_common_recursion -LOAD_EFFECTIVE_ADDRESS %12 -LOAD_INTEGER -PUSH_eax #_process_expression1 -LOAD_EFFECTIVE_ADDRESS %12 -LOAD_INTEGER -PUSH_eax #_process_expression2 -CALL_IMMEDIATE %FUNCTION_pre_recursion -POP_ebx # _process_expression_locals -POP_ebx # _process_expression_locals -POP_ebx # _common_recursion -STORE_INTEGER -LOAD_EFFECTIVE_ADDRESS %8 -PUSH_eax #_common_recursion -LOAD_EFFECTIVE_ADDRESS %12 -LOAD_INTEGER -PUSH_eax #_process_expression1 -LOAD_EFFECTIVE_ADDRESS %12 -LOAD_INTEGER -PUSH_eax #_process_expression2 -CALL_IMMEDIATE %FUNCTION_unary_expr -POP_ebx # _process_expression_locals -POP_ebx # _process_expression_locals -POP_ebx # _common_recursion -STORE_INTEGER -LOAD_EFFECTIVE_ADDRESS %8 -PUSH_eax #_common_recursion -LOAD_EFFECTIVE_ADDRESS %12 -LOAD_INTEGER -PUSH_eax #_process_expression1 -LOAD_EFFECTIVE_ADDRESS %12 -LOAD_INTEGER -PUSH_eax #_process_expression2 -CALL_IMMEDIATE %FUNCTION_post_recursion -POP_ebx # _process_expression_locals -POP_ebx # _process_expression_locals -POP_ebx # _common_recursion -STORE_INTEGER -LOAD_EFFECTIVE_ADDRESS %8 -PUSH_eax #_common_recursion -LOAD_IMMEDIATE_eax &STRING_121 -PUSH_eax #_process_expression1 -LOAD_EFFECTIVE_ADDRESS %16 -LOAD_INTEGER -PUSH_eax #_process_expression2 -CALL_IMMEDIATE %FUNCTION_emit -POP_ebx # _process_expression_locals -POP_ebx # _process_expression_locals -POP_ebx # _common_recursion -STORE_INTEGER -JUMP %_END_IF_additive_expr_5 -:ELSE_additive_expr_5 -LOAD_EFFECTIVE_ADDRESS %8 -LOAD_INTEGER -RETURN -:_END_IF_additive_expr_5 -:_END_IF_additive_expr_4 -:_END_IF_additive_expr_3 -:_END_IF_additive_expr_2 -:_END_IF_additive_expr_1 -JUMP %WHILE_additive_expr_0 - -:END_WHILE_additive_expr_0 - -RETURN -# Defining function shift_expr -:FUNCTION_shift_expr -LOAD_EFFECTIVE_ADDRESS %8 -PUSH_eax #_common_recursion -LOAD_EFFECTIVE_ADDRESS %12 -LOAD_INTEGER -PUSH_eax #_process_expression1 -LOAD_EFFECTIVE_ADDRESS %12 -LOAD_INTEGER -PUSH_eax #_process_expression2 -CALL_IMMEDIATE %FUNCTION_additive_expr -POP_ebx # _process_expression_locals -POP_ebx # _process_expression_locals -POP_ebx # _common_recursion -STORE_INTEGER -:WHILE_shift_expr_0 - -LOAD_IMMEDIATE_eax %1 -TEST -JUMP_EQ %END_WHILE_shift_expr_0 - -# THEN_while_shift_expr_0 - -# IF_shift_expr_1 -LOAD_IMMEDIATE_eax &STRING_122 -PUSH_eax #_process_expression1 -LOAD_IMMEDIATE_eax &GLOBAL_global_token -LOAD_INTEGER -# looking up offset -# -> offset calculation -LOAD_IMMEDIATE_ebx %8 -ADD_ebx_to_eax -LOAD_INTEGER -PUSH_eax #_process_expression2 -CALL_IMMEDIATE %FUNCTION_match -POP_ebx # _process_expression_locals -POP_ebx # _process_expression_locals -TEST -JUMP_EQ %ELSE_shift_expr_1 -LOAD_EFFECTIVE_ADDRESS %8 -PUSH_eax #_common_recursion -LOAD_EFFECTIVE_ADDRESS %12 -LOAD_INTEGER -PUSH_eax #_process_expression1 -LOAD_EFFECTIVE_ADDRESS %12 -LOAD_INTEGER -PUSH_eax #_process_expression2 -CALL_IMMEDIATE %FUNCTION_pre_recursion -POP_ebx # _process_expression_locals -POP_ebx # _process_expression_locals -POP_ebx # _common_recursion -STORE_INTEGER -LOAD_EFFECTIVE_ADDRESS %8 -PUSH_eax #_common_recursion -LOAD_EFFECTIVE_ADDRESS %12 -LOAD_INTEGER -PUSH_eax #_process_expression1 -LOAD_EFFECTIVE_ADDRESS %12 -LOAD_INTEGER -PUSH_eax #_process_expression2 -CALL_IMMEDIATE %FUNCTION_additive_expr -POP_ebx # _process_expression_locals -POP_ebx # _process_expression_locals -POP_ebx # _common_recursion -STORE_INTEGER -LOAD_EFFECTIVE_ADDRESS %8 -PUSH_eax #_common_recursion -LOAD_EFFECTIVE_ADDRESS %12 -LOAD_INTEGER -PUSH_eax #_process_expression1 -LOAD_EFFECTIVE_ADDRESS %12 -LOAD_INTEGER -PUSH_eax #_process_expression2 -CALL_IMMEDIATE %FUNCTION_post_recursion -POP_ebx # _process_expression_locals -POP_ebx # _process_expression_locals -POP_ebx # _common_recursion -STORE_INTEGER -# Defining local old -LOAD_EFFECTIVE_ADDRESS %8 -LOAD_INTEGER -# looking up offset -LOAD_INTEGER -PUSH_eax #old -LOAD_EFFECTIVE_ADDRESS %12 -LOAD_INTEGER -PUSH_eax #_process_expression1 -CALL_IMMEDIATE %FUNCTION_free -POP_ebx # _process_expression_locals -LOAD_EFFECTIVE_ADDRESS %12 -PUSH_eax #_common_recursion -LOAD_IMMEDIATE_eax &STRING_123 -PUSH_eax #_process_expression1 -LOAD_EFFECTIVE_ADDRESS %8 -LOAD_INTEGER -PUSH_eax #_process_expression2 -CALL_IMMEDIATE %FUNCTION_emit -POP_ebx # _process_expression_locals -POP_ebx # _process_expression_locals -POP_ebx # _common_recursion -STORE_INTEGER -POP_ebx # _recursive_statement_locals -JUMP %_END_IF_shift_expr_1 -:ELSE_shift_expr_1 -# IF_shift_expr_2 -LOAD_IMMEDIATE_eax &STRING_124 -PUSH_eax #_process_expression1 -LOAD_IMMEDIATE_eax &GLOBAL_global_token -LOAD_INTEGER -# looking up offset -# -> offset calculation -LOAD_IMMEDIATE_ebx %8 -ADD_ebx_to_eax -LOAD_INTEGER -PUSH_eax #_process_expression2 -CALL_IMMEDIATE %FUNCTION_match -POP_ebx # _process_expression_locals -POP_ebx # _process_expression_locals -TEST -JUMP_EQ %ELSE_shift_expr_2 -LOAD_EFFECTIVE_ADDRESS %8 -PUSH_eax #_common_recursion -LOAD_EFFECTIVE_ADDRESS %12 -LOAD_INTEGER -PUSH_eax #_process_expression1 -LOAD_EFFECTIVE_ADDRESS %12 -LOAD_INTEGER -PUSH_eax #_process_expression2 -CALL_IMMEDIATE %FUNCTION_pre_recursion -POP_ebx # _process_expression_locals -POP_ebx # _process_expression_locals -POP_ebx # _common_recursion -STORE_INTEGER -LOAD_EFFECTIVE_ADDRESS %8 -PUSH_eax #_common_recursion -LOAD_EFFECTIVE_ADDRESS %12 -LOAD_INTEGER -PUSH_eax #_process_expression1 -LOAD_EFFECTIVE_ADDRESS %12 -LOAD_INTEGER -PUSH_eax #_process_expression2 -CALL_IMMEDIATE %FUNCTION_additive_expr -POP_ebx # _process_expression_locals -POP_ebx # _process_expression_locals -POP_ebx # _common_recursion -STORE_INTEGER -LOAD_EFFECTIVE_ADDRESS %8 -PUSH_eax #_common_recursion -LOAD_EFFECTIVE_ADDRESS %12 -LOAD_INTEGER -PUSH_eax #_process_expression1 -LOAD_EFFECTIVE_ADDRESS %12 -LOAD_INTEGER -PUSH_eax #_process_expression2 -CALL_IMMEDIATE %FUNCTION_post_recursion -POP_ebx # _process_expression_locals -POP_ebx # _process_expression_locals -POP_ebx # _common_recursion -STORE_INTEGER -# Defining local old -LOAD_EFFECTIVE_ADDRESS %8 -LOAD_INTEGER -# looking up offset -LOAD_INTEGER -PUSH_eax #old -LOAD_EFFECTIVE_ADDRESS %12 -LOAD_INTEGER -PUSH_eax #_process_expression1 -CALL_IMMEDIATE %FUNCTION_free -POP_ebx # _process_expression_locals -LOAD_EFFECTIVE_ADDRESS %12 -PUSH_eax #_common_recursion -LOAD_IMMEDIATE_eax &STRING_125 -PUSH_eax #_process_expression1 -LOAD_EFFECTIVE_ADDRESS %8 -LOAD_INTEGER -PUSH_eax #_process_expression2 -CALL_IMMEDIATE %FUNCTION_emit -POP_ebx # _process_expression_locals -POP_ebx # _process_expression_locals -POP_ebx # _common_recursion -STORE_INTEGER -POP_ebx # _recursive_statement_locals -JUMP %_END_IF_shift_expr_2 -:ELSE_shift_expr_2 -LOAD_EFFECTIVE_ADDRESS %8 -LOAD_INTEGER -RETURN -:_END_IF_shift_expr_2 -:_END_IF_shift_expr_1 -JUMP %WHILE_shift_expr_0 - -:END_WHILE_shift_expr_0 - -RETURN -# Defining function relational_expr -:FUNCTION_relational_expr -LOAD_EFFECTIVE_ADDRESS %8 -PUSH_eax #_common_recursion -LOAD_EFFECTIVE_ADDRESS %12 -LOAD_INTEGER -PUSH_eax #_process_expression1 -LOAD_EFFECTIVE_ADDRESS %12 -LOAD_INTEGER -PUSH_eax #_process_expression2 -CALL_IMMEDIATE %FUNCTION_shift_expr -POP_ebx # _process_expression_locals -POP_ebx # _process_expression_locals -POP_ebx # _common_recursion -STORE_INTEGER -:WHILE_relational_expr_0 - -LOAD_IMMEDIATE_eax %1 -TEST -JUMP_EQ %END_WHILE_relational_expr_0 - -# THEN_while_relational_expr_0 - -# IF_relational_expr_1 -LOAD_IMMEDIATE_eax &STRING_126 -PUSH_eax #_process_expression1 -LOAD_IMMEDIATE_eax &GLOBAL_global_token -LOAD_INTEGER -# looking up offset -# -> offset calculation -LOAD_IMMEDIATE_ebx %8 -ADD_ebx_to_eax -LOAD_INTEGER -PUSH_eax #_process_expression2 -CALL_IMMEDIATE %FUNCTION_match -POP_ebx # _process_expression_locals -POP_ebx # _process_expression_locals -TEST -JUMP_EQ %ELSE_relational_expr_1 -LOAD_EFFECTIVE_ADDRESS %8 -PUSH_eax #_common_recursion -LOAD_EFFECTIVE_ADDRESS %12 -LOAD_INTEGER -PUSH_eax #_process_expression1 -LOAD_EFFECTIVE_ADDRESS %12 -LOAD_INTEGER -PUSH_eax #_process_expression2 -CALL_IMMEDIATE %FUNCTION_pre_recursion -POP_ebx # _process_expression_locals -POP_ebx # _process_expression_locals -POP_ebx # _common_recursion -STORE_INTEGER -LOAD_EFFECTIVE_ADDRESS %8 -PUSH_eax #_common_recursion -LOAD_EFFECTIVE_ADDRESS %12 -LOAD_INTEGER -PUSH_eax #_process_expression1 -LOAD_EFFECTIVE_ADDRESS %12 -LOAD_INTEGER -PUSH_eax #_process_expression2 -CALL_IMMEDIATE %FUNCTION_shift_expr -POP_ebx # _process_expression_locals -POP_ebx # _process_expression_locals -POP_ebx # _common_recursion -STORE_INTEGER -LOAD_EFFECTIVE_ADDRESS %8 -PUSH_eax #_common_recursion -LOAD_EFFECTIVE_ADDRESS %12 -LOAD_INTEGER -PUSH_eax #_process_expression1 -LOAD_EFFECTIVE_ADDRESS %12 -LOAD_INTEGER -PUSH_eax #_process_expression2 -CALL_IMMEDIATE %FUNCTION_post_recursion -POP_ebx # _process_expression_locals -POP_ebx # _process_expression_locals -POP_ebx # _common_recursion -STORE_INTEGER -LOAD_EFFECTIVE_ADDRESS %8 -PUSH_eax #_common_recursion -LOAD_IMMEDIATE_eax &STRING_127 -PUSH_eax #_process_expression1 -LOAD_EFFECTIVE_ADDRESS %16 -LOAD_INTEGER -PUSH_eax #_process_expression2 -CALL_IMMEDIATE %FUNCTION_emit -POP_ebx # _process_expression_locals -POP_ebx # _process_expression_locals -POP_ebx # _common_recursion -STORE_INTEGER -JUMP %_END_IF_relational_expr_1 -:ELSE_relational_expr_1 -# IF_relational_expr_2 -LOAD_IMMEDIATE_eax &STRING_128 -PUSH_eax #_process_expression1 -LOAD_IMMEDIATE_eax &GLOBAL_global_token -LOAD_INTEGER -# looking up offset -# -> offset calculation -LOAD_IMMEDIATE_ebx %8 -ADD_ebx_to_eax -LOAD_INTEGER -PUSH_eax #_process_expression2 -CALL_IMMEDIATE %FUNCTION_match -POP_ebx # _process_expression_locals -POP_ebx # _process_expression_locals -TEST -JUMP_EQ %ELSE_relational_expr_2 -LOAD_EFFECTIVE_ADDRESS %8 -PUSH_eax #_common_recursion -LOAD_EFFECTIVE_ADDRESS %12 -LOAD_INTEGER -PUSH_eax #_process_expression1 -LOAD_EFFECTIVE_ADDRESS %12 -LOAD_INTEGER -PUSH_eax #_process_expression2 -CALL_IMMEDIATE %FUNCTION_pre_recursion -POP_ebx # _process_expression_locals -POP_ebx # _process_expression_locals -POP_ebx # _common_recursion -STORE_INTEGER -LOAD_EFFECTIVE_ADDRESS %8 -PUSH_eax #_common_recursion -LOAD_EFFECTIVE_ADDRESS %12 -LOAD_INTEGER -PUSH_eax #_process_expression1 -LOAD_EFFECTIVE_ADDRESS %12 -LOAD_INTEGER -PUSH_eax #_process_expression2 -CALL_IMMEDIATE %FUNCTION_shift_expr -POP_ebx # _process_expression_locals -POP_ebx # _process_expression_locals -POP_ebx # _common_recursion -STORE_INTEGER -LOAD_EFFECTIVE_ADDRESS %8 -PUSH_eax #_common_recursion -LOAD_EFFECTIVE_ADDRESS %12 -LOAD_INTEGER -PUSH_eax #_process_expression1 -LOAD_EFFECTIVE_ADDRESS %12 -LOAD_INTEGER -PUSH_eax #_process_expression2 -CALL_IMMEDIATE %FUNCTION_post_recursion -POP_ebx # _process_expression_locals -POP_ebx # _process_expression_locals -POP_ebx # _common_recursion -STORE_INTEGER -LOAD_EFFECTIVE_ADDRESS %8 -PUSH_eax #_common_recursion -LOAD_IMMEDIATE_eax &STRING_129 -PUSH_eax #_process_expression1 -LOAD_EFFECTIVE_ADDRESS %16 -LOAD_INTEGER -PUSH_eax #_process_expression2 -CALL_IMMEDIATE %FUNCTION_emit -POP_ebx # _process_expression_locals -POP_ebx # _process_expression_locals -POP_ebx # _common_recursion -STORE_INTEGER -JUMP %_END_IF_relational_expr_2 -:ELSE_relational_expr_2 -# IF_relational_expr_3 -LOAD_IMMEDIATE_eax &STRING_130 -PUSH_eax #_process_expression1 -LOAD_IMMEDIATE_eax &GLOBAL_global_token -LOAD_INTEGER -# looking up offset -# -> offset calculation -LOAD_IMMEDIATE_ebx %8 -ADD_ebx_to_eax -LOAD_INTEGER -PUSH_eax #_process_expression2 -CALL_IMMEDIATE %FUNCTION_match -POP_ebx # _process_expression_locals -POP_ebx # _process_expression_locals -TEST -JUMP_EQ %ELSE_relational_expr_3 -LOAD_EFFECTIVE_ADDRESS %8 -PUSH_eax #_common_recursion -LOAD_EFFECTIVE_ADDRESS %12 -LOAD_INTEGER -PUSH_eax #_process_expression1 -LOAD_EFFECTIVE_ADDRESS %12 -LOAD_INTEGER -PUSH_eax #_process_expression2 -CALL_IMMEDIATE %FUNCTION_pre_recursion -POP_ebx # _process_expression_locals -POP_ebx # _process_expression_locals -POP_ebx # _common_recursion -STORE_INTEGER -LOAD_EFFECTIVE_ADDRESS %8 -PUSH_eax #_common_recursion -LOAD_EFFECTIVE_ADDRESS %12 -LOAD_INTEGER -PUSH_eax #_process_expression1 -LOAD_EFFECTIVE_ADDRESS %12 -LOAD_INTEGER -PUSH_eax #_process_expression2 -CALL_IMMEDIATE %FUNCTION_shift_expr -POP_ebx # _process_expression_locals -POP_ebx # _process_expression_locals -POP_ebx # _common_recursion -STORE_INTEGER -LOAD_EFFECTIVE_ADDRESS %8 -PUSH_eax #_common_recursion -LOAD_EFFECTIVE_ADDRESS %12 -LOAD_INTEGER -PUSH_eax #_process_expression1 -LOAD_EFFECTIVE_ADDRESS %12 -LOAD_INTEGER -PUSH_eax #_process_expression2 -CALL_IMMEDIATE %FUNCTION_post_recursion -POP_ebx # _process_expression_locals -POP_ebx # _process_expression_locals -POP_ebx # _common_recursion -STORE_INTEGER -LOAD_EFFECTIVE_ADDRESS %8 -PUSH_eax #_common_recursion -LOAD_IMMEDIATE_eax &STRING_131 -PUSH_eax #_process_expression1 -LOAD_EFFECTIVE_ADDRESS %16 -LOAD_INTEGER -PUSH_eax #_process_expression2 -CALL_IMMEDIATE %FUNCTION_emit -POP_ebx # _process_expression_locals -POP_ebx # _process_expression_locals -POP_ebx # _common_recursion -STORE_INTEGER -JUMP %_END_IF_relational_expr_3 -:ELSE_relational_expr_3 -# IF_relational_expr_4 -LOAD_IMMEDIATE_eax &STRING_132 -PUSH_eax #_process_expression1 -LOAD_IMMEDIATE_eax &GLOBAL_global_token -LOAD_INTEGER -# looking up offset -# -> offset calculation -LOAD_IMMEDIATE_ebx %8 -ADD_ebx_to_eax -LOAD_INTEGER -PUSH_eax #_process_expression2 -CALL_IMMEDIATE %FUNCTION_match -POP_ebx # _process_expression_locals -POP_ebx # _process_expression_locals -TEST -JUMP_EQ %ELSE_relational_expr_4 -LOAD_EFFECTIVE_ADDRESS %8 -PUSH_eax #_common_recursion -LOAD_EFFECTIVE_ADDRESS %12 -LOAD_INTEGER -PUSH_eax #_process_expression1 -LOAD_EFFECTIVE_ADDRESS %12 -LOAD_INTEGER -PUSH_eax #_process_expression2 -CALL_IMMEDIATE %FUNCTION_pre_recursion -POP_ebx # _process_expression_locals -POP_ebx # _process_expression_locals -POP_ebx # _common_recursion -STORE_INTEGER -LOAD_EFFECTIVE_ADDRESS %8 -PUSH_eax #_common_recursion -LOAD_EFFECTIVE_ADDRESS %12 -LOAD_INTEGER -PUSH_eax #_process_expression1 -LOAD_EFFECTIVE_ADDRESS %12 -LOAD_INTEGER -PUSH_eax #_process_expression2 -CALL_IMMEDIATE %FUNCTION_shift_expr -POP_ebx # _process_expression_locals -POP_ebx # _process_expression_locals -POP_ebx # _common_recursion -STORE_INTEGER -LOAD_EFFECTIVE_ADDRESS %8 -PUSH_eax #_common_recursion -LOAD_EFFECTIVE_ADDRESS %12 -LOAD_INTEGER -PUSH_eax #_process_expression1 -LOAD_EFFECTIVE_ADDRESS %12 -LOAD_INTEGER -PUSH_eax #_process_expression2 -CALL_IMMEDIATE %FUNCTION_post_recursion -POP_ebx # _process_expression_locals -POP_ebx # _process_expression_locals -POP_ebx # _common_recursion -STORE_INTEGER -LOAD_EFFECTIVE_ADDRESS %8 -PUSH_eax #_common_recursion -LOAD_IMMEDIATE_eax &STRING_133 -PUSH_eax #_process_expression1 -LOAD_EFFECTIVE_ADDRESS %16 -LOAD_INTEGER -PUSH_eax #_process_expression2 -CALL_IMMEDIATE %FUNCTION_emit -POP_ebx # _process_expression_locals -POP_ebx # _process_expression_locals -POP_ebx # _common_recursion -STORE_INTEGER -JUMP %_END_IF_relational_expr_4 -:ELSE_relational_expr_4 -LOAD_EFFECTIVE_ADDRESS %8 -LOAD_INTEGER -RETURN -:_END_IF_relational_expr_4 -:_END_IF_relational_expr_3 -:_END_IF_relational_expr_2 -:_END_IF_relational_expr_1 -JUMP %WHILE_relational_expr_0 - -:END_WHILE_relational_expr_0 - -RETURN -# Defining function equality_expr -:FUNCTION_equality_expr -LOAD_EFFECTIVE_ADDRESS %8 -PUSH_eax #_common_recursion -LOAD_EFFECTIVE_ADDRESS %12 -LOAD_INTEGER -PUSH_eax #_process_expression1 -LOAD_EFFECTIVE_ADDRESS %12 -LOAD_INTEGER -PUSH_eax #_process_expression2 -CALL_IMMEDIATE %FUNCTION_relational_expr -POP_ebx # _process_expression_locals -POP_ebx # _process_expression_locals -POP_ebx # _common_recursion -STORE_INTEGER -:WHILE_equality_expr_0 - -LOAD_IMMEDIATE_eax %1 -TEST -JUMP_EQ %END_WHILE_equality_expr_0 - -# THEN_while_equality_expr_0 - -# IF_equality_expr_1 -LOAD_IMMEDIATE_eax &STRING_134 -PUSH_eax #_process_expression1 -LOAD_IMMEDIATE_eax &GLOBAL_global_token -LOAD_INTEGER -# looking up offset -# -> offset calculation -LOAD_IMMEDIATE_ebx %8 -ADD_ebx_to_eax -LOAD_INTEGER -PUSH_eax #_process_expression2 -CALL_IMMEDIATE %FUNCTION_match -POP_ebx # _process_expression_locals -POP_ebx # _process_expression_locals -TEST -JUMP_EQ %ELSE_equality_expr_1 -LOAD_EFFECTIVE_ADDRESS %8 -PUSH_eax #_common_recursion -LOAD_EFFECTIVE_ADDRESS %12 -LOAD_INTEGER -PUSH_eax #_process_expression1 -LOAD_EFFECTIVE_ADDRESS %12 -LOAD_INTEGER -PUSH_eax #_process_expression2 -CALL_IMMEDIATE %FUNCTION_pre_recursion -POP_ebx # _process_expression_locals -POP_ebx # _process_expression_locals -POP_ebx # _common_recursion -STORE_INTEGER -LOAD_EFFECTIVE_ADDRESS %8 -PUSH_eax #_common_recursion -LOAD_EFFECTIVE_ADDRESS %12 -LOAD_INTEGER -PUSH_eax #_process_expression1 -LOAD_EFFECTIVE_ADDRESS %12 -LOAD_INTEGER -PUSH_eax #_process_expression2 -CALL_IMMEDIATE %FUNCTION_relational_expr -POP_ebx # _process_expression_locals -POP_ebx # _process_expression_locals -POP_ebx # _common_recursion -STORE_INTEGER -LOAD_EFFECTIVE_ADDRESS %8 -PUSH_eax #_common_recursion -LOAD_EFFECTIVE_ADDRESS %12 -LOAD_INTEGER -PUSH_eax #_process_expression1 -LOAD_EFFECTIVE_ADDRESS %12 -LOAD_INTEGER -PUSH_eax #_process_expression2 -CALL_IMMEDIATE %FUNCTION_post_recursion -POP_ebx # _process_expression_locals -POP_ebx # _process_expression_locals -POP_ebx # _common_recursion -STORE_INTEGER -LOAD_EFFECTIVE_ADDRESS %8 -PUSH_eax #_common_recursion -LOAD_IMMEDIATE_eax &STRING_135 -PUSH_eax #_process_expression1 -LOAD_EFFECTIVE_ADDRESS %16 -LOAD_INTEGER -PUSH_eax #_process_expression2 -CALL_IMMEDIATE %FUNCTION_emit -POP_ebx # _process_expression_locals -POP_ebx # _process_expression_locals -POP_ebx # _common_recursion -STORE_INTEGER -JUMP %_END_IF_equality_expr_1 -:ELSE_equality_expr_1 -# IF_equality_expr_2 -LOAD_IMMEDIATE_eax &STRING_136 -PUSH_eax #_process_expression1 -LOAD_IMMEDIATE_eax &GLOBAL_global_token -LOAD_INTEGER -# looking up offset -# -> offset calculation -LOAD_IMMEDIATE_ebx %8 -ADD_ebx_to_eax -LOAD_INTEGER -PUSH_eax #_process_expression2 -CALL_IMMEDIATE %FUNCTION_match -POP_ebx # _process_expression_locals -POP_ebx # _process_expression_locals -TEST -JUMP_EQ %ELSE_equality_expr_2 -LOAD_EFFECTIVE_ADDRESS %8 -PUSH_eax #_common_recursion -LOAD_EFFECTIVE_ADDRESS %12 -LOAD_INTEGER -PUSH_eax #_process_expression1 -LOAD_EFFECTIVE_ADDRESS %12 -LOAD_INTEGER -PUSH_eax #_process_expression2 -CALL_IMMEDIATE %FUNCTION_pre_recursion -POP_ebx # _process_expression_locals -POP_ebx # _process_expression_locals -POP_ebx # _common_recursion -STORE_INTEGER -LOAD_EFFECTIVE_ADDRESS %8 -PUSH_eax #_common_recursion -LOAD_EFFECTIVE_ADDRESS %12 -LOAD_INTEGER -PUSH_eax #_process_expression1 -LOAD_EFFECTIVE_ADDRESS %12 -LOAD_INTEGER -PUSH_eax #_process_expression2 -CALL_IMMEDIATE %FUNCTION_relational_expr -POP_ebx # _process_expression_locals -POP_ebx # _process_expression_locals -POP_ebx # _common_recursion -STORE_INTEGER -LOAD_EFFECTIVE_ADDRESS %8 -PUSH_eax #_common_recursion -LOAD_EFFECTIVE_ADDRESS %12 -LOAD_INTEGER -PUSH_eax #_process_expression1 -LOAD_EFFECTIVE_ADDRESS %12 -LOAD_INTEGER -PUSH_eax #_process_expression2 -CALL_IMMEDIATE %FUNCTION_post_recursion -POP_ebx # _process_expression_locals -POP_ebx # _process_expression_locals -POP_ebx # _common_recursion -STORE_INTEGER -LOAD_EFFECTIVE_ADDRESS %8 -PUSH_eax #_common_recursion -LOAD_IMMEDIATE_eax &STRING_137 -PUSH_eax #_process_expression1 -LOAD_EFFECTIVE_ADDRESS %16 -LOAD_INTEGER -PUSH_eax #_process_expression2 -CALL_IMMEDIATE %FUNCTION_emit -POP_ebx # _process_expression_locals -POP_ebx # _process_expression_locals -POP_ebx # _common_recursion -STORE_INTEGER -JUMP %_END_IF_equality_expr_2 -:ELSE_equality_expr_2 -LOAD_EFFECTIVE_ADDRESS %8 -LOAD_INTEGER -RETURN -:_END_IF_equality_expr_2 -:_END_IF_equality_expr_1 -JUMP %WHILE_equality_expr_0 - -:END_WHILE_equality_expr_0 - -RETURN -# Defining function bitwise -:FUNCTION_bitwise -LOAD_EFFECTIVE_ADDRESS %8 -PUSH_eax #_common_recursion -LOAD_EFFECTIVE_ADDRESS %12 -LOAD_INTEGER -PUSH_eax #_process_expression1 -LOAD_EFFECTIVE_ADDRESS %12 -LOAD_INTEGER -PUSH_eax #_process_expression2 -CALL_IMMEDIATE %FUNCTION_equality_expr -POP_ebx # _process_expression_locals -POP_ebx # _process_expression_locals -POP_ebx # _common_recursion -STORE_INTEGER -:WHILE_bitwise_0 - -LOAD_IMMEDIATE_eax %1 -TEST -JUMP_EQ %END_WHILE_bitwise_0 - -# THEN_while_bitwise_0 - -# IF_bitwise_1 -LOAD_IMMEDIATE_eax &GLOBAL_global_token -LOAD_INTEGER -# looking up offset -# -> offset calculation -LOAD_IMMEDIATE_ebx %8 -ADD_ebx_to_eax -LOAD_INTEGER -PUSH_eax #_common_recursion -LOAD_IMMEDIATE_eax %0 -POP_ebx # _common_recursion -ADD_ebx_to_eax -LOAD_BYTE -PUSH_eax #_common_recursion -LOAD_IMMEDIATE_eax %38 -POP_ebx # _common_recursion -CMP -SETE -MOVEZBL -TEST -JUMP_EQ %ELSE_bitwise_1 -LOAD_EFFECTIVE_ADDRESS %8 -PUSH_eax #_common_recursion -LOAD_EFFECTIVE_ADDRESS %12 -LOAD_INTEGER -PUSH_eax #_process_expression1 -LOAD_EFFECTIVE_ADDRESS %12 -LOAD_INTEGER -PUSH_eax #_process_expression2 -CALL_IMMEDIATE %FUNCTION_pre_recursion -POP_ebx # _process_expression_locals -POP_ebx # _process_expression_locals -POP_ebx # _common_recursion -STORE_INTEGER -LOAD_EFFECTIVE_ADDRESS %8 -PUSH_eax #_common_recursion -LOAD_EFFECTIVE_ADDRESS %12 -LOAD_INTEGER -PUSH_eax #_process_expression1 -LOAD_EFFECTIVE_ADDRESS %12 -LOAD_INTEGER -PUSH_eax #_process_expression2 -CALL_IMMEDIATE %FUNCTION_equality_expr -POP_ebx # _process_expression_locals -POP_ebx # _process_expression_locals -POP_ebx # _common_recursion -STORE_INTEGER -LOAD_EFFECTIVE_ADDRESS %8 -PUSH_eax #_common_recursion -LOAD_EFFECTIVE_ADDRESS %12 -LOAD_INTEGER -PUSH_eax #_process_expression1 -LOAD_EFFECTIVE_ADDRESS %12 -LOAD_INTEGER -PUSH_eax #_process_expression2 -CALL_IMMEDIATE %FUNCTION_post_recursion -POP_ebx # _process_expression_locals -POP_ebx # _process_expression_locals -POP_ebx # _common_recursion -STORE_INTEGER -LOAD_EFFECTIVE_ADDRESS %8 -PUSH_eax #_common_recursion -LOAD_IMMEDIATE_eax &STRING_138 -PUSH_eax #_process_expression1 -LOAD_EFFECTIVE_ADDRESS %16 -LOAD_INTEGER -PUSH_eax #_process_expression2 -CALL_IMMEDIATE %FUNCTION_emit -POP_ebx # _process_expression_locals -POP_ebx # _process_expression_locals -POP_ebx # _common_recursion -STORE_INTEGER -JUMP %_END_IF_bitwise_1 -:ELSE_bitwise_1 -# IF_bitwise_2 -LOAD_IMMEDIATE_eax &GLOBAL_global_token -LOAD_INTEGER -# looking up offset -# -> offset calculation -LOAD_IMMEDIATE_ebx %8 -ADD_ebx_to_eax -LOAD_INTEGER -PUSH_eax #_common_recursion -LOAD_IMMEDIATE_eax %0 -POP_ebx # _common_recursion -ADD_ebx_to_eax -LOAD_BYTE -PUSH_eax #_common_recursion -LOAD_IMMEDIATE_eax %124 -POP_ebx # _common_recursion -CMP -SETE -MOVEZBL -TEST -JUMP_EQ %ELSE_bitwise_2 -LOAD_EFFECTIVE_ADDRESS %8 -PUSH_eax #_common_recursion -LOAD_EFFECTIVE_ADDRESS %12 -LOAD_INTEGER -PUSH_eax #_process_expression1 -LOAD_EFFECTIVE_ADDRESS %12 -LOAD_INTEGER -PUSH_eax #_process_expression2 -CALL_IMMEDIATE %FUNCTION_pre_recursion -POP_ebx # _process_expression_locals -POP_ebx # _process_expression_locals -POP_ebx # _common_recursion -STORE_INTEGER -LOAD_EFFECTIVE_ADDRESS %8 -PUSH_eax #_common_recursion -LOAD_EFFECTIVE_ADDRESS %12 -LOAD_INTEGER -PUSH_eax #_process_expression1 -LOAD_EFFECTIVE_ADDRESS %12 -LOAD_INTEGER -PUSH_eax #_process_expression2 -CALL_IMMEDIATE %FUNCTION_equality_expr -POP_ebx # _process_expression_locals -POP_ebx # _process_expression_locals -POP_ebx # _common_recursion -STORE_INTEGER -LOAD_EFFECTIVE_ADDRESS %8 -PUSH_eax #_common_recursion -LOAD_EFFECTIVE_ADDRESS %12 -LOAD_INTEGER -PUSH_eax #_process_expression1 -LOAD_EFFECTIVE_ADDRESS %12 -LOAD_INTEGER -PUSH_eax #_process_expression2 -CALL_IMMEDIATE %FUNCTION_post_recursion -POP_ebx # _process_expression_locals -POP_ebx # _process_expression_locals -POP_ebx # _common_recursion -STORE_INTEGER -LOAD_EFFECTIVE_ADDRESS %8 -PUSH_eax #_common_recursion -LOAD_IMMEDIATE_eax &STRING_139 -PUSH_eax #_process_expression1 -LOAD_EFFECTIVE_ADDRESS %16 -LOAD_INTEGER -PUSH_eax #_process_expression2 -CALL_IMMEDIATE %FUNCTION_emit -POP_ebx # _process_expression_locals -POP_ebx # _process_expression_locals -POP_ebx # _common_recursion -STORE_INTEGER -JUMP %_END_IF_bitwise_2 -:ELSE_bitwise_2 -# IF_bitwise_3 -LOAD_IMMEDIATE_eax &GLOBAL_global_token -LOAD_INTEGER -# looking up offset -# -> offset calculation -LOAD_IMMEDIATE_ebx %8 -ADD_ebx_to_eax -LOAD_INTEGER -PUSH_eax #_common_recursion -LOAD_IMMEDIATE_eax %0 -POP_ebx # _common_recursion -ADD_ebx_to_eax -LOAD_BYTE -PUSH_eax #_common_recursion -LOAD_IMMEDIATE_eax %94 -POP_ebx # _common_recursion -CMP -SETE -MOVEZBL -TEST -JUMP_EQ %ELSE_bitwise_3 -LOAD_EFFECTIVE_ADDRESS %8 -PUSH_eax #_common_recursion -LOAD_EFFECTIVE_ADDRESS %12 -LOAD_INTEGER -PUSH_eax #_process_expression1 -LOAD_EFFECTIVE_ADDRESS %12 -LOAD_INTEGER -PUSH_eax #_process_expression2 -CALL_IMMEDIATE %FUNCTION_pre_recursion -POP_ebx # _process_expression_locals -POP_ebx # _process_expression_locals -POP_ebx # _common_recursion -STORE_INTEGER -LOAD_EFFECTIVE_ADDRESS %8 -PUSH_eax #_common_recursion -LOAD_EFFECTIVE_ADDRESS %12 -LOAD_INTEGER -PUSH_eax #_process_expression1 -LOAD_EFFECTIVE_ADDRESS %12 -LOAD_INTEGER -PUSH_eax #_process_expression2 -CALL_IMMEDIATE %FUNCTION_equality_expr -POP_ebx # _process_expression_locals -POP_ebx # _process_expression_locals -POP_ebx # _common_recursion -STORE_INTEGER -LOAD_EFFECTIVE_ADDRESS %8 -PUSH_eax #_common_recursion -LOAD_EFFECTIVE_ADDRESS %12 -LOAD_INTEGER -PUSH_eax #_process_expression1 -LOAD_EFFECTIVE_ADDRESS %12 -LOAD_INTEGER -PUSH_eax #_process_expression2 -CALL_IMMEDIATE %FUNCTION_post_recursion -POP_ebx # _process_expression_locals -POP_ebx # _process_expression_locals -POP_ebx # _common_recursion -STORE_INTEGER -LOAD_EFFECTIVE_ADDRESS %8 -PUSH_eax #_common_recursion -LOAD_IMMEDIATE_eax &STRING_140 -PUSH_eax #_process_expression1 -LOAD_EFFECTIVE_ADDRESS %16 -LOAD_INTEGER -PUSH_eax #_process_expression2 -CALL_IMMEDIATE %FUNCTION_emit -POP_ebx # _process_expression_locals -POP_ebx # _process_expression_locals -POP_ebx # _common_recursion -STORE_INTEGER -JUMP %_END_IF_bitwise_3 -:ELSE_bitwise_3 -LOAD_EFFECTIVE_ADDRESS %8 -LOAD_INTEGER -RETURN -:_END_IF_bitwise_3 -:_END_IF_bitwise_2 -:_END_IF_bitwise_1 -JUMP %WHILE_bitwise_0 - -:END_WHILE_bitwise_0 - RETURN # Defining function expression :FUNCTION_expression -LOAD_EFFECTIVE_ADDRESS %8 -PUSH_eax #_common_recursion -LOAD_EFFECTIVE_ADDRESS %12 -LOAD_INTEGER -PUSH_eax #_process_expression1 -LOAD_EFFECTIVE_ADDRESS %12 -LOAD_INTEGER -PUSH_eax #_process_expression2 -CALL_IMMEDIATE %FUNCTION_bitwise -POP_ebx # _process_expression_locals -POP_ebx # _process_expression_locals -POP_ebx # _common_recursion -STORE_INTEGER +PUSH_edi # Prevent overwriting in recursion +PUSH_ebp # Protect the old base pointer +COPY_esp_to_edi # Copy new base pointer +COPY_edi_to_ebp +CALL_IMMEDIATE %FUNCTION_bitwise_expr +POP_ebp # Restore old base pointer +POP_edi # Prevent overwrite # IF_expression_0 - -LOAD_IMMEDIATE_eax &GLOBAL_global_token -LOAD_INTEGER -# looking up offset -# -> offset calculation -LOAD_IMMEDIATE_ebx %8 -ADD_ebx_to_eax -LOAD_INTEGER -PUSH_eax #_common_recursion -LOAD_IMMEDIATE_eax %0 -POP_ebx # _common_recursion -ADD_ebx_to_eax -LOAD_BYTE -PUSH_eax #_common_recursion -LOAD_IMMEDIATE_eax %61 -POP_ebx # _common_recursion -CMP -SETE -MOVEZBL -TEST -JUMP_EQ %ELSE_expression_0 - -# Defining local target -LOAD_IMMEDIATE_eax &GLOBAL_current_target -LOAD_INTEGER -PUSH_eax #target -# Defining local member -LOAD_IMMEDIATE_eax &STRING_141 +PUSH_edi # Prevent overwriting in recursion +PUSH_ebp # Protect the old base pointer +COPY_esp_to_edi # Copy new base pointer +LOAD_IMMEDIATE_eax &STRING_expression_1 PUSH_eax #_process_expression1 LOAD_IMMEDIATE_eax &GLOBAL_global_token LOAD_INTEGER # looking up offset # -> offset calculation -LOAD_IMMEDIATE_ebx %4 -ADD_ebx_to_eax -LOAD_INTEGER -# looking up offset -# -> offset calculation LOAD_IMMEDIATE_ebx %8 ADD_ebx_to_eax LOAD_INTEGER PUSH_eax #_process_expression2 +COPY_edi_to_ebp CALL_IMMEDIATE %FUNCTION_match POP_ebx # _process_expression_locals POP_ebx # _process_expression_locals -PUSH_eax #member -LOAD_EFFECTIVE_ADDRESS %16 -PUSH_eax #_common_recursion -LOAD_EFFECTIVE_ADDRESS %20 -LOAD_INTEGER -PUSH_eax #_process_expression1 -LOAD_EFFECTIVE_ADDRESS %20 -LOAD_INTEGER -PUSH_eax #_process_expression2 -CALL_IMMEDIATE %FUNCTION_pre_recursion -POP_ebx # _process_expression_locals -POP_ebx # _process_expression_locals -POP_ebx # _common_recursion -STORE_INTEGER -LOAD_EFFECTIVE_ADDRESS %16 -PUSH_eax #_common_recursion -LOAD_EFFECTIVE_ADDRESS %20 -LOAD_INTEGER -PUSH_eax #_process_expression1 -LOAD_EFFECTIVE_ADDRESS %20 -LOAD_INTEGER -PUSH_eax #_process_expression2 -CALL_IMMEDIATE %FUNCTION_expression -POP_ebx # _process_expression_locals -POP_ebx # _process_expression_locals -POP_ebx # _common_recursion -STORE_INTEGER -LOAD_EFFECTIVE_ADDRESS %16 -PUSH_eax #_common_recursion -LOAD_EFFECTIVE_ADDRESS %20 -LOAD_INTEGER -PUSH_eax #_process_expression1 -LOAD_EFFECTIVE_ADDRESS %20 -LOAD_INTEGER -PUSH_eax #_process_expression2 -CALL_IMMEDIATE %FUNCTION_post_recursion -POP_ebx # _process_expression_locals -POP_ebx # _process_expression_locals -POP_ebx # _common_recursion -STORE_INTEGER -# IF_expression_1 -LOAD_EFFECTIVE_ADDRESS %0 - -LOAD_INTEGER +POP_ebp # Restore old base pointer +POP_edi # Prevent overwrite TEST -JUMP_EQ %ELSE_expression_1 +JUMP_EQ %ELSE_expression_0 +# Defining local store +PUSH_eax #store # IF_expression_2 LOAD_IMMEDIATE_eax %1 PUSH_eax #_common_recursion -LOAD_EFFECTIVE_ADDRESS %8 -LOAD_INTEGER -# looking up offset -# -> offset calculation -LOAD_IMMEDIATE_ebx %12 -ADD_ebx_to_eax +PUSH_edi # Prevent overwriting in recursion +PUSH_ebp # Protect the old base pointer +COPY_esp_to_edi # Copy new base pointer +LOAD_IMMEDIATE_eax &STRING_expression_3 +PUSH_eax #_process_expression1 +LOAD_IMMEDIATE_eax &GLOBAL_global_token LOAD_INTEGER # looking up offset # -> offset calculation LOAD_IMMEDIATE_ebx %4 ADD_ebx_to_eax LOAD_INTEGER -POP_ebx # _common_recursion -CMP -SETE -MOVEZBL -TEST -JUMP_EQ %ELSE_expression_2 -LOAD_EFFECTIVE_ADDRESS %16 -PUSH_eax #_common_recursion -LOAD_IMMEDIATE_eax &STRING_142 -PUSH_eax #_process_expression1 -LOAD_EFFECTIVE_ADDRESS %24 +# looking up offset +# -> offset calculation +LOAD_IMMEDIATE_ebx %8 +ADD_ebx_to_eax LOAD_INTEGER PUSH_eax #_process_expression2 -CALL_IMMEDIATE %FUNCTION_emit +COPY_edi_to_ebp +CALL_IMMEDIATE %FUNCTION_match POP_ebx # _process_expression_locals POP_ebx # _process_expression_locals +POP_ebp # Restore old base pointer +POP_edi # Prevent overwrite +POP_ebx # _common_recursion +XOR_ebx_eax_into_eax +PUSH_eax #_common_recursion +LOAD_IMMEDIATE_eax %1 +PUSH_eax #_common_recursion +PUSH_edi # Prevent overwriting in recursion +PUSH_ebp # Protect the old base pointer +COPY_esp_to_edi # Copy new base pointer +LOAD_IMMEDIATE_eax &STRING_expression_4 +PUSH_eax #_process_expression1 +LOAD_IMMEDIATE_eax &GLOBAL_current_target +LOAD_INTEGER +# looking up offset +# -> offset calculation +LOAD_IMMEDIATE_ebx %24 +ADD_ebx_to_eax +LOAD_INTEGER +PUSH_eax #_process_expression2 +COPY_edi_to_ebp +CALL_IMMEDIATE %FUNCTION_match +POP_ebx # _process_expression_locals +POP_ebx # _process_expression_locals +POP_ebp # Restore old base pointer +POP_edi # Prevent overwrite +POP_ebx # _common_recursion +XOR_ebx_eax_into_eax +POP_ebx # _common_recursion +OR_eax_ebx +TEST +JUMP_EQ %ELSE_expression_2 +LOAD_BASE_ADDRESS_eax %-8 +PUSH_eax #_common_recursion +LOAD_IMMEDIATE_eax &STRING_expression_5 POP_ebx # _common_recursion STORE_INTEGER JUMP %_END_IF_expression_2 :ELSE_expression_2 -# IF_expression_3 -LOAD_IMMEDIATE_eax %4 +LOAD_BASE_ADDRESS_eax %-8 PUSH_eax #_common_recursion -LOAD_EFFECTIVE_ADDRESS %8 +LOAD_IMMEDIATE_eax &STRING_expression_6 +POP_ebx # _common_recursion +STORE_INTEGER +:_END_IF_expression_2 +PUSH_edi # Prevent overwriting in recursion +PUSH_ebp # Protect the old base pointer +COPY_esp_to_edi # Copy new base pointer +LOAD_IMMEDIATE_eax &FUNCTION_expression +PUSH_eax #_process_expression1 +COPY_edi_to_ebp +CALL_IMMEDIATE %FUNCTION_common_recursion +POP_ebx # _process_expression_locals +POP_ebp # Restore old base pointer +POP_edi # Prevent overwrite +PUSH_edi # Prevent overwriting in recursion +PUSH_ebp # Protect the old base pointer +COPY_esp_to_edi # Copy new base pointer +LOAD_BASE_ADDRESS_eax %-8 +LOAD_INTEGER +PUSH_eax #_process_expression1 +COPY_edi_to_ebp +CALL_IMMEDIATE %FUNCTION_emit_out +POP_ebx # _process_expression_locals +POP_ebp # Restore old base pointer +POP_edi # Prevent overwrite +LOAD_IMMEDIATE_eax &GLOBAL_current_target +PUSH_eax #_common_recursion +LOAD_IMMEDIATE_eax %0 +POP_ebx # _common_recursion +STORE_INTEGER +POP_ebx # _recursive_statement_locals +JUMP %_END_IF_expression_0 +:ELSE_expression_0 +:_END_IF_expression_0 +RETURN +# Defining function collect_local +:FUNCTION_collect_local +# Defining local type_size +PUSH_edi # Prevent overwriting in recursion +PUSH_ebp # Protect the old base pointer +COPY_esp_to_edi # Copy new base pointer +COPY_edi_to_ebp +CALL_IMMEDIATE %FUNCTION_type_name +POP_ebp # Restore old base pointer +POP_edi # Prevent overwrite +PUSH_eax #type_size +# Defining local a +PUSH_edi # Prevent overwriting in recursion +PUSH_ebp # Protect the old base pointer +COPY_esp_to_edi # Copy new base pointer +LOAD_IMMEDIATE_eax &GLOBAL_global_token LOAD_INTEGER # looking up offset # -> offset calculation -LOAD_IMMEDIATE_ebx %12 +LOAD_IMMEDIATE_ebx %8 ADD_ebx_to_eax LOAD_INTEGER +PUSH_eax #_process_expression1 +LOAD_BASE_ADDRESS_eax %-8 +LOAD_INTEGER +PUSH_eax #_process_expression2 +LOAD_IMMEDIATE_eax &GLOBAL_function +LOAD_INTEGER +# looking up offset +# -> offset calculation +LOAD_IMMEDIATE_ebx %4 +ADD_ebx_to_eax +LOAD_INTEGER +PUSH_eax #_process_expression2 +COPY_edi_to_ebp +CALL_IMMEDIATE %FUNCTION_sym_declare +POP_ebx # _process_expression_locals +POP_ebx # _process_expression_locals +POP_ebx # _process_expression_locals +POP_ebp # Restore old base pointer +POP_edi # Prevent overwrite +PUSH_eax #a +# IF_collect_local_0 +PUSH_edi # Prevent overwriting in recursion +PUSH_ebp # Protect the old base pointer +COPY_esp_to_edi # Copy new base pointer +LOAD_IMMEDIATE_eax &STRING_collect_local_1 +PUSH_eax #_process_expression1 +LOAD_IMMEDIATE_eax &GLOBAL_function +LOAD_INTEGER +# looking up offset +# -> offset calculation +LOAD_IMMEDIATE_ebx %8 +ADD_ebx_to_eax +LOAD_INTEGER +PUSH_eax #_process_expression2 +COPY_edi_to_ebp +CALL_IMMEDIATE %FUNCTION_match +POP_ebx # _process_expression_locals +POP_ebx # _process_expression_locals +POP_ebp # Restore old base pointer +POP_edi # Prevent overwrite +PUSH_eax #_common_recursion +LOAD_IMMEDIATE_eax %0 +PUSH_eax #_common_recursion +LOAD_IMMEDIATE_eax &GLOBAL_function +LOAD_INTEGER +# looking up offset +# -> offset calculation +LOAD_IMMEDIATE_ebx %4 +ADD_ebx_to_eax +LOAD_INTEGER +POP_ebx # _common_recursion +CMP +SETE +MOVEZBL +POP_ebx # _common_recursion +AND_eax_ebx +TEST +JUMP_EQ %ELSE_collect_local_0 +LOAD_BASE_ADDRESS_eax %-12 +LOAD_INTEGER +# looking up offset +# -> offset calculation +LOAD_IMMEDIATE_ebx %16 +ADD_ebx_to_eax +PUSH_eax #_common_recursion +LOAD_IMMEDIATE_eax %0 +PUSH_eax #_common_recursion +LOAD_IMMEDIATE_eax %4 +POP_ebx # _common_recursion +SUBTRACT_eax_from_ebx_into_ebx +MOVE_ebx_to_eax +POP_ebx # _common_recursion +STORE_INTEGER +JUMP %_END_IF_collect_local_0 +:ELSE_collect_local_0 +# IF_collect_local_2 +LOAD_IMMEDIATE_eax %0 +PUSH_eax #_common_recursion +LOAD_IMMEDIATE_eax &GLOBAL_function +LOAD_INTEGER +# looking up offset +# -> offset calculation +LOAD_IMMEDIATE_ebx %16 +ADD_ebx_to_eax +LOAD_INTEGER +POP_ebx # _common_recursion +CMP +SETE +MOVEZBL +PUSH_eax #_common_recursion +LOAD_IMMEDIATE_eax %0 +PUSH_eax #_common_recursion +LOAD_IMMEDIATE_eax &GLOBAL_function +LOAD_INTEGER +# looking up offset +# -> offset calculation +LOAD_IMMEDIATE_ebx %4 +ADD_ebx_to_eax +LOAD_INTEGER +POP_ebx # _common_recursion +CMP +SETE +MOVEZBL +POP_ebx # _common_recursion +AND_eax_ebx +TEST +JUMP_EQ %ELSE_collect_local_2 +LOAD_BASE_ADDRESS_eax %-12 +LOAD_INTEGER +# looking up offset +# -> offset calculation +LOAD_IMMEDIATE_ebx %16 +ADD_ebx_to_eax +PUSH_eax #_common_recursion +LOAD_IMMEDIATE_eax %0 +PUSH_eax #_common_recursion +LOAD_IMMEDIATE_eax %8 +POP_ebx # _common_recursion +SUBTRACT_eax_from_ebx_into_ebx +MOVE_ebx_to_eax +POP_ebx # _common_recursion +STORE_INTEGER +JUMP %_END_IF_collect_local_2 +:ELSE_collect_local_2 +# IF_collect_local_3 +LOAD_IMMEDIATE_eax %0 +PUSH_eax #_common_recursion +LOAD_IMMEDIATE_eax &GLOBAL_function +LOAD_INTEGER # looking up offset # -> offset calculation LOAD_IMMEDIATE_ebx %4 @@ -10937,151 +9358,88 @@ CMP SETE MOVEZBL TEST -JUMP_EQ %ELSE_expression_3 -LOAD_EFFECTIVE_ADDRESS %16 -PUSH_eax #_common_recursion -LOAD_IMMEDIATE_eax &STRING_143 -PUSH_eax #_process_expression1 -LOAD_EFFECTIVE_ADDRESS %24 -LOAD_INTEGER -PUSH_eax #_process_expression2 -CALL_IMMEDIATE %FUNCTION_emit -POP_ebx # _process_expression_locals -POP_ebx # _process_expression_locals -POP_ebx # _common_recursion -STORE_INTEGER -JUMP %_END_IF_expression_3 -:ELSE_expression_3 -:_END_IF_expression_3 -:_END_IF_expression_2 -JUMP %_END_IF_expression_1 -:ELSE_expression_1 -LOAD_EFFECTIVE_ADDRESS %16 -PUSH_eax #_common_recursion -LOAD_IMMEDIATE_eax &STRING_144 -PUSH_eax #_process_expression1 -LOAD_EFFECTIVE_ADDRESS %24 -LOAD_INTEGER -PUSH_eax #_process_expression2 -CALL_IMMEDIATE %FUNCTION_emit -POP_ebx # _process_expression_locals -POP_ebx # _process_expression_locals -POP_ebx # _common_recursion -STORE_INTEGER -:_END_IF_expression_1 -POP_ebx # _recursive_statement_locals -POP_ebx # _recursive_statement_locals -JUMP %_END_IF_expression_0 - -:ELSE_expression_0 - -:_END_IF_expression_0 - -LOAD_EFFECTIVE_ADDRESS %8 -LOAD_INTEGER -RETURN -# Defining function collect_local -:FUNCTION_collect_local -# Defining local type_size -CALL_IMMEDIATE %FUNCTION_type_name -PUSH_eax #type_size -LOAD_EFFECTIVE_ADDRESS %12 -PUSH_eax #_common_recursion -LOAD_IMMEDIATE_eax &STRING_145 -PUSH_eax #_process_expression1 -LOAD_IMMEDIATE_eax &GLOBAL_global_token +JUMP_EQ %ELSE_collect_local_3 +LOAD_BASE_ADDRESS_eax %-12 LOAD_INTEGER # looking up offset # -> offset calculation -LOAD_IMMEDIATE_ebx %8 -ADD_ebx_to_eax -LOAD_INTEGER -PUSH_eax #_process_expression1 -LOAD_IMMEDIATE_eax &STRING_146 -PUSH_eax #_process_expression2 -CALL_IMMEDIATE %FUNCTION_prepend_string -POP_ebx # _process_expression_locals -POP_ebx # _process_expression_locals -PUSH_eax #_process_expression2 -CALL_IMMEDIATE %FUNCTION_prepend_string -POP_ebx # _process_expression_locals -POP_ebx # _process_expression_locals -PUSH_eax #_process_expression1 -LOAD_EFFECTIVE_ADDRESS %20 -LOAD_INTEGER -PUSH_eax #_process_expression2 -CALL_IMMEDIATE %FUNCTION_emit -POP_ebx # _process_expression_locals -POP_ebx # _process_expression_locals -POP_ebx # _common_recursion -STORE_INTEGER -# Defining local a -LOAD_IMMEDIATE_eax &GLOBAL_global_token -LOAD_INTEGER -# looking up offset -# -> offset calculation -LOAD_IMMEDIATE_ebx %8 -ADD_ebx_to_eax -LOAD_INTEGER -PUSH_eax #_process_expression1 -LOAD_EFFECTIVE_ADDRESS %4 -LOAD_INTEGER -PUSH_eax #_process_expression2 -LOAD_EFFECTIVE_ADDRESS %16 -LOAD_INTEGER -# looking up offset -# -> offset calculation -LOAD_IMMEDIATE_ebx %20 -ADD_ebx_to_eax -LOAD_INTEGER -PUSH_eax #_process_expression2 -CALL_IMMEDIATE %FUNCTION_sym_declare -POP_ebx # _process_expression_locals -POP_ebx # _process_expression_locals -POP_ebx # _process_expression_locals -PUSH_eax #a -LOAD_EFFECTIVE_ADDRESS %12 -LOAD_INTEGER -# looking up offset -# -> offset calculation -LOAD_IMMEDIATE_ebx %20 +LOAD_IMMEDIATE_ebx %16 ADD_ebx_to_eax PUSH_eax #_common_recursion -LOAD_EFFECTIVE_ADDRESS %4 -LOAD_INTEGER -POP_ebx # _common_recursion -STORE_INTEGER -LOAD_IMMEDIATE_eax &GLOBAL_global_token -PUSH_eax #_common_recursion -LOAD_IMMEDIATE_eax &GLOBAL_global_token -LOAD_INTEGER -# looking up offset -LOAD_INTEGER -POP_ebx # _common_recursion -STORE_INTEGER -LOAD_EFFECTIVE_ADDRESS %12 +LOAD_IMMEDIATE_eax &GLOBAL_function LOAD_INTEGER # looking up offset # -> offset calculation -LOAD_IMMEDIATE_ebx %24 +LOAD_IMMEDIATE_ebx %16 ADD_ebx_to_eax -PUSH_eax #_common_recursion -LOAD_EFFECTIVE_ADDRESS %16 LOAD_INTEGER # looking up offset # -> offset calculation -LOAD_IMMEDIATE_ebx %24 +LOAD_IMMEDIATE_ebx %16 ADD_ebx_to_eax LOAD_INTEGER PUSH_eax #_common_recursion -LOAD_IMMEDIATE_eax %1 +LOAD_IMMEDIATE_eax %8 POP_ebx # _common_recursion SUBTRACT_eax_from_ebx_into_ebx MOVE_ebx_to_eax POP_ebx # _common_recursion STORE_INTEGER -# IF_collect_local_0 - +JUMP %_END_IF_collect_local_3 +:ELSE_collect_local_3 +LOAD_BASE_ADDRESS_eax %-12 +LOAD_INTEGER +# looking up offset +# -> offset calculation +LOAD_IMMEDIATE_ebx %16 +ADD_ebx_to_eax +PUSH_eax #_common_recursion +LOAD_IMMEDIATE_eax &GLOBAL_function +LOAD_INTEGER +# looking up offset +# -> offset calculation +LOAD_IMMEDIATE_ebx %4 +ADD_ebx_to_eax +LOAD_INTEGER +# looking up offset +# -> offset calculation +LOAD_IMMEDIATE_ebx %16 +ADD_ebx_to_eax +LOAD_INTEGER +PUSH_eax #_common_recursion +LOAD_IMMEDIATE_eax %4 +POP_ebx # _common_recursion +SUBTRACT_eax_from_ebx_into_ebx +MOVE_ebx_to_eax +POP_ebx # _common_recursion +STORE_INTEGER +:_END_IF_collect_local_3 +:_END_IF_collect_local_2 +:_END_IF_collect_local_0 +LOAD_IMMEDIATE_eax &GLOBAL_function +LOAD_INTEGER +# looking up offset +# -> offset calculation +LOAD_IMMEDIATE_ebx %4 +ADD_ebx_to_eax +PUSH_eax #_common_recursion +LOAD_BASE_ADDRESS_eax %-12 +LOAD_INTEGER +POP_ebx # _common_recursion +STORE_INTEGER +PUSH_edi # Prevent overwriting in recursion +PUSH_ebp # Protect the old base pointer +COPY_esp_to_edi # Copy new base pointer +LOAD_IMMEDIATE_eax &STRING_collect_local_4 +PUSH_eax #_process_expression1 +COPY_edi_to_ebp +CALL_IMMEDIATE %FUNCTION_emit_out +POP_ebx # _process_expression_locals +POP_ebp # Restore old base pointer +POP_edi # Prevent overwrite +PUSH_edi # Prevent overwriting in recursion +PUSH_ebp # Protect the old base pointer +COPY_esp_to_edi # Copy new base pointer LOAD_IMMEDIATE_eax &GLOBAL_global_token LOAD_INTEGER # looking up offset @@ -11089,20 +9447,52 @@ LOAD_INTEGER LOAD_IMMEDIATE_ebx %8 ADD_ebx_to_eax LOAD_INTEGER +PUSH_eax #_process_expression1 +COPY_edi_to_ebp +CALL_IMMEDIATE %FUNCTION_emit_out +POP_ebx # _process_expression_locals +POP_ebp # Restore old base pointer +POP_edi # Prevent overwrite +PUSH_edi # Prevent overwriting in recursion +PUSH_ebp # Protect the old base pointer +COPY_esp_to_edi # Copy new base pointer +LOAD_IMMEDIATE_eax &STRING_collect_local_5 +PUSH_eax #_process_expression1 +COPY_edi_to_ebp +CALL_IMMEDIATE %FUNCTION_emit_out +POP_ebx # _process_expression_locals +POP_ebp # Restore old base pointer +POP_edi # Prevent overwrite +LOAD_IMMEDIATE_eax &GLOBAL_global_token PUSH_eax #_common_recursion -LOAD_IMMEDIATE_eax %0 +LOAD_IMMEDIATE_eax &GLOBAL_global_token +LOAD_INTEGER +# looking up offset +LOAD_INTEGER POP_ebx # _common_recursion +STORE_INTEGER +# IF_collect_local_6 +PUSH_edi # Prevent overwriting in recursion +PUSH_ebp # Protect the old base pointer +COPY_esp_to_edi # Copy new base pointer +LOAD_IMMEDIATE_eax &STRING_collect_local_7 +PUSH_eax #_process_expression1 +LOAD_IMMEDIATE_eax &GLOBAL_global_token +LOAD_INTEGER +# looking up offset +# -> offset calculation +LOAD_IMMEDIATE_ebx %8 ADD_ebx_to_eax -LOAD_BYTE -PUSH_eax #_common_recursion -LOAD_IMMEDIATE_eax %61 -POP_ebx # _common_recursion -CMP -SETE -MOVEZBL +LOAD_INTEGER +PUSH_eax #_process_expression2 +COPY_edi_to_ebp +CALL_IMMEDIATE %FUNCTION_match +POP_ebx # _process_expression_locals +POP_ebx # _process_expression_locals +POP_ebp # Restore old base pointer +POP_edi # Prevent overwrite TEST -JUMP_EQ %ELSE_collect_local_0 - +JUMP_EQ %ELSE_collect_local_6 LOAD_IMMEDIATE_eax &GLOBAL_global_token PUSH_eax #_common_recursion LOAD_IMMEDIATE_eax &GLOBAL_global_token @@ -11111,57 +9501,43 @@ LOAD_INTEGER LOAD_INTEGER POP_ebx # _common_recursion STORE_INTEGER -LOAD_EFFECTIVE_ADDRESS %16 -PUSH_eax #_common_recursion -LOAD_EFFECTIVE_ADDRESS %20 -LOAD_INTEGER -PUSH_eax #_process_expression1 -LOAD_EFFECTIVE_ADDRESS %20 -LOAD_INTEGER -PUSH_eax #_process_expression2 +PUSH_edi # Prevent overwriting in recursion +PUSH_ebp # Protect the old base pointer +COPY_esp_to_edi # Copy new base pointer +COPY_edi_to_ebp CALL_IMMEDIATE %FUNCTION_expression -POP_ebx # _process_expression_locals -POP_ebx # _process_expression_locals -POP_ebx # _common_recursion -STORE_INTEGER -JUMP %_END_IF_collect_local_0 - -:ELSE_collect_local_0 - -:_END_IF_collect_local_0 - -LOAD_EFFECTIVE_ADDRESS %12 -LOAD_INTEGER -# looking up offset -# -> offset calculation -LOAD_IMMEDIATE_ebx %24 -ADD_ebx_to_eax -PUSH_eax #_common_recursion -LOAD_EFFECTIVE_ADDRESS %16 -LOAD_INTEGER -# looking up offset -# -> offset calculation -LOAD_IMMEDIATE_ebx %24 -ADD_ebx_to_eax -LOAD_INTEGER -PUSH_eax #_common_recursion -LOAD_IMMEDIATE_eax %1 -POP_ebx # _common_recursion -ADD_ebx_to_eax -POP_ebx # _common_recursion -STORE_INTEGER -LOAD_IMMEDIATE_eax &STRING_147 +POP_ebp # Restore old base pointer +POP_edi # Prevent overwrite +JUMP %_END_IF_collect_local_6 +:ELSE_collect_local_6 +:_END_IF_collect_local_6 +PUSH_edi # Prevent overwriting in recursion +PUSH_ebp # Protect the old base pointer +COPY_esp_to_edi # Copy new base pointer +LOAD_IMMEDIATE_eax &STRING_collect_local_8 PUSH_eax #_process_expression1 -LOAD_IMMEDIATE_eax &STRING_148 +LOAD_IMMEDIATE_eax &STRING_collect_local_9 PUSH_eax #_process_expression2 +COPY_edi_to_ebp CALL_IMMEDIATE %FUNCTION_require_match POP_ebx # _process_expression_locals POP_ebx # _process_expression_locals -LOAD_EFFECTIVE_ADDRESS %16 -PUSH_eax #_common_recursion -LOAD_IMMEDIATE_eax &STRING_149 +POP_ebp # Restore old base pointer +POP_edi # Prevent overwrite +PUSH_edi # Prevent overwriting in recursion +PUSH_ebp # Protect the old base pointer +COPY_esp_to_edi # Copy new base pointer +LOAD_IMMEDIATE_eax &STRING_collect_local_10 PUSH_eax #_process_expression1 -LOAD_EFFECTIVE_ADDRESS %8 +COPY_edi_to_ebp +CALL_IMMEDIATE %FUNCTION_emit_out +POP_ebx # _process_expression_locals +POP_ebp # Restore old base pointer +POP_edi # Prevent overwrite +PUSH_edi # Prevent overwriting in recursion +PUSH_ebp # Protect the old base pointer +COPY_esp_to_edi # Copy new base pointer +LOAD_BASE_ADDRESS_eax %-12 LOAD_INTEGER # looking up offset # -> offset calculation @@ -11169,37 +9545,38 @@ LOAD_IMMEDIATE_ebx %8 ADD_ebx_to_eax LOAD_INTEGER PUSH_eax #_process_expression1 -LOAD_IMMEDIATE_eax &STRING_150 -PUSH_eax #_process_expression2 -CALL_IMMEDIATE %FUNCTION_prepend_string -POP_ebx # _process_expression_locals -POP_ebx # _process_expression_locals -PUSH_eax #_process_expression2 -CALL_IMMEDIATE %FUNCTION_prepend_string -POP_ebx # _process_expression_locals +COPY_edi_to_ebp +CALL_IMMEDIATE %FUNCTION_emit_out POP_ebx # _process_expression_locals +POP_ebp # Restore old base pointer +POP_edi # Prevent overwrite +PUSH_edi # Prevent overwriting in recursion +PUSH_ebp # Protect the old base pointer +COPY_esp_to_edi # Copy new base pointer +LOAD_IMMEDIATE_eax &STRING_collect_local_11 PUSH_eax #_process_expression1 -LOAD_EFFECTIVE_ADDRESS %24 -LOAD_INTEGER -PUSH_eax #_process_expression2 -CALL_IMMEDIATE %FUNCTION_emit +COPY_edi_to_ebp +CALL_IMMEDIATE %FUNCTION_emit_out POP_ebx # _process_expression_locals -POP_ebx # _process_expression_locals -POP_ebx # _common_recursion -STORE_INTEGER -LOAD_EFFECTIVE_ADDRESS %16 -LOAD_INTEGER -POP_ebx # _return_result_locals -POP_ebx # _return_result_locals +POP_ebp # Restore old base pointer +POP_edi # Prevent overwrite +POP_ebx # _recursive_statement_locals +POP_ebx # _recursive_statement_locals RETURN # Defining function process_if :FUNCTION_process_if # Defining local number_string +PUSH_edi # Prevent overwriting in recursion +PUSH_ebp # Protect the old base pointer +COPY_esp_to_edi # Copy new base pointer LOAD_IMMEDIATE_eax &GLOBAL_current_count LOAD_INTEGER PUSH_eax #_process_expression1 +COPY_edi_to_ebp CALL_IMMEDIATE %FUNCTION_numerate_number POP_ebx # _process_expression_locals +POP_ebp # Restore old base pointer +POP_edi # Prevent overwrite PUSH_eax #number_string LOAD_IMMEDIATE_eax &GLOBAL_current_count PUSH_eax #_common_recursion @@ -11211,68 +9588,36 @@ POP_ebx # _common_recursion ADD_ebx_to_eax POP_ebx # _common_recursion STORE_INTEGER -LOAD_EFFECTIVE_ADDRESS %12 -PUSH_eax #_common_recursion -LOAD_IMMEDIATE_eax &STRING_151 +PUSH_edi # Prevent overwriting in recursion +PUSH_ebp # Protect the old base pointer +COPY_esp_to_edi # Copy new base pointer +LOAD_IMMEDIATE_eax &STRING_process_if_0 PUSH_eax #_process_expression1 -LOAD_EFFECTIVE_ADDRESS %20 +COPY_edi_to_ebp +CALL_IMMEDIATE %FUNCTION_emit_out +POP_ebx # _process_expression_locals +POP_ebp # Restore old base pointer +POP_edi # Prevent overwrite +PUSH_edi # Prevent overwriting in recursion +PUSH_ebp # Protect the old base pointer +COPY_esp_to_edi # Copy new base pointer +LOAD_IMMEDIATE_eax &GLOBAL_function LOAD_INTEGER -PUSH_eax #_process_expression2 -CALL_IMMEDIATE %FUNCTION_emit -POP_ebx # _process_expression_locals -POP_ebx # _process_expression_locals -POP_ebx # _common_recursion -STORE_INTEGER -LOAD_EFFECTIVE_ADDRESS %12 -PUSH_eax #_common_recursion -LOAD_IMMEDIATE_eax &GLOBAL_current_function +# looking up offset +# -> offset calculation +LOAD_IMMEDIATE_ebx %8 +ADD_ebx_to_eax LOAD_INTEGER PUSH_eax #_process_expression1 -LOAD_EFFECTIVE_ADDRESS %20 +LOAD_BASE_ADDRESS_eax %-8 LOAD_INTEGER PUSH_eax #_process_expression2 -CALL_IMMEDIATE %FUNCTION_emit +COPY_edi_to_ebp +CALL_IMMEDIATE %FUNCTION_uniqueID_out POP_ebx # _process_expression_locals POP_ebx # _process_expression_locals -POP_ebx # _common_recursion -STORE_INTEGER -LOAD_EFFECTIVE_ADDRESS %12 -PUSH_eax #_common_recursion -LOAD_IMMEDIATE_eax &STRING_152 -PUSH_eax #_process_expression1 -LOAD_EFFECTIVE_ADDRESS %20 -LOAD_INTEGER -PUSH_eax #_process_expression2 -CALL_IMMEDIATE %FUNCTION_emit -POP_ebx # _process_expression_locals -POP_ebx # _process_expression_locals -POP_ebx # _common_recursion -STORE_INTEGER -LOAD_EFFECTIVE_ADDRESS %12 -PUSH_eax #_common_recursion -LOAD_EFFECTIVE_ADDRESS %4 -LOAD_INTEGER -PUSH_eax #_process_expression1 -LOAD_EFFECTIVE_ADDRESS %20 -LOAD_INTEGER -PUSH_eax #_process_expression2 -CALL_IMMEDIATE %FUNCTION_emit -POP_ebx # _process_expression_locals -POP_ebx # _process_expression_locals -POP_ebx # _common_recursion -STORE_INTEGER -LOAD_EFFECTIVE_ADDRESS %12 -PUSH_eax #_common_recursion -LOAD_IMMEDIATE_eax &STRING_153 -PUSH_eax #_process_expression1 -LOAD_EFFECTIVE_ADDRESS %20 -LOAD_INTEGER -PUSH_eax #_process_expression2 -CALL_IMMEDIATE %FUNCTION_emit -POP_ebx # _process_expression_locals -POP_ebx # _process_expression_locals -POP_ebx # _common_recursion -STORE_INTEGER +POP_ebp # Restore old base pointer +POP_edi # Prevent overwrite LOAD_IMMEDIATE_eax &GLOBAL_global_token PUSH_eax #_common_recursion LOAD_IMMEDIATE_eax &GLOBAL_global_token @@ -11281,223 +9626,141 @@ LOAD_INTEGER LOAD_INTEGER POP_ebx # _common_recursion STORE_INTEGER -LOAD_IMMEDIATE_eax &STRING_154 +PUSH_edi # Prevent overwriting in recursion +PUSH_ebp # Protect the old base pointer +COPY_esp_to_edi # Copy new base pointer +LOAD_IMMEDIATE_eax &STRING_process_if_1 PUSH_eax #_process_expression1 -LOAD_IMMEDIATE_eax &STRING_155 +LOAD_IMMEDIATE_eax &STRING_process_if_2 PUSH_eax #_process_expression2 +COPY_edi_to_ebp CALL_IMMEDIATE %FUNCTION_require_match POP_ebx # _process_expression_locals POP_ebx # _process_expression_locals -LOAD_EFFECTIVE_ADDRESS %12 -PUSH_eax #_common_recursion -LOAD_EFFECTIVE_ADDRESS %16 -LOAD_INTEGER -PUSH_eax #_process_expression1 -LOAD_EFFECTIVE_ADDRESS %16 -LOAD_INTEGER -PUSH_eax #_process_expression2 +POP_ebp # Restore old base pointer +POP_edi # Prevent overwrite +PUSH_edi # Prevent overwriting in recursion +PUSH_ebp # Protect the old base pointer +COPY_esp_to_edi # Copy new base pointer +COPY_edi_to_ebp CALL_IMMEDIATE %FUNCTION_expression -POP_ebx # _process_expression_locals -POP_ebx # _process_expression_locals -POP_ebx # _common_recursion -STORE_INTEGER -LOAD_EFFECTIVE_ADDRESS %12 -PUSH_eax #_common_recursion -LOAD_IMMEDIATE_eax &STRING_156 +POP_ebp # Restore old base pointer +POP_edi # Prevent overwrite +PUSH_edi # Prevent overwriting in recursion +PUSH_ebp # Protect the old base pointer +COPY_esp_to_edi # Copy new base pointer +LOAD_IMMEDIATE_eax &STRING_process_if_3 PUSH_eax #_process_expression1 -LOAD_EFFECTIVE_ADDRESS %20 +COPY_edi_to_ebp +CALL_IMMEDIATE %FUNCTION_emit_out +POP_ebx # _process_expression_locals +POP_ebp # Restore old base pointer +POP_edi # Prevent overwrite +PUSH_edi # Prevent overwriting in recursion +PUSH_ebp # Protect the old base pointer +COPY_esp_to_edi # Copy new base pointer +LOAD_IMMEDIATE_eax &GLOBAL_function LOAD_INTEGER -PUSH_eax #_process_expression2 -CALL_IMMEDIATE %FUNCTION_emit -POP_ebx # _process_expression_locals -POP_ebx # _process_expression_locals -POP_ebx # _common_recursion -STORE_INTEGER -LOAD_EFFECTIVE_ADDRESS %12 -PUSH_eax #_common_recursion -LOAD_IMMEDIATE_eax &GLOBAL_current_function +# looking up offset +# -> offset calculation +LOAD_IMMEDIATE_ebx %8 +ADD_ebx_to_eax LOAD_INTEGER PUSH_eax #_process_expression1 -LOAD_EFFECTIVE_ADDRESS %20 +LOAD_BASE_ADDRESS_eax %-8 LOAD_INTEGER PUSH_eax #_process_expression2 -CALL_IMMEDIATE %FUNCTION_emit +COPY_edi_to_ebp +CALL_IMMEDIATE %FUNCTION_uniqueID_out POP_ebx # _process_expression_locals POP_ebx # _process_expression_locals -POP_ebx # _common_recursion -STORE_INTEGER -LOAD_EFFECTIVE_ADDRESS %12 -PUSH_eax #_common_recursion -LOAD_IMMEDIATE_eax &STRING_157 +POP_ebp # Restore old base pointer +POP_edi # Prevent overwrite +PUSH_edi # Prevent overwriting in recursion +PUSH_ebp # Protect the old base pointer +COPY_esp_to_edi # Copy new base pointer +LOAD_IMMEDIATE_eax &STRING_process_if_4 PUSH_eax #_process_expression1 -LOAD_EFFECTIVE_ADDRESS %20 -LOAD_INTEGER -PUSH_eax #_process_expression2 -CALL_IMMEDIATE %FUNCTION_emit -POP_ebx # _process_expression_locals -POP_ebx # _process_expression_locals -POP_ebx # _common_recursion -STORE_INTEGER -LOAD_EFFECTIVE_ADDRESS %12 -PUSH_eax #_common_recursion -LOAD_EFFECTIVE_ADDRESS %4 -LOAD_INTEGER -PUSH_eax #_process_expression1 -LOAD_EFFECTIVE_ADDRESS %20 -LOAD_INTEGER -PUSH_eax #_process_expression2 -CALL_IMMEDIATE %FUNCTION_emit -POP_ebx # _process_expression_locals -POP_ebx # _process_expression_locals -POP_ebx # _common_recursion -STORE_INTEGER -LOAD_EFFECTIVE_ADDRESS %12 -PUSH_eax #_common_recursion -LOAD_IMMEDIATE_eax &STRING_158 -PUSH_eax #_process_expression1 -LOAD_EFFECTIVE_ADDRESS %20 -LOAD_INTEGER -PUSH_eax #_process_expression2 -CALL_IMMEDIATE %FUNCTION_emit -POP_ebx # _process_expression_locals -POP_ebx # _process_expression_locals -POP_ebx # _common_recursion -STORE_INTEGER -LOAD_IMMEDIATE_eax &STRING_159 -PUSH_eax #_process_expression1 -LOAD_IMMEDIATE_eax &STRING_160 +LOAD_IMMEDIATE_eax &STRING_process_if_5 PUSH_eax #_process_expression2 +COPY_edi_to_ebp CALL_IMMEDIATE %FUNCTION_require_match POP_ebx # _process_expression_locals POP_ebx # _process_expression_locals -LOAD_EFFECTIVE_ADDRESS %12 -PUSH_eax #_common_recursion -LOAD_EFFECTIVE_ADDRESS %16 -LOAD_INTEGER -PUSH_eax #_process_expression1 -LOAD_EFFECTIVE_ADDRESS %16 -LOAD_INTEGER -PUSH_eax #_process_expression2 +POP_ebp # Restore old base pointer +POP_edi # Prevent overwrite +PUSH_edi # Prevent overwriting in recursion +PUSH_ebp # Protect the old base pointer +COPY_esp_to_edi # Copy new base pointer +COPY_edi_to_ebp CALL_IMMEDIATE %FUNCTION_statement -POP_ebx # _process_expression_locals -POP_ebx # _process_expression_locals -POP_ebx # _common_recursion -STORE_INTEGER -LOAD_EFFECTIVE_ADDRESS %12 -PUSH_eax #_common_recursion -LOAD_IMMEDIATE_eax &STRING_161 +POP_ebp # Restore old base pointer +POP_edi # Prevent overwrite +PUSH_edi # Prevent overwriting in recursion +PUSH_ebp # Protect the old base pointer +COPY_esp_to_edi # Copy new base pointer +LOAD_IMMEDIATE_eax &STRING_process_if_6 PUSH_eax #_process_expression1 -LOAD_EFFECTIVE_ADDRESS %20 +COPY_edi_to_ebp +CALL_IMMEDIATE %FUNCTION_emit_out +POP_ebx # _process_expression_locals +POP_ebp # Restore old base pointer +POP_edi # Prevent overwrite +PUSH_edi # Prevent overwriting in recursion +PUSH_ebp # Protect the old base pointer +COPY_esp_to_edi # Copy new base pointer +LOAD_IMMEDIATE_eax &GLOBAL_function LOAD_INTEGER -PUSH_eax #_process_expression2 -CALL_IMMEDIATE %FUNCTION_emit -POP_ebx # _process_expression_locals -POP_ebx # _process_expression_locals -POP_ebx # _common_recursion -STORE_INTEGER -LOAD_EFFECTIVE_ADDRESS %12 -PUSH_eax #_common_recursion -LOAD_IMMEDIATE_eax &GLOBAL_current_function +# looking up offset +# -> offset calculation +LOAD_IMMEDIATE_ebx %8 +ADD_ebx_to_eax LOAD_INTEGER PUSH_eax #_process_expression1 -LOAD_EFFECTIVE_ADDRESS %20 +LOAD_BASE_ADDRESS_eax %-8 LOAD_INTEGER PUSH_eax #_process_expression2 -CALL_IMMEDIATE %FUNCTION_emit +COPY_edi_to_ebp +CALL_IMMEDIATE %FUNCTION_uniqueID_out POP_ebx # _process_expression_locals POP_ebx # _process_expression_locals -POP_ebx # _common_recursion -STORE_INTEGER -LOAD_EFFECTIVE_ADDRESS %12 -PUSH_eax #_common_recursion -LOAD_IMMEDIATE_eax &STRING_162 +POP_ebp # Restore old base pointer +POP_edi # Prevent overwrite +PUSH_edi # Prevent overwriting in recursion +PUSH_ebp # Protect the old base pointer +COPY_esp_to_edi # Copy new base pointer +LOAD_IMMEDIATE_eax &STRING_process_if_7 PUSH_eax #_process_expression1 -LOAD_EFFECTIVE_ADDRESS %20 +COPY_edi_to_ebp +CALL_IMMEDIATE %FUNCTION_emit_out +POP_ebx # _process_expression_locals +POP_ebp # Restore old base pointer +POP_edi # Prevent overwrite +PUSH_edi # Prevent overwriting in recursion +PUSH_ebp # Protect the old base pointer +COPY_esp_to_edi # Copy new base pointer +LOAD_IMMEDIATE_eax &GLOBAL_function LOAD_INTEGER -PUSH_eax #_process_expression2 -CALL_IMMEDIATE %FUNCTION_emit -POP_ebx # _process_expression_locals -POP_ebx # _process_expression_locals -POP_ebx # _common_recursion -STORE_INTEGER -LOAD_EFFECTIVE_ADDRESS %12 -PUSH_eax #_common_recursion -LOAD_EFFECTIVE_ADDRESS %4 +# looking up offset +# -> offset calculation +LOAD_IMMEDIATE_ebx %8 +ADD_ebx_to_eax LOAD_INTEGER PUSH_eax #_process_expression1 -LOAD_EFFECTIVE_ADDRESS %20 +LOAD_BASE_ADDRESS_eax %-8 LOAD_INTEGER PUSH_eax #_process_expression2 -CALL_IMMEDIATE %FUNCTION_emit +COPY_edi_to_ebp +CALL_IMMEDIATE %FUNCTION_uniqueID_out POP_ebx # _process_expression_locals POP_ebx # _process_expression_locals -POP_ebx # _common_recursion -STORE_INTEGER -LOAD_EFFECTIVE_ADDRESS %12 -PUSH_eax #_common_recursion -LOAD_IMMEDIATE_eax &STRING_163 -PUSH_eax #_process_expression1 -LOAD_EFFECTIVE_ADDRESS %20 -LOAD_INTEGER -PUSH_eax #_process_expression2 -CALL_IMMEDIATE %FUNCTION_emit -POP_ebx # _process_expression_locals -POP_ebx # _process_expression_locals -POP_ebx # _common_recursion -STORE_INTEGER -LOAD_EFFECTIVE_ADDRESS %12 -PUSH_eax #_common_recursion -LOAD_IMMEDIATE_eax &GLOBAL_current_function -LOAD_INTEGER -PUSH_eax #_process_expression1 -LOAD_EFFECTIVE_ADDRESS %20 -LOAD_INTEGER -PUSH_eax #_process_expression2 -CALL_IMMEDIATE %FUNCTION_emit -POP_ebx # _process_expression_locals -POP_ebx # _process_expression_locals -POP_ebx # _common_recursion -STORE_INTEGER -LOAD_EFFECTIVE_ADDRESS %12 -PUSH_eax #_common_recursion -LOAD_IMMEDIATE_eax &STRING_164 -PUSH_eax #_process_expression1 -LOAD_EFFECTIVE_ADDRESS %20 -LOAD_INTEGER -PUSH_eax #_process_expression2 -CALL_IMMEDIATE %FUNCTION_emit -POP_ebx # _process_expression_locals -POP_ebx # _process_expression_locals -POP_ebx # _common_recursion -STORE_INTEGER -LOAD_EFFECTIVE_ADDRESS %12 -PUSH_eax #_common_recursion -LOAD_EFFECTIVE_ADDRESS %4 -LOAD_INTEGER -PUSH_eax #_process_expression1 -LOAD_EFFECTIVE_ADDRESS %20 -LOAD_INTEGER -PUSH_eax #_process_expression2 -CALL_IMMEDIATE %FUNCTION_emit -POP_ebx # _process_expression_locals -POP_ebx # _process_expression_locals -POP_ebx # _common_recursion -STORE_INTEGER -LOAD_EFFECTIVE_ADDRESS %12 -PUSH_eax #_common_recursion -LOAD_IMMEDIATE_eax &STRING_165 -PUSH_eax #_process_expression1 -LOAD_EFFECTIVE_ADDRESS %20 -LOAD_INTEGER -PUSH_eax #_process_expression2 -CALL_IMMEDIATE %FUNCTION_emit -POP_ebx # _process_expression_locals -POP_ebx # _process_expression_locals -POP_ebx # _common_recursion -STORE_INTEGER -# IF_process_if_0 - -LOAD_IMMEDIATE_eax &STRING_166 +POP_ebp # Restore old base pointer +POP_edi # Prevent overwrite +# IF_process_if_8 +PUSH_edi # Prevent overwriting in recursion +PUSH_ebp # Protect the old base pointer +COPY_esp_to_edi # Copy new base pointer +LOAD_IMMEDIATE_eax &STRING_process_if_9 PUSH_eax #_process_expression1 LOAD_IMMEDIATE_eax &GLOBAL_global_token LOAD_INTEGER @@ -11507,12 +9770,14 @@ LOAD_IMMEDIATE_ebx %8 ADD_ebx_to_eax LOAD_INTEGER PUSH_eax #_process_expression2 +COPY_edi_to_ebp CALL_IMMEDIATE %FUNCTION_match POP_ebx # _process_expression_locals POP_ebx # _process_expression_locals +POP_ebp # Restore old base pointer +POP_edi # Prevent overwrite TEST -JUMP_EQ %ELSE_process_if_0 - +JUMP_EQ %ELSE_process_if_8 LOAD_IMMEDIATE_eax &GLOBAL_global_token PUSH_eax #_common_recursion LOAD_IMMEDIATE_eax &GLOBAL_global_token @@ -11521,99 +9786,78 @@ LOAD_INTEGER LOAD_INTEGER POP_ebx # _common_recursion STORE_INTEGER -LOAD_EFFECTIVE_ADDRESS %12 -PUSH_eax #_common_recursion -LOAD_EFFECTIVE_ADDRESS %16 -LOAD_INTEGER -PUSH_eax #_process_expression1 -LOAD_EFFECTIVE_ADDRESS %16 -LOAD_INTEGER -PUSH_eax #_process_expression2 +PUSH_edi # Prevent overwriting in recursion +PUSH_ebp # Protect the old base pointer +COPY_esp_to_edi # Copy new base pointer +COPY_edi_to_ebp CALL_IMMEDIATE %FUNCTION_statement -POP_ebx # _process_expression_locals -POP_ebx # _process_expression_locals -POP_ebx # _common_recursion -STORE_INTEGER -JUMP %_END_IF_process_if_0 - -:ELSE_process_if_0 - -:_END_IF_process_if_0 - -LOAD_EFFECTIVE_ADDRESS %12 -PUSH_eax #_common_recursion -LOAD_IMMEDIATE_eax &STRING_167 +POP_ebp # Restore old base pointer +POP_edi # Prevent overwrite +JUMP %_END_IF_process_if_8 +:ELSE_process_if_8 +:_END_IF_process_if_8 +PUSH_edi # Prevent overwriting in recursion +PUSH_ebp # Protect the old base pointer +COPY_esp_to_edi # Copy new base pointer +LOAD_IMMEDIATE_eax &STRING_process_if_10 PUSH_eax #_process_expression1 -LOAD_EFFECTIVE_ADDRESS %20 +COPY_edi_to_ebp +CALL_IMMEDIATE %FUNCTION_emit_out +POP_ebx # _process_expression_locals +POP_ebp # Restore old base pointer +POP_edi # Prevent overwrite +PUSH_edi # Prevent overwriting in recursion +PUSH_ebp # Protect the old base pointer +COPY_esp_to_edi # Copy new base pointer +LOAD_IMMEDIATE_eax &GLOBAL_function LOAD_INTEGER -PUSH_eax #_process_expression2 -CALL_IMMEDIATE %FUNCTION_emit -POP_ebx # _process_expression_locals -POP_ebx # _process_expression_locals -POP_ebx # _common_recursion -STORE_INTEGER -LOAD_EFFECTIVE_ADDRESS %12 -PUSH_eax #_common_recursion -LOAD_IMMEDIATE_eax &GLOBAL_current_function +# looking up offset +# -> offset calculation +LOAD_IMMEDIATE_ebx %8 +ADD_ebx_to_eax LOAD_INTEGER PUSH_eax #_process_expression1 -LOAD_EFFECTIVE_ADDRESS %20 +LOAD_BASE_ADDRESS_eax %-8 LOAD_INTEGER PUSH_eax #_process_expression2 -CALL_IMMEDIATE %FUNCTION_emit +COPY_edi_to_ebp +CALL_IMMEDIATE %FUNCTION_uniqueID_out POP_ebx # _process_expression_locals POP_ebx # _process_expression_locals -POP_ebx # _common_recursion -STORE_INTEGER -LOAD_EFFECTIVE_ADDRESS %12 -PUSH_eax #_common_recursion -LOAD_IMMEDIATE_eax &STRING_168 -PUSH_eax #_process_expression1 -LOAD_EFFECTIVE_ADDRESS %20 -LOAD_INTEGER -PUSH_eax #_process_expression2 -CALL_IMMEDIATE %FUNCTION_emit -POP_ebx # _process_expression_locals -POP_ebx # _process_expression_locals -POP_ebx # _common_recursion -STORE_INTEGER -LOAD_EFFECTIVE_ADDRESS %12 -PUSH_eax #_common_recursion -LOAD_EFFECTIVE_ADDRESS %4 -LOAD_INTEGER -PUSH_eax #_process_expression1 -LOAD_EFFECTIVE_ADDRESS %20 -LOAD_INTEGER -PUSH_eax #_process_expression2 -CALL_IMMEDIATE %FUNCTION_emit -POP_ebx # _process_expression_locals -POP_ebx # _process_expression_locals -POP_ebx # _common_recursion -STORE_INTEGER -LOAD_EFFECTIVE_ADDRESS %12 -PUSH_eax #_common_recursion -LOAD_IMMEDIATE_eax &STRING_169 -PUSH_eax #_process_expression1 -LOAD_EFFECTIVE_ADDRESS %20 -LOAD_INTEGER -PUSH_eax #_process_expression2 -CALL_IMMEDIATE %FUNCTION_emit -POP_ebx # _process_expression_locals -POP_ebx # _process_expression_locals -POP_ebx # _common_recursion -STORE_INTEGER -LOAD_EFFECTIVE_ADDRESS %12 -LOAD_INTEGER -POP_ebx # _return_result_locals +POP_ebp # Restore old base pointer +POP_edi # Prevent overwrite +POP_ebx # _recursive_statement_locals RETURN # Defining function process_for :FUNCTION_process_for +# Defining local nested_locals +LOAD_IMMEDIATE_eax &GLOBAL_break_frame +LOAD_INTEGER +PUSH_eax #nested_locals +# Defining local nested_break_head +LOAD_IMMEDIATE_eax &GLOBAL_break_target_head +LOAD_INTEGER +PUSH_eax #nested_break_head +# Defining local nested_break_func +LOAD_IMMEDIATE_eax &GLOBAL_break_target_func +LOAD_INTEGER +PUSH_eax #nested_break_func +# Defining local nested_break_num +LOAD_IMMEDIATE_eax &GLOBAL_break_target_num +LOAD_INTEGER +PUSH_eax #nested_break_num # Defining local number_string +PUSH_edi # Prevent overwriting in recursion +PUSH_ebp # Protect the old base pointer +COPY_esp_to_edi # Copy new base pointer LOAD_IMMEDIATE_eax &GLOBAL_current_count LOAD_INTEGER PUSH_eax #_process_expression1 +COPY_edi_to_ebp CALL_IMMEDIATE %FUNCTION_numerate_number POP_ebx # _process_expression_locals +POP_ebp # Restore old base pointer +POP_edi # Prevent overwrite PUSH_eax #number_string LOAD_IMMEDIATE_eax &GLOBAL_current_count PUSH_eax #_common_recursion @@ -11625,112 +9869,69 @@ POP_ebx # _common_recursion ADD_ebx_to_eax POP_ebx # _common_recursion STORE_INTEGER -# Defining local nested_break -LOAD_IMMEDIATE_eax &GLOBAL_break_target -LOAD_INTEGER -PUSH_eax #nested_break -# Defining local nested_locals -LOAD_IMMEDIATE_eax &GLOBAL_break_locals -LOAD_INTEGER -PUSH_eax #nested_locals -LOAD_IMMEDIATE_eax &GLOBAL_break_locals +LOAD_IMMEDIATE_eax &GLOBAL_break_target_head PUSH_eax #_common_recursion -LOAD_EFFECTIVE_ADDRESS %20 +LOAD_IMMEDIATE_eax &STRING_process_for_0 +POP_ebx # _common_recursion +STORE_INTEGER +LOAD_IMMEDIATE_eax &GLOBAL_break_target_num +PUSH_eax #_common_recursion +LOAD_BASE_ADDRESS_eax %-24 +LOAD_INTEGER +POP_ebx # _common_recursion +STORE_INTEGER +LOAD_IMMEDIATE_eax &GLOBAL_break_frame +PUSH_eax #_common_recursion +LOAD_IMMEDIATE_eax &GLOBAL_function LOAD_INTEGER # looking up offset # -> offset calculation -LOAD_IMMEDIATE_ebx %20 +LOAD_IMMEDIATE_ebx %4 ADD_ebx_to_eax LOAD_INTEGER POP_ebx # _common_recursion STORE_INTEGER -LOAD_IMMEDIATE_eax &GLOBAL_break_target +LOAD_IMMEDIATE_eax &GLOBAL_break_target_func PUSH_eax #_common_recursion -LOAD_IMMEDIATE_eax &STRING_170 -PUSH_eax #_process_expression1 -LOAD_IMMEDIATE_eax &GLOBAL_current_function +LOAD_IMMEDIATE_eax &GLOBAL_function LOAD_INTEGER -PUSH_eax #_process_expression1 -LOAD_IMMEDIATE_eax &STRING_171 -PUSH_eax #_process_expression1 -LOAD_EFFECTIVE_ADDRESS %24 +# looking up offset +# -> offset calculation +LOAD_IMMEDIATE_ebx %8 +ADD_ebx_to_eax LOAD_INTEGER -PUSH_eax #_process_expression2 -CALL_IMMEDIATE %FUNCTION_prepend_string -POP_ebx # _process_expression_locals -POP_ebx # _process_expression_locals -PUSH_eax #_process_expression2 -CALL_IMMEDIATE %FUNCTION_prepend_string -POP_ebx # _process_expression_locals -POP_ebx # _process_expression_locals -PUSH_eax #_process_expression2 -CALL_IMMEDIATE %FUNCTION_prepend_string -POP_ebx # _process_expression_locals -POP_ebx # _process_expression_locals POP_ebx # _common_recursion STORE_INTEGER -LOAD_EFFECTIVE_ADDRESS %20 -PUSH_eax #_common_recursion -LOAD_IMMEDIATE_eax &STRING_172 +PUSH_edi # Prevent overwriting in recursion +PUSH_ebp # Protect the old base pointer +COPY_esp_to_edi # Copy new base pointer +LOAD_IMMEDIATE_eax &STRING_process_for_1 PUSH_eax #_process_expression1 -LOAD_EFFECTIVE_ADDRESS %28 +COPY_edi_to_ebp +CALL_IMMEDIATE %FUNCTION_emit_out +POP_ebx # _process_expression_locals +POP_ebp # Restore old base pointer +POP_edi # Prevent overwrite +PUSH_edi # Prevent overwriting in recursion +PUSH_ebp # Protect the old base pointer +COPY_esp_to_edi # Copy new base pointer +LOAD_IMMEDIATE_eax &GLOBAL_function LOAD_INTEGER -PUSH_eax #_process_expression2 -CALL_IMMEDIATE %FUNCTION_emit -POP_ebx # _process_expression_locals -POP_ebx # _process_expression_locals -POP_ebx # _common_recursion -STORE_INTEGER -LOAD_EFFECTIVE_ADDRESS %20 -PUSH_eax #_common_recursion -LOAD_IMMEDIATE_eax &GLOBAL_current_function +# looking up offset +# -> offset calculation +LOAD_IMMEDIATE_ebx %8 +ADD_ebx_to_eax LOAD_INTEGER PUSH_eax #_process_expression1 -LOAD_EFFECTIVE_ADDRESS %28 +LOAD_BASE_ADDRESS_eax %-24 LOAD_INTEGER PUSH_eax #_process_expression2 -CALL_IMMEDIATE %FUNCTION_emit +COPY_edi_to_ebp +CALL_IMMEDIATE %FUNCTION_uniqueID_out POP_ebx # _process_expression_locals POP_ebx # _process_expression_locals -POP_ebx # _common_recursion -STORE_INTEGER -LOAD_EFFECTIVE_ADDRESS %20 -PUSH_eax #_common_recursion -LOAD_IMMEDIATE_eax &STRING_173 -PUSH_eax #_process_expression1 -LOAD_EFFECTIVE_ADDRESS %28 -LOAD_INTEGER -PUSH_eax #_process_expression2 -CALL_IMMEDIATE %FUNCTION_emit -POP_ebx # _process_expression_locals -POP_ebx # _process_expression_locals -POP_ebx # _common_recursion -STORE_INTEGER -LOAD_EFFECTIVE_ADDRESS %20 -PUSH_eax #_common_recursion -LOAD_EFFECTIVE_ADDRESS %12 -LOAD_INTEGER -PUSH_eax #_process_expression1 -LOAD_EFFECTIVE_ADDRESS %28 -LOAD_INTEGER -PUSH_eax #_process_expression2 -CALL_IMMEDIATE %FUNCTION_emit -POP_ebx # _process_expression_locals -POP_ebx # _process_expression_locals -POP_ebx # _common_recursion -STORE_INTEGER -LOAD_EFFECTIVE_ADDRESS %20 -PUSH_eax #_common_recursion -LOAD_IMMEDIATE_eax &STRING_174 -PUSH_eax #_process_expression1 -LOAD_EFFECTIVE_ADDRESS %28 -LOAD_INTEGER -PUSH_eax #_process_expression2 -CALL_IMMEDIATE %FUNCTION_emit -POP_ebx # _process_expression_locals -POP_ebx # _process_expression_locals -POP_ebx # _common_recursion -STORE_INTEGER +POP_ebp # Restore old base pointer +POP_edi # Prevent overwrite LOAD_IMMEDIATE_eax &GLOBAL_global_token PUSH_eax #_common_recursion LOAD_IMMEDIATE_eax &GLOBAL_global_token @@ -11739,18 +9940,26 @@ LOAD_INTEGER LOAD_INTEGER POP_ebx # _common_recursion STORE_INTEGER -LOAD_IMMEDIATE_eax &STRING_175 +PUSH_edi # Prevent overwriting in recursion +PUSH_ebp # Protect the old base pointer +COPY_esp_to_edi # Copy new base pointer +LOAD_IMMEDIATE_eax &STRING_process_for_2 PUSH_eax #_process_expression1 -LOAD_IMMEDIATE_eax &STRING_176 +LOAD_IMMEDIATE_eax &STRING_process_for_3 PUSH_eax #_process_expression2 +COPY_edi_to_ebp CALL_IMMEDIATE %FUNCTION_require_match POP_ebx # _process_expression_locals POP_ebx # _process_expression_locals -# IF_process_for_0 - +POP_ebp # Restore old base pointer +POP_edi # Prevent overwrite +# IF_process_for_4 LOAD_IMMEDIATE_eax %1 PUSH_eax #_common_recursion -LOAD_IMMEDIATE_eax &STRING_177 +PUSH_edi # Prevent overwriting in recursion +PUSH_ebp # Protect the old base pointer +COPY_esp_to_edi # Copy new base pointer +LOAD_IMMEDIATE_eax &STRING_process_for_5 PUSH_eax #_process_expression1 LOAD_IMMEDIATE_eax &GLOBAL_global_token LOAD_INTEGER @@ -11760,558 +9969,355 @@ LOAD_IMMEDIATE_ebx %8 ADD_ebx_to_eax LOAD_INTEGER PUSH_eax #_process_expression2 +COPY_edi_to_ebp CALL_IMMEDIATE %FUNCTION_match POP_ebx # _process_expression_locals POP_ebx # _process_expression_locals +POP_ebp # Restore old base pointer +POP_edi # Prevent overwrite POP_ebx # _common_recursion XOR_ebx_eax_into_eax TEST -JUMP_EQ %ELSE_process_for_0 - -LOAD_EFFECTIVE_ADDRESS %20 -PUSH_eax #_common_recursion -LOAD_EFFECTIVE_ADDRESS %24 -LOAD_INTEGER -PUSH_eax #_process_expression1 -LOAD_EFFECTIVE_ADDRESS %24 -LOAD_INTEGER -PUSH_eax #_process_expression2 +JUMP_EQ %ELSE_process_for_4 +PUSH_edi # Prevent overwriting in recursion +PUSH_ebp # Protect the old base pointer +COPY_esp_to_edi # Copy new base pointer +COPY_edi_to_ebp CALL_IMMEDIATE %FUNCTION_expression -POP_ebx # _process_expression_locals -POP_ebx # _process_expression_locals -POP_ebx # _common_recursion -STORE_INTEGER -JUMP %_END_IF_process_for_0 - -:ELSE_process_for_0 - -:_END_IF_process_for_0 - -LOAD_EFFECTIVE_ADDRESS %20 -PUSH_eax #_common_recursion -LOAD_IMMEDIATE_eax &STRING_178 +POP_ebp # Restore old base pointer +POP_edi # Prevent overwrite +JUMP %_END_IF_process_for_4 +:ELSE_process_for_4 +:_END_IF_process_for_4 +PUSH_edi # Prevent overwriting in recursion +PUSH_ebp # Protect the old base pointer +COPY_esp_to_edi # Copy new base pointer +LOAD_IMMEDIATE_eax &STRING_process_for_6 PUSH_eax #_process_expression1 -LOAD_EFFECTIVE_ADDRESS %28 +COPY_edi_to_ebp +CALL_IMMEDIATE %FUNCTION_emit_out +POP_ebx # _process_expression_locals +POP_ebp # Restore old base pointer +POP_edi # Prevent overwrite +PUSH_edi # Prevent overwriting in recursion +PUSH_ebp # Protect the old base pointer +COPY_esp_to_edi # Copy new base pointer +LOAD_IMMEDIATE_eax &GLOBAL_function LOAD_INTEGER -PUSH_eax #_process_expression2 -CALL_IMMEDIATE %FUNCTION_emit -POP_ebx # _process_expression_locals -POP_ebx # _process_expression_locals -POP_ebx # _common_recursion -STORE_INTEGER -LOAD_EFFECTIVE_ADDRESS %20 -PUSH_eax #_common_recursion -LOAD_IMMEDIATE_eax &GLOBAL_current_function +# looking up offset +# -> offset calculation +LOAD_IMMEDIATE_ebx %8 +ADD_ebx_to_eax LOAD_INTEGER PUSH_eax #_process_expression1 -LOAD_EFFECTIVE_ADDRESS %28 +LOAD_BASE_ADDRESS_eax %-24 LOAD_INTEGER PUSH_eax #_process_expression2 -CALL_IMMEDIATE %FUNCTION_emit +COPY_edi_to_ebp +CALL_IMMEDIATE %FUNCTION_uniqueID_out POP_ebx # _process_expression_locals POP_ebx # _process_expression_locals -POP_ebx # _common_recursion -STORE_INTEGER -LOAD_EFFECTIVE_ADDRESS %20 -PUSH_eax #_common_recursion -LOAD_IMMEDIATE_eax &STRING_179 +POP_ebp # Restore old base pointer +POP_edi # Prevent overwrite +PUSH_edi # Prevent overwriting in recursion +PUSH_ebp # Protect the old base pointer +COPY_esp_to_edi # Copy new base pointer +LOAD_IMMEDIATE_eax &STRING_process_for_7 PUSH_eax #_process_expression1 -LOAD_EFFECTIVE_ADDRESS %28 -LOAD_INTEGER -PUSH_eax #_process_expression2 -CALL_IMMEDIATE %FUNCTION_emit -POP_ebx # _process_expression_locals -POP_ebx # _process_expression_locals -POP_ebx # _common_recursion -STORE_INTEGER -LOAD_EFFECTIVE_ADDRESS %20 -PUSH_eax #_common_recursion -LOAD_EFFECTIVE_ADDRESS %12 -LOAD_INTEGER -PUSH_eax #_process_expression1 -LOAD_EFFECTIVE_ADDRESS %28 -LOAD_INTEGER -PUSH_eax #_process_expression2 -CALL_IMMEDIATE %FUNCTION_emit -POP_ebx # _process_expression_locals -POP_ebx # _process_expression_locals -POP_ebx # _common_recursion -STORE_INTEGER -LOAD_EFFECTIVE_ADDRESS %20 -PUSH_eax #_common_recursion -LOAD_IMMEDIATE_eax &STRING_180 -PUSH_eax #_process_expression1 -LOAD_EFFECTIVE_ADDRESS %28 -LOAD_INTEGER -PUSH_eax #_process_expression2 -CALL_IMMEDIATE %FUNCTION_emit -POP_ebx # _process_expression_locals -POP_ebx # _process_expression_locals -POP_ebx # _common_recursion -STORE_INTEGER -LOAD_IMMEDIATE_eax &STRING_181 -PUSH_eax #_process_expression1 -LOAD_IMMEDIATE_eax &STRING_182 +LOAD_IMMEDIATE_eax &STRING_process_for_8 PUSH_eax #_process_expression2 +COPY_edi_to_ebp CALL_IMMEDIATE %FUNCTION_require_match POP_ebx # _process_expression_locals POP_ebx # _process_expression_locals -LOAD_EFFECTIVE_ADDRESS %20 -PUSH_eax #_common_recursion -LOAD_EFFECTIVE_ADDRESS %24 -LOAD_INTEGER -PUSH_eax #_process_expression1 -LOAD_EFFECTIVE_ADDRESS %24 -LOAD_INTEGER -PUSH_eax #_process_expression2 +POP_ebp # Restore old base pointer +POP_edi # Prevent overwrite +PUSH_edi # Prevent overwriting in recursion +PUSH_ebp # Protect the old base pointer +COPY_esp_to_edi # Copy new base pointer +COPY_edi_to_ebp CALL_IMMEDIATE %FUNCTION_expression -POP_ebx # _process_expression_locals -POP_ebx # _process_expression_locals -POP_ebx # _common_recursion -STORE_INTEGER -LOAD_EFFECTIVE_ADDRESS %20 -PUSH_eax #_common_recursion -LOAD_IMMEDIATE_eax &STRING_183 +POP_ebp # Restore old base pointer +POP_edi # Prevent overwrite +PUSH_edi # Prevent overwriting in recursion +PUSH_ebp # Protect the old base pointer +COPY_esp_to_edi # Copy new base pointer +LOAD_IMMEDIATE_eax &STRING_process_for_9 PUSH_eax #_process_expression1 -LOAD_EFFECTIVE_ADDRESS %28 +COPY_edi_to_ebp +CALL_IMMEDIATE %FUNCTION_emit_out +POP_ebx # _process_expression_locals +POP_ebp # Restore old base pointer +POP_edi # Prevent overwrite +PUSH_edi # Prevent overwriting in recursion +PUSH_ebp # Protect the old base pointer +COPY_esp_to_edi # Copy new base pointer +LOAD_IMMEDIATE_eax &GLOBAL_function LOAD_INTEGER -PUSH_eax #_process_expression2 -CALL_IMMEDIATE %FUNCTION_emit -POP_ebx # _process_expression_locals -POP_ebx # _process_expression_locals -POP_ebx # _common_recursion -STORE_INTEGER -LOAD_EFFECTIVE_ADDRESS %20 -PUSH_eax #_common_recursion -LOAD_IMMEDIATE_eax &GLOBAL_current_function +# looking up offset +# -> offset calculation +LOAD_IMMEDIATE_ebx %8 +ADD_ebx_to_eax LOAD_INTEGER PUSH_eax #_process_expression1 -LOAD_EFFECTIVE_ADDRESS %28 +LOAD_BASE_ADDRESS_eax %-24 LOAD_INTEGER PUSH_eax #_process_expression2 -CALL_IMMEDIATE %FUNCTION_emit +COPY_edi_to_ebp +CALL_IMMEDIATE %FUNCTION_uniqueID_out POP_ebx # _process_expression_locals POP_ebx # _process_expression_locals -POP_ebx # _common_recursion -STORE_INTEGER -LOAD_EFFECTIVE_ADDRESS %20 -PUSH_eax #_common_recursion -LOAD_IMMEDIATE_eax &STRING_184 +POP_ebp # Restore old base pointer +POP_edi # Prevent overwrite +PUSH_edi # Prevent overwriting in recursion +PUSH_ebp # Protect the old base pointer +COPY_esp_to_edi # Copy new base pointer +LOAD_IMMEDIATE_eax &STRING_process_for_10 PUSH_eax #_process_expression1 -LOAD_EFFECTIVE_ADDRESS %28 +COPY_edi_to_ebp +CALL_IMMEDIATE %FUNCTION_emit_out +POP_ebx # _process_expression_locals +POP_ebp # Restore old base pointer +POP_edi # Prevent overwrite +PUSH_edi # Prevent overwriting in recursion +PUSH_ebp # Protect the old base pointer +COPY_esp_to_edi # Copy new base pointer +LOAD_IMMEDIATE_eax &GLOBAL_function LOAD_INTEGER -PUSH_eax #_process_expression2 -CALL_IMMEDIATE %FUNCTION_emit -POP_ebx # _process_expression_locals -POP_ebx # _process_expression_locals -POP_ebx # _common_recursion -STORE_INTEGER -LOAD_EFFECTIVE_ADDRESS %20 -PUSH_eax #_common_recursion -LOAD_EFFECTIVE_ADDRESS %12 +# looking up offset +# -> offset calculation +LOAD_IMMEDIATE_ebx %8 +ADD_ebx_to_eax LOAD_INTEGER PUSH_eax #_process_expression1 -LOAD_EFFECTIVE_ADDRESS %28 +LOAD_BASE_ADDRESS_eax %-24 LOAD_INTEGER PUSH_eax #_process_expression2 -CALL_IMMEDIATE %FUNCTION_emit +COPY_edi_to_ebp +CALL_IMMEDIATE %FUNCTION_uniqueID_out POP_ebx # _process_expression_locals POP_ebx # _process_expression_locals -POP_ebx # _common_recursion -STORE_INTEGER -LOAD_EFFECTIVE_ADDRESS %20 -PUSH_eax #_common_recursion -LOAD_IMMEDIATE_eax &STRING_185 +POP_ebp # Restore old base pointer +POP_edi # Prevent overwrite +PUSH_edi # Prevent overwriting in recursion +PUSH_ebp # Protect the old base pointer +COPY_esp_to_edi # Copy new base pointer +LOAD_IMMEDIATE_eax &STRING_process_for_11 PUSH_eax #_process_expression1 -LOAD_EFFECTIVE_ADDRESS %28 +COPY_edi_to_ebp +CALL_IMMEDIATE %FUNCTION_emit_out +POP_ebx # _process_expression_locals +POP_ebp # Restore old base pointer +POP_edi # Prevent overwrite +PUSH_edi # Prevent overwriting in recursion +PUSH_ebp # Protect the old base pointer +COPY_esp_to_edi # Copy new base pointer +LOAD_IMMEDIATE_eax &GLOBAL_function LOAD_INTEGER -PUSH_eax #_process_expression2 -CALL_IMMEDIATE %FUNCTION_emit -POP_ebx # _process_expression_locals -POP_ebx # _process_expression_locals -POP_ebx # _common_recursion -STORE_INTEGER -LOAD_EFFECTIVE_ADDRESS %20 -PUSH_eax #_common_recursion -LOAD_IMMEDIATE_eax &GLOBAL_current_function +# looking up offset +# -> offset calculation +LOAD_IMMEDIATE_ebx %8 +ADD_ebx_to_eax LOAD_INTEGER PUSH_eax #_process_expression1 -LOAD_EFFECTIVE_ADDRESS %28 +LOAD_BASE_ADDRESS_eax %-24 LOAD_INTEGER PUSH_eax #_process_expression2 -CALL_IMMEDIATE %FUNCTION_emit +COPY_edi_to_ebp +CALL_IMMEDIATE %FUNCTION_uniqueID_out POP_ebx # _process_expression_locals POP_ebx # _process_expression_locals -POP_ebx # _common_recursion -STORE_INTEGER -LOAD_EFFECTIVE_ADDRESS %20 -PUSH_eax #_common_recursion -LOAD_IMMEDIATE_eax &STRING_186 +POP_ebp # Restore old base pointer +POP_edi # Prevent overwrite +PUSH_edi # Prevent overwriting in recursion +PUSH_ebp # Protect the old base pointer +COPY_esp_to_edi # Copy new base pointer +LOAD_IMMEDIATE_eax &STRING_process_for_12 PUSH_eax #_process_expression1 -LOAD_EFFECTIVE_ADDRESS %28 -LOAD_INTEGER -PUSH_eax #_process_expression2 -CALL_IMMEDIATE %FUNCTION_emit -POP_ebx # _process_expression_locals -POP_ebx # _process_expression_locals -POP_ebx # _common_recursion -STORE_INTEGER -LOAD_EFFECTIVE_ADDRESS %20 -PUSH_eax #_common_recursion -LOAD_EFFECTIVE_ADDRESS %12 -LOAD_INTEGER -PUSH_eax #_process_expression1 -LOAD_EFFECTIVE_ADDRESS %28 -LOAD_INTEGER -PUSH_eax #_process_expression2 -CALL_IMMEDIATE %FUNCTION_emit -POP_ebx # _process_expression_locals -POP_ebx # _process_expression_locals -POP_ebx # _common_recursion -STORE_INTEGER -LOAD_EFFECTIVE_ADDRESS %20 -PUSH_eax #_common_recursion -LOAD_IMMEDIATE_eax &STRING_187 -PUSH_eax #_process_expression1 -LOAD_EFFECTIVE_ADDRESS %28 -LOAD_INTEGER -PUSH_eax #_process_expression2 -CALL_IMMEDIATE %FUNCTION_emit -POP_ebx # _process_expression_locals -POP_ebx # _process_expression_locals -POP_ebx # _common_recursion -STORE_INTEGER -LOAD_EFFECTIVE_ADDRESS %20 -PUSH_eax #_common_recursion -LOAD_IMMEDIATE_eax &GLOBAL_current_function -LOAD_INTEGER -PUSH_eax #_process_expression1 -LOAD_EFFECTIVE_ADDRESS %28 -LOAD_INTEGER -PUSH_eax #_process_expression2 -CALL_IMMEDIATE %FUNCTION_emit -POP_ebx # _process_expression_locals -POP_ebx # _process_expression_locals -POP_ebx # _common_recursion -STORE_INTEGER -LOAD_EFFECTIVE_ADDRESS %20 -PUSH_eax #_common_recursion -LOAD_IMMEDIATE_eax &STRING_188 -PUSH_eax #_process_expression1 -LOAD_EFFECTIVE_ADDRESS %28 -LOAD_INTEGER -PUSH_eax #_process_expression2 -CALL_IMMEDIATE %FUNCTION_emit -POP_ebx # _process_expression_locals -POP_ebx # _process_expression_locals -POP_ebx # _common_recursion -STORE_INTEGER -LOAD_EFFECTIVE_ADDRESS %20 -PUSH_eax #_common_recursion -LOAD_EFFECTIVE_ADDRESS %12 -LOAD_INTEGER -PUSH_eax #_process_expression1 -LOAD_EFFECTIVE_ADDRESS %28 -LOAD_INTEGER -PUSH_eax #_process_expression2 -CALL_IMMEDIATE %FUNCTION_emit -POP_ebx # _process_expression_locals -POP_ebx # _process_expression_locals -POP_ebx # _common_recursion -STORE_INTEGER -LOAD_EFFECTIVE_ADDRESS %20 -PUSH_eax #_common_recursion -LOAD_IMMEDIATE_eax &STRING_189 -PUSH_eax #_process_expression1 -LOAD_EFFECTIVE_ADDRESS %28 -LOAD_INTEGER -PUSH_eax #_process_expression2 -CALL_IMMEDIATE %FUNCTION_emit -POP_ebx # _process_expression_locals -POP_ebx # _process_expression_locals -POP_ebx # _common_recursion -STORE_INTEGER -LOAD_IMMEDIATE_eax &STRING_190 -PUSH_eax #_process_expression1 -LOAD_IMMEDIATE_eax &STRING_191 +LOAD_IMMEDIATE_eax &STRING_process_for_13 PUSH_eax #_process_expression2 +COPY_edi_to_ebp CALL_IMMEDIATE %FUNCTION_require_match POP_ebx # _process_expression_locals POP_ebx # _process_expression_locals -LOAD_EFFECTIVE_ADDRESS %20 -PUSH_eax #_common_recursion -LOAD_EFFECTIVE_ADDRESS %24 -LOAD_INTEGER -PUSH_eax #_process_expression1 -LOAD_EFFECTIVE_ADDRESS %24 -LOAD_INTEGER -PUSH_eax #_process_expression2 +POP_ebp # Restore old base pointer +POP_edi # Prevent overwrite +PUSH_edi # Prevent overwriting in recursion +PUSH_ebp # Protect the old base pointer +COPY_esp_to_edi # Copy new base pointer +COPY_edi_to_ebp CALL_IMMEDIATE %FUNCTION_expression -POP_ebx # _process_expression_locals -POP_ebx # _process_expression_locals -POP_ebx # _common_recursion -STORE_INTEGER -LOAD_EFFECTIVE_ADDRESS %20 -PUSH_eax #_common_recursion -LOAD_IMMEDIATE_eax &STRING_192 +POP_ebp # Restore old base pointer +POP_edi # Prevent overwrite +PUSH_edi # Prevent overwriting in recursion +PUSH_ebp # Protect the old base pointer +COPY_esp_to_edi # Copy new base pointer +LOAD_IMMEDIATE_eax &STRING_process_for_14 PUSH_eax #_process_expression1 -LOAD_EFFECTIVE_ADDRESS %28 +COPY_edi_to_ebp +CALL_IMMEDIATE %FUNCTION_emit_out +POP_ebx # _process_expression_locals +POP_ebp # Restore old base pointer +POP_edi # Prevent overwrite +PUSH_edi # Prevent overwriting in recursion +PUSH_ebp # Protect the old base pointer +COPY_esp_to_edi # Copy new base pointer +LOAD_IMMEDIATE_eax &GLOBAL_function LOAD_INTEGER -PUSH_eax #_process_expression2 -CALL_IMMEDIATE %FUNCTION_emit -POP_ebx # _process_expression_locals -POP_ebx # _process_expression_locals -POP_ebx # _common_recursion -STORE_INTEGER -LOAD_EFFECTIVE_ADDRESS %20 -PUSH_eax #_common_recursion -LOAD_IMMEDIATE_eax &GLOBAL_current_function +# looking up offset +# -> offset calculation +LOAD_IMMEDIATE_ebx %8 +ADD_ebx_to_eax LOAD_INTEGER PUSH_eax #_process_expression1 -LOAD_EFFECTIVE_ADDRESS %28 +LOAD_BASE_ADDRESS_eax %-24 LOAD_INTEGER PUSH_eax #_process_expression2 -CALL_IMMEDIATE %FUNCTION_emit +COPY_edi_to_ebp +CALL_IMMEDIATE %FUNCTION_uniqueID_out POP_ebx # _process_expression_locals POP_ebx # _process_expression_locals -POP_ebx # _common_recursion -STORE_INTEGER -LOAD_EFFECTIVE_ADDRESS %20 -PUSH_eax #_common_recursion -LOAD_IMMEDIATE_eax &STRING_193 +POP_ebp # Restore old base pointer +POP_edi # Prevent overwrite +PUSH_edi # Prevent overwriting in recursion +PUSH_ebp # Protect the old base pointer +COPY_esp_to_edi # Copy new base pointer +LOAD_IMMEDIATE_eax &STRING_process_for_15 PUSH_eax #_process_expression1 -LOAD_EFFECTIVE_ADDRESS %28 +COPY_edi_to_ebp +CALL_IMMEDIATE %FUNCTION_emit_out +POP_ebx # _process_expression_locals +POP_ebp # Restore old base pointer +POP_edi # Prevent overwrite +PUSH_edi # Prevent overwriting in recursion +PUSH_ebp # Protect the old base pointer +COPY_esp_to_edi # Copy new base pointer +LOAD_IMMEDIATE_eax &GLOBAL_function LOAD_INTEGER -PUSH_eax #_process_expression2 -CALL_IMMEDIATE %FUNCTION_emit -POP_ebx # _process_expression_locals -POP_ebx # _process_expression_locals -POP_ebx # _common_recursion -STORE_INTEGER -LOAD_EFFECTIVE_ADDRESS %20 -PUSH_eax #_common_recursion -LOAD_EFFECTIVE_ADDRESS %12 +# looking up offset +# -> offset calculation +LOAD_IMMEDIATE_ebx %8 +ADD_ebx_to_eax LOAD_INTEGER PUSH_eax #_process_expression1 -LOAD_EFFECTIVE_ADDRESS %28 +LOAD_BASE_ADDRESS_eax %-24 LOAD_INTEGER PUSH_eax #_process_expression2 -CALL_IMMEDIATE %FUNCTION_emit +COPY_edi_to_ebp +CALL_IMMEDIATE %FUNCTION_uniqueID_out POP_ebx # _process_expression_locals POP_ebx # _process_expression_locals -POP_ebx # _common_recursion -STORE_INTEGER -LOAD_EFFECTIVE_ADDRESS %20 -PUSH_eax #_common_recursion -LOAD_IMMEDIATE_eax &STRING_194 +POP_ebp # Restore old base pointer +POP_edi # Prevent overwrite +PUSH_edi # Prevent overwriting in recursion +PUSH_ebp # Protect the old base pointer +COPY_esp_to_edi # Copy new base pointer +LOAD_IMMEDIATE_eax &STRING_process_for_16 PUSH_eax #_process_expression1 -LOAD_EFFECTIVE_ADDRESS %28 -LOAD_INTEGER -PUSH_eax #_process_expression2 -CALL_IMMEDIATE %FUNCTION_emit -POP_ebx # _process_expression_locals -POP_ebx # _process_expression_locals -POP_ebx # _common_recursion -STORE_INTEGER -LOAD_EFFECTIVE_ADDRESS %20 -PUSH_eax #_common_recursion -LOAD_IMMEDIATE_eax &GLOBAL_current_function -LOAD_INTEGER -PUSH_eax #_process_expression1 -LOAD_EFFECTIVE_ADDRESS %28 -LOAD_INTEGER -PUSH_eax #_process_expression2 -CALL_IMMEDIATE %FUNCTION_emit -POP_ebx # _process_expression_locals -POP_ebx # _process_expression_locals -POP_ebx # _common_recursion -STORE_INTEGER -LOAD_EFFECTIVE_ADDRESS %20 -PUSH_eax #_common_recursion -LOAD_IMMEDIATE_eax &STRING_195 -PUSH_eax #_process_expression1 -LOAD_EFFECTIVE_ADDRESS %28 -LOAD_INTEGER -PUSH_eax #_process_expression2 -CALL_IMMEDIATE %FUNCTION_emit -POP_ebx # _process_expression_locals -POP_ebx # _process_expression_locals -POP_ebx # _common_recursion -STORE_INTEGER -LOAD_EFFECTIVE_ADDRESS %20 -PUSH_eax #_common_recursion -LOAD_EFFECTIVE_ADDRESS %12 -LOAD_INTEGER -PUSH_eax #_process_expression1 -LOAD_EFFECTIVE_ADDRESS %28 -LOAD_INTEGER -PUSH_eax #_process_expression2 -CALL_IMMEDIATE %FUNCTION_emit -POP_ebx # _process_expression_locals -POP_ebx # _process_expression_locals -POP_ebx # _common_recursion -STORE_INTEGER -LOAD_EFFECTIVE_ADDRESS %20 -PUSH_eax #_common_recursion -LOAD_IMMEDIATE_eax &STRING_196 -PUSH_eax #_process_expression1 -LOAD_EFFECTIVE_ADDRESS %28 -LOAD_INTEGER -PUSH_eax #_process_expression2 -CALL_IMMEDIATE %FUNCTION_emit -POP_ebx # _process_expression_locals -POP_ebx # _process_expression_locals -POP_ebx # _common_recursion -STORE_INTEGER -LOAD_IMMEDIATE_eax &STRING_197 -PUSH_eax #_process_expression1 -LOAD_IMMEDIATE_eax &STRING_198 +LOAD_IMMEDIATE_eax &STRING_process_for_17 PUSH_eax #_process_expression2 +COPY_edi_to_ebp CALL_IMMEDIATE %FUNCTION_require_match POP_ebx # _process_expression_locals POP_ebx # _process_expression_locals -LOAD_EFFECTIVE_ADDRESS %20 -PUSH_eax #_common_recursion -LOAD_EFFECTIVE_ADDRESS %24 -LOAD_INTEGER -PUSH_eax #_process_expression1 -LOAD_EFFECTIVE_ADDRESS %24 -LOAD_INTEGER -PUSH_eax #_process_expression2 +POP_ebp # Restore old base pointer +POP_edi # Prevent overwrite +PUSH_edi # Prevent overwriting in recursion +PUSH_ebp # Protect the old base pointer +COPY_esp_to_edi # Copy new base pointer +COPY_edi_to_ebp CALL_IMMEDIATE %FUNCTION_statement -POP_ebx # _process_expression_locals -POP_ebx # _process_expression_locals -POP_ebx # _common_recursion -STORE_INTEGER -LOAD_EFFECTIVE_ADDRESS %20 -PUSH_eax #_common_recursion -LOAD_IMMEDIATE_eax &STRING_199 +POP_ebp # Restore old base pointer +POP_edi # Prevent overwrite +PUSH_edi # Prevent overwriting in recursion +PUSH_ebp # Protect the old base pointer +COPY_esp_to_edi # Copy new base pointer +LOAD_IMMEDIATE_eax &STRING_process_for_18 PUSH_eax #_process_expression1 -LOAD_EFFECTIVE_ADDRESS %28 +COPY_edi_to_ebp +CALL_IMMEDIATE %FUNCTION_emit_out +POP_ebx # _process_expression_locals +POP_ebp # Restore old base pointer +POP_edi # Prevent overwrite +PUSH_edi # Prevent overwriting in recursion +PUSH_ebp # Protect the old base pointer +COPY_esp_to_edi # Copy new base pointer +LOAD_IMMEDIATE_eax &GLOBAL_function LOAD_INTEGER -PUSH_eax #_process_expression2 -CALL_IMMEDIATE %FUNCTION_emit -POP_ebx # _process_expression_locals -POP_ebx # _process_expression_locals -POP_ebx # _common_recursion -STORE_INTEGER -LOAD_EFFECTIVE_ADDRESS %20 -PUSH_eax #_common_recursion -LOAD_IMMEDIATE_eax &GLOBAL_current_function +# looking up offset +# -> offset calculation +LOAD_IMMEDIATE_ebx %8 +ADD_ebx_to_eax LOAD_INTEGER PUSH_eax #_process_expression1 -LOAD_EFFECTIVE_ADDRESS %28 +LOAD_BASE_ADDRESS_eax %-24 LOAD_INTEGER PUSH_eax #_process_expression2 -CALL_IMMEDIATE %FUNCTION_emit +COPY_edi_to_ebp +CALL_IMMEDIATE %FUNCTION_uniqueID_out POP_ebx # _process_expression_locals POP_ebx # _process_expression_locals -POP_ebx # _common_recursion -STORE_INTEGER -LOAD_EFFECTIVE_ADDRESS %20 -PUSH_eax #_common_recursion -LOAD_IMMEDIATE_eax &STRING_200 +POP_ebp # Restore old base pointer +POP_edi # Prevent overwrite +PUSH_edi # Prevent overwriting in recursion +PUSH_ebp # Protect the old base pointer +COPY_esp_to_edi # Copy new base pointer +LOAD_IMMEDIATE_eax &STRING_process_for_19 PUSH_eax #_process_expression1 -LOAD_EFFECTIVE_ADDRESS %28 +COPY_edi_to_ebp +CALL_IMMEDIATE %FUNCTION_emit_out +POP_ebx # _process_expression_locals +POP_ebp # Restore old base pointer +POP_edi # Prevent overwrite +PUSH_edi # Prevent overwriting in recursion +PUSH_ebp # Protect the old base pointer +COPY_esp_to_edi # Copy new base pointer +LOAD_IMMEDIATE_eax &GLOBAL_function LOAD_INTEGER -PUSH_eax #_process_expression2 -CALL_IMMEDIATE %FUNCTION_emit -POP_ebx # _process_expression_locals -POP_ebx # _process_expression_locals -POP_ebx # _common_recursion -STORE_INTEGER -LOAD_EFFECTIVE_ADDRESS %20 -PUSH_eax #_common_recursion -LOAD_EFFECTIVE_ADDRESS %12 +# looking up offset +# -> offset calculation +LOAD_IMMEDIATE_ebx %8 +ADD_ebx_to_eax LOAD_INTEGER PUSH_eax #_process_expression1 -LOAD_EFFECTIVE_ADDRESS %28 +LOAD_BASE_ADDRESS_eax %-24 LOAD_INTEGER PUSH_eax #_process_expression2 -CALL_IMMEDIATE %FUNCTION_emit +COPY_edi_to_ebp +CALL_IMMEDIATE %FUNCTION_uniqueID_out POP_ebx # _process_expression_locals POP_ebx # _process_expression_locals -POP_ebx # _common_recursion -STORE_INTEGER -LOAD_EFFECTIVE_ADDRESS %20 +POP_ebp # Restore old base pointer +POP_edi # Prevent overwrite +LOAD_IMMEDIATE_eax &GLOBAL_break_target_head PUSH_eax #_common_recursion -LOAD_IMMEDIATE_eax &STRING_201 -PUSH_eax #_process_expression1 -LOAD_EFFECTIVE_ADDRESS %28 +LOAD_BASE_ADDRESS_eax %-12 LOAD_INTEGER -PUSH_eax #_process_expression2 -CALL_IMMEDIATE %FUNCTION_emit -POP_ebx # _process_expression_locals -POP_ebx # _process_expression_locals POP_ebx # _common_recursion STORE_INTEGER -LOAD_EFFECTIVE_ADDRESS %20 +LOAD_IMMEDIATE_eax &GLOBAL_break_target_func PUSH_eax #_common_recursion -LOAD_IMMEDIATE_eax &GLOBAL_current_function +LOAD_BASE_ADDRESS_eax %-16 LOAD_INTEGER -PUSH_eax #_process_expression1 -LOAD_EFFECTIVE_ADDRESS %28 -LOAD_INTEGER -PUSH_eax #_process_expression2 -CALL_IMMEDIATE %FUNCTION_emit -POP_ebx # _process_expression_locals -POP_ebx # _process_expression_locals POP_ebx # _common_recursion STORE_INTEGER -LOAD_EFFECTIVE_ADDRESS %20 +LOAD_IMMEDIATE_eax &GLOBAL_break_target_num PUSH_eax #_common_recursion -LOAD_IMMEDIATE_eax &STRING_202 -PUSH_eax #_process_expression1 -LOAD_EFFECTIVE_ADDRESS %28 +LOAD_BASE_ADDRESS_eax %-20 LOAD_INTEGER -PUSH_eax #_process_expression2 -CALL_IMMEDIATE %FUNCTION_emit -POP_ebx # _process_expression_locals -POP_ebx # _process_expression_locals POP_ebx # _common_recursion STORE_INTEGER -LOAD_EFFECTIVE_ADDRESS %20 +LOAD_IMMEDIATE_eax &GLOBAL_break_frame PUSH_eax #_common_recursion -LOAD_EFFECTIVE_ADDRESS %12 -LOAD_INTEGER -PUSH_eax #_process_expression1 -LOAD_EFFECTIVE_ADDRESS %28 -LOAD_INTEGER -PUSH_eax #_process_expression2 -CALL_IMMEDIATE %FUNCTION_emit -POP_ebx # _process_expression_locals -POP_ebx # _process_expression_locals -POP_ebx # _common_recursion -STORE_INTEGER -LOAD_EFFECTIVE_ADDRESS %20 -PUSH_eax #_common_recursion -LOAD_IMMEDIATE_eax &STRING_203 -PUSH_eax #_process_expression1 -LOAD_EFFECTIVE_ADDRESS %28 -LOAD_INTEGER -PUSH_eax #_process_expression2 -CALL_IMMEDIATE %FUNCTION_emit -POP_ebx # _process_expression_locals -POP_ebx # _process_expression_locals -POP_ebx # _common_recursion -STORE_INTEGER -LOAD_IMMEDIATE_eax &GLOBAL_break_target -PUSH_eax #_common_recursion -LOAD_EFFECTIVE_ADDRESS %8 +LOAD_BASE_ADDRESS_eax %-8 LOAD_INTEGER POP_ebx # _common_recursion STORE_INTEGER -LOAD_IMMEDIATE_eax &GLOBAL_break_locals -PUSH_eax #_common_recursion -LOAD_EFFECTIVE_ADDRESS %4 -LOAD_INTEGER -POP_ebx # _common_recursion -STORE_INTEGER -LOAD_EFFECTIVE_ADDRESS %20 -LOAD_INTEGER -POP_ebx # _return_result_locals -POP_ebx # _return_result_locals -POP_ebx # _return_result_locals +POP_ebx # _recursive_statement_locals +POP_ebx # _recursive_statement_locals +POP_ebx # _recursive_statement_locals +POP_ebx # _recursive_statement_locals +POP_ebx # _recursive_statement_locals RETURN # Defining function process_asm :FUNCTION_process_asm @@ -12323,15 +10329,20 @@ LOAD_INTEGER LOAD_INTEGER POP_ebx # _common_recursion STORE_INTEGER -LOAD_IMMEDIATE_eax &STRING_204 +PUSH_edi # Prevent overwriting in recursion +PUSH_ebp # Protect the old base pointer +COPY_esp_to_edi # Copy new base pointer +LOAD_IMMEDIATE_eax &STRING_process_asm_0 PUSH_eax #_process_expression1 -LOAD_IMMEDIATE_eax &STRING_205 +LOAD_IMMEDIATE_eax &STRING_process_asm_1 PUSH_eax #_process_expression2 +COPY_edi_to_ebp CALL_IMMEDIATE %FUNCTION_require_match POP_ebx # _process_expression_locals POP_ebx # _process_expression_locals -:WHILE_process_asm_0 - +POP_ebp # Restore old base pointer +POP_edi # Prevent overwrite +:WHILE_process_asm_2 LOAD_IMMEDIATE_eax %34 PUSH_eax #_common_recursion LOAD_IMMEDIATE_eax &GLOBAL_global_token @@ -12351,12 +10362,11 @@ CMP SETE MOVEZBL TEST -JUMP_EQ %END_WHILE_process_asm_0 - -# THEN_while_process_asm_0 - -LOAD_EFFECTIVE_ADDRESS %4 -PUSH_eax #_common_recursion +JUMP_EQ %END_WHILE_process_asm_2 +# THEN_while_process_asm_2 +PUSH_edi # Prevent overwriting in recursion +PUSH_ebp # Protect the old base pointer +COPY_esp_to_edi # Copy new base pointer LOAD_IMMEDIATE_eax &GLOBAL_global_token LOAD_INTEGER # looking up offset @@ -12369,26 +10379,21 @@ LOAD_IMMEDIATE_eax %1 POP_ebx # _common_recursion ADD_ebx_to_eax PUSH_eax #_process_expression1 -LOAD_EFFECTIVE_ADDRESS %12 -LOAD_INTEGER -PUSH_eax #_process_expression2 -CALL_IMMEDIATE %FUNCTION_emit +COPY_edi_to_ebp +CALL_IMMEDIATE %FUNCTION_emit_out POP_ebx # _process_expression_locals -POP_ebx # _process_expression_locals -POP_ebx # _common_recursion -STORE_INTEGER -LOAD_EFFECTIVE_ADDRESS %4 -PUSH_eax #_common_recursion -LOAD_IMMEDIATE_eax &STRING_206 +POP_ebp # Restore old base pointer +POP_edi # Prevent overwrite +PUSH_edi # Prevent overwriting in recursion +PUSH_ebp # Protect the old base pointer +COPY_esp_to_edi # Copy new base pointer +LOAD_IMMEDIATE_eax &STRING_process_asm_3 PUSH_eax #_process_expression1 -LOAD_EFFECTIVE_ADDRESS %12 -LOAD_INTEGER -PUSH_eax #_process_expression2 -CALL_IMMEDIATE %FUNCTION_emit +COPY_edi_to_ebp +CALL_IMMEDIATE %FUNCTION_emit_out POP_ebx # _process_expression_locals -POP_ebx # _process_expression_locals -POP_ebx # _common_recursion -STORE_INTEGER +POP_ebp # Restore old base pointer +POP_edi # Prevent overwrite LOAD_IMMEDIATE_eax &GLOBAL_global_token PUSH_eax #_common_recursion LOAD_IMMEDIATE_eax &GLOBAL_global_token @@ -12397,35 +10402,65 @@ LOAD_INTEGER LOAD_INTEGER POP_ebx # _common_recursion STORE_INTEGER -JUMP %WHILE_process_asm_0 - -:END_WHILE_process_asm_0 - -LOAD_IMMEDIATE_eax &STRING_207 +JUMP %WHILE_process_asm_2 +:END_WHILE_process_asm_2 +PUSH_edi # Prevent overwriting in recursion +PUSH_ebp # Protect the old base pointer +COPY_esp_to_edi # Copy new base pointer +LOAD_IMMEDIATE_eax &STRING_process_asm_4 PUSH_eax #_process_expression1 -LOAD_IMMEDIATE_eax &STRING_208 +LOAD_IMMEDIATE_eax &STRING_process_asm_5 PUSH_eax #_process_expression2 +COPY_edi_to_ebp CALL_IMMEDIATE %FUNCTION_require_match POP_ebx # _process_expression_locals POP_ebx # _process_expression_locals -LOAD_IMMEDIATE_eax &STRING_209 +POP_ebp # Restore old base pointer +POP_edi # Prevent overwrite +PUSH_edi # Prevent overwriting in recursion +PUSH_ebp # Protect the old base pointer +COPY_esp_to_edi # Copy new base pointer +LOAD_IMMEDIATE_eax &STRING_process_asm_6 PUSH_eax #_process_expression1 -LOAD_IMMEDIATE_eax &STRING_210 +LOAD_IMMEDIATE_eax &STRING_process_asm_7 PUSH_eax #_process_expression2 +COPY_edi_to_ebp CALL_IMMEDIATE %FUNCTION_require_match POP_ebx # _process_expression_locals POP_ebx # _process_expression_locals -LOAD_EFFECTIVE_ADDRESS %4 -LOAD_INTEGER +POP_ebp # Restore old base pointer +POP_edi # Prevent overwrite RETURN # Defining function process_do :FUNCTION_process_do +# Defining local nested_locals +LOAD_IMMEDIATE_eax &GLOBAL_break_frame +LOAD_INTEGER +PUSH_eax #nested_locals +# Defining local nested_break_head +LOAD_IMMEDIATE_eax &GLOBAL_break_target_head +LOAD_INTEGER +PUSH_eax #nested_break_head +# Defining local nested_break_func +LOAD_IMMEDIATE_eax &GLOBAL_break_target_func +LOAD_INTEGER +PUSH_eax #nested_break_func +# Defining local nested_break_num +LOAD_IMMEDIATE_eax &GLOBAL_break_target_num +LOAD_INTEGER +PUSH_eax #nested_break_num # Defining local number_string +PUSH_edi # Prevent overwriting in recursion +PUSH_ebp # Protect the old base pointer +COPY_esp_to_edi # Copy new base pointer LOAD_IMMEDIATE_eax &GLOBAL_current_count LOAD_INTEGER PUSH_eax #_process_expression1 +COPY_edi_to_ebp CALL_IMMEDIATE %FUNCTION_numerate_number POP_ebx # _process_expression_locals +POP_ebp # Restore old base pointer +POP_edi # Prevent overwrite PUSH_eax #number_string LOAD_IMMEDIATE_eax &GLOBAL_current_count PUSH_eax #_common_recursion @@ -12437,112 +10472,69 @@ POP_ebx # _common_recursion ADD_ebx_to_eax POP_ebx # _common_recursion STORE_INTEGER -# Defining local nested_break -LOAD_IMMEDIATE_eax &GLOBAL_break_target -LOAD_INTEGER -PUSH_eax #nested_break -# Defining local nested_locals -LOAD_IMMEDIATE_eax &GLOBAL_break_locals -LOAD_INTEGER -PUSH_eax #nested_locals -LOAD_IMMEDIATE_eax &GLOBAL_break_locals +LOAD_IMMEDIATE_eax &GLOBAL_break_target_head PUSH_eax #_common_recursion -LOAD_EFFECTIVE_ADDRESS %20 +LOAD_IMMEDIATE_eax &STRING_process_do_0 +POP_ebx # _common_recursion +STORE_INTEGER +LOAD_IMMEDIATE_eax &GLOBAL_break_target_num +PUSH_eax #_common_recursion +LOAD_BASE_ADDRESS_eax %-24 +LOAD_INTEGER +POP_ebx # _common_recursion +STORE_INTEGER +LOAD_IMMEDIATE_eax &GLOBAL_break_frame +PUSH_eax #_common_recursion +LOAD_IMMEDIATE_eax &GLOBAL_function LOAD_INTEGER # looking up offset # -> offset calculation -LOAD_IMMEDIATE_ebx %20 +LOAD_IMMEDIATE_ebx %4 ADD_ebx_to_eax LOAD_INTEGER POP_ebx # _common_recursion STORE_INTEGER -LOAD_IMMEDIATE_eax &GLOBAL_break_target +LOAD_IMMEDIATE_eax &GLOBAL_break_target_func PUSH_eax #_common_recursion -LOAD_IMMEDIATE_eax &STRING_211 -PUSH_eax #_process_expression1 -LOAD_IMMEDIATE_eax &GLOBAL_current_function +LOAD_IMMEDIATE_eax &GLOBAL_function LOAD_INTEGER -PUSH_eax #_process_expression1 -LOAD_IMMEDIATE_eax &STRING_212 -PUSH_eax #_process_expression1 -LOAD_EFFECTIVE_ADDRESS %24 +# looking up offset +# -> offset calculation +LOAD_IMMEDIATE_ebx %8 +ADD_ebx_to_eax LOAD_INTEGER -PUSH_eax #_process_expression2 -CALL_IMMEDIATE %FUNCTION_prepend_string -POP_ebx # _process_expression_locals -POP_ebx # _process_expression_locals -PUSH_eax #_process_expression2 -CALL_IMMEDIATE %FUNCTION_prepend_string -POP_ebx # _process_expression_locals -POP_ebx # _process_expression_locals -PUSH_eax #_process_expression2 -CALL_IMMEDIATE %FUNCTION_prepend_string -POP_ebx # _process_expression_locals -POP_ebx # _process_expression_locals POP_ebx # _common_recursion STORE_INTEGER -LOAD_EFFECTIVE_ADDRESS %20 -PUSH_eax #_common_recursion -LOAD_IMMEDIATE_eax &STRING_213 +PUSH_edi # Prevent overwriting in recursion +PUSH_ebp # Protect the old base pointer +COPY_esp_to_edi # Copy new base pointer +LOAD_IMMEDIATE_eax &STRING_process_do_1 PUSH_eax #_process_expression1 -LOAD_EFFECTIVE_ADDRESS %28 +COPY_edi_to_ebp +CALL_IMMEDIATE %FUNCTION_emit_out +POP_ebx # _process_expression_locals +POP_ebp # Restore old base pointer +POP_edi # Prevent overwrite +PUSH_edi # Prevent overwriting in recursion +PUSH_ebp # Protect the old base pointer +COPY_esp_to_edi # Copy new base pointer +LOAD_IMMEDIATE_eax &GLOBAL_function LOAD_INTEGER -PUSH_eax #_process_expression2 -CALL_IMMEDIATE %FUNCTION_emit -POP_ebx # _process_expression_locals -POP_ebx # _process_expression_locals -POP_ebx # _common_recursion -STORE_INTEGER -LOAD_EFFECTIVE_ADDRESS %20 -PUSH_eax #_common_recursion -LOAD_IMMEDIATE_eax &GLOBAL_current_function +# looking up offset +# -> offset calculation +LOAD_IMMEDIATE_ebx %8 +ADD_ebx_to_eax LOAD_INTEGER PUSH_eax #_process_expression1 -LOAD_EFFECTIVE_ADDRESS %28 +LOAD_BASE_ADDRESS_eax %-24 LOAD_INTEGER PUSH_eax #_process_expression2 -CALL_IMMEDIATE %FUNCTION_emit +COPY_edi_to_ebp +CALL_IMMEDIATE %FUNCTION_uniqueID_out POP_ebx # _process_expression_locals POP_ebx # _process_expression_locals -POP_ebx # _common_recursion -STORE_INTEGER -LOAD_EFFECTIVE_ADDRESS %20 -PUSH_eax #_common_recursion -LOAD_IMMEDIATE_eax &STRING_214 -PUSH_eax #_process_expression1 -LOAD_EFFECTIVE_ADDRESS %28 -LOAD_INTEGER -PUSH_eax #_process_expression2 -CALL_IMMEDIATE %FUNCTION_emit -POP_ebx # _process_expression_locals -POP_ebx # _process_expression_locals -POP_ebx # _common_recursion -STORE_INTEGER -LOAD_EFFECTIVE_ADDRESS %20 -PUSH_eax #_common_recursion -LOAD_EFFECTIVE_ADDRESS %12 -LOAD_INTEGER -PUSH_eax #_process_expression1 -LOAD_EFFECTIVE_ADDRESS %28 -LOAD_INTEGER -PUSH_eax #_process_expression2 -CALL_IMMEDIATE %FUNCTION_emit -POP_ebx # _process_expression_locals -POP_ebx # _process_expression_locals -POP_ebx # _common_recursion -STORE_INTEGER -LOAD_EFFECTIVE_ADDRESS %20 -PUSH_eax #_common_recursion -LOAD_IMMEDIATE_eax &STRING_215 -PUSH_eax #_process_expression1 -LOAD_EFFECTIVE_ADDRESS %28 -LOAD_INTEGER -PUSH_eax #_process_expression2 -CALL_IMMEDIATE %FUNCTION_emit -POP_ebx # _process_expression_locals -POP_ebx # _process_expression_locals -POP_ebx # _common_recursion -STORE_INTEGER +POP_ebp # Restore old base pointer +POP_edi # Prevent overwrite LOAD_IMMEDIATE_eax &GLOBAL_global_token PUSH_eax #_common_recursion LOAD_IMMEDIATE_eax &GLOBAL_global_token @@ -12551,198 +10543,192 @@ LOAD_INTEGER LOAD_INTEGER POP_ebx # _common_recursion STORE_INTEGER -LOAD_EFFECTIVE_ADDRESS %20 -PUSH_eax #_common_recursion -LOAD_EFFECTIVE_ADDRESS %24 -LOAD_INTEGER -PUSH_eax #_process_expression1 -LOAD_EFFECTIVE_ADDRESS %24 -LOAD_INTEGER -PUSH_eax #_process_expression2 +PUSH_edi # Prevent overwriting in recursion +PUSH_ebp # Protect the old base pointer +COPY_esp_to_edi # Copy new base pointer +COPY_edi_to_ebp CALL_IMMEDIATE %FUNCTION_statement -POP_ebx # _process_expression_locals -POP_ebx # _process_expression_locals -POP_ebx # _common_recursion -STORE_INTEGER -LOAD_IMMEDIATE_eax &STRING_216 +POP_ebp # Restore old base pointer +POP_edi # Prevent overwrite +PUSH_edi # Prevent overwriting in recursion +PUSH_ebp # Protect the old base pointer +COPY_esp_to_edi # Copy new base pointer +LOAD_IMMEDIATE_eax &STRING_process_do_2 PUSH_eax #_process_expression1 -LOAD_IMMEDIATE_eax &STRING_217 +LOAD_IMMEDIATE_eax &STRING_process_do_3 PUSH_eax #_process_expression2 +COPY_edi_to_ebp CALL_IMMEDIATE %FUNCTION_require_match POP_ebx # _process_expression_locals POP_ebx # _process_expression_locals -LOAD_IMMEDIATE_eax &STRING_218 +POP_ebp # Restore old base pointer +POP_edi # Prevent overwrite +PUSH_edi # Prevent overwriting in recursion +PUSH_ebp # Protect the old base pointer +COPY_esp_to_edi # Copy new base pointer +LOAD_IMMEDIATE_eax &STRING_process_do_4 PUSH_eax #_process_expression1 -LOAD_IMMEDIATE_eax &STRING_219 +LOAD_IMMEDIATE_eax &STRING_process_do_5 PUSH_eax #_process_expression2 +COPY_edi_to_ebp CALL_IMMEDIATE %FUNCTION_require_match POP_ebx # _process_expression_locals POP_ebx # _process_expression_locals -LOAD_EFFECTIVE_ADDRESS %20 -PUSH_eax #_common_recursion -LOAD_EFFECTIVE_ADDRESS %24 -LOAD_INTEGER -PUSH_eax #_process_expression1 -LOAD_EFFECTIVE_ADDRESS %24 -LOAD_INTEGER -PUSH_eax #_process_expression2 +POP_ebp # Restore old base pointer +POP_edi # Prevent overwrite +PUSH_edi # Prevent overwriting in recursion +PUSH_ebp # Protect the old base pointer +COPY_esp_to_edi # Copy new base pointer +COPY_edi_to_ebp CALL_IMMEDIATE %FUNCTION_expression -POP_ebx # _process_expression_locals -POP_ebx # _process_expression_locals -POP_ebx # _common_recursion -STORE_INTEGER -LOAD_IMMEDIATE_eax &STRING_220 +POP_ebp # Restore old base pointer +POP_edi # Prevent overwrite +PUSH_edi # Prevent overwriting in recursion +PUSH_ebp # Protect the old base pointer +COPY_esp_to_edi # Copy new base pointer +LOAD_IMMEDIATE_eax &STRING_process_do_6 PUSH_eax #_process_expression1 -LOAD_IMMEDIATE_eax &STRING_221 +LOAD_IMMEDIATE_eax &STRING_process_do_7 PUSH_eax #_process_expression2 +COPY_edi_to_ebp CALL_IMMEDIATE %FUNCTION_require_match POP_ebx # _process_expression_locals POP_ebx # _process_expression_locals -LOAD_IMMEDIATE_eax &STRING_222 +POP_ebp # Restore old base pointer +POP_edi # Prevent overwrite +PUSH_edi # Prevent overwriting in recursion +PUSH_ebp # Protect the old base pointer +COPY_esp_to_edi # Copy new base pointer +LOAD_IMMEDIATE_eax &STRING_process_do_8 PUSH_eax #_process_expression1 -LOAD_IMMEDIATE_eax &STRING_223 +LOAD_IMMEDIATE_eax &STRING_process_do_9 PUSH_eax #_process_expression2 +COPY_edi_to_ebp CALL_IMMEDIATE %FUNCTION_require_match POP_ebx # _process_expression_locals POP_ebx # _process_expression_locals -LOAD_EFFECTIVE_ADDRESS %20 -PUSH_eax #_common_recursion -LOAD_IMMEDIATE_eax &STRING_224 +POP_ebp # Restore old base pointer +POP_edi # Prevent overwrite +PUSH_edi # Prevent overwriting in recursion +PUSH_ebp # Protect the old base pointer +COPY_esp_to_edi # Copy new base pointer +LOAD_IMMEDIATE_eax &STRING_process_do_10 PUSH_eax #_process_expression1 -LOAD_EFFECTIVE_ADDRESS %28 +COPY_edi_to_ebp +CALL_IMMEDIATE %FUNCTION_emit_out +POP_ebx # _process_expression_locals +POP_ebp # Restore old base pointer +POP_edi # Prevent overwrite +PUSH_edi # Prevent overwriting in recursion +PUSH_ebp # Protect the old base pointer +COPY_esp_to_edi # Copy new base pointer +LOAD_IMMEDIATE_eax &GLOBAL_function LOAD_INTEGER -PUSH_eax #_process_expression2 -CALL_IMMEDIATE %FUNCTION_emit -POP_ebx # _process_expression_locals -POP_ebx # _process_expression_locals -POP_ebx # _common_recursion -STORE_INTEGER -LOAD_EFFECTIVE_ADDRESS %20 -PUSH_eax #_common_recursion -LOAD_IMMEDIATE_eax &GLOBAL_current_function +# looking up offset +# -> offset calculation +LOAD_IMMEDIATE_ebx %8 +ADD_ebx_to_eax LOAD_INTEGER PUSH_eax #_process_expression1 -LOAD_EFFECTIVE_ADDRESS %28 +LOAD_BASE_ADDRESS_eax %-24 LOAD_INTEGER PUSH_eax #_process_expression2 -CALL_IMMEDIATE %FUNCTION_emit +COPY_edi_to_ebp +CALL_IMMEDIATE %FUNCTION_uniqueID_out POP_ebx # _process_expression_locals POP_ebx # _process_expression_locals -POP_ebx # _common_recursion -STORE_INTEGER -LOAD_EFFECTIVE_ADDRESS %20 -PUSH_eax #_common_recursion -LOAD_IMMEDIATE_eax &STRING_225 +POP_ebp # Restore old base pointer +POP_edi # Prevent overwrite +PUSH_edi # Prevent overwriting in recursion +PUSH_ebp # Protect the old base pointer +COPY_esp_to_edi # Copy new base pointer +LOAD_IMMEDIATE_eax &STRING_process_do_11 PUSH_eax #_process_expression1 -LOAD_EFFECTIVE_ADDRESS %28 +COPY_edi_to_ebp +CALL_IMMEDIATE %FUNCTION_emit_out +POP_ebx # _process_expression_locals +POP_ebp # Restore old base pointer +POP_edi # Prevent overwrite +PUSH_edi # Prevent overwriting in recursion +PUSH_ebp # Protect the old base pointer +COPY_esp_to_edi # Copy new base pointer +LOAD_IMMEDIATE_eax &GLOBAL_function LOAD_INTEGER -PUSH_eax #_process_expression2 -CALL_IMMEDIATE %FUNCTION_emit -POP_ebx # _process_expression_locals -POP_ebx # _process_expression_locals -POP_ebx # _common_recursion -STORE_INTEGER -LOAD_EFFECTIVE_ADDRESS %20 -PUSH_eax #_common_recursion -LOAD_EFFECTIVE_ADDRESS %12 +# looking up offset +# -> offset calculation +LOAD_IMMEDIATE_ebx %8 +ADD_ebx_to_eax LOAD_INTEGER PUSH_eax #_process_expression1 -LOAD_EFFECTIVE_ADDRESS %28 +LOAD_BASE_ADDRESS_eax %-24 LOAD_INTEGER PUSH_eax #_process_expression2 -CALL_IMMEDIATE %FUNCTION_emit +COPY_edi_to_ebp +CALL_IMMEDIATE %FUNCTION_uniqueID_out POP_ebx # _process_expression_locals POP_ebx # _process_expression_locals -POP_ebx # _common_recursion -STORE_INTEGER -LOAD_EFFECTIVE_ADDRESS %20 +POP_ebp # Restore old base pointer +POP_edi # Prevent overwrite +LOAD_IMMEDIATE_eax &GLOBAL_break_frame PUSH_eax #_common_recursion -LOAD_IMMEDIATE_eax &STRING_226 -PUSH_eax #_process_expression1 -LOAD_EFFECTIVE_ADDRESS %28 +LOAD_BASE_ADDRESS_eax %-8 LOAD_INTEGER -PUSH_eax #_process_expression2 -CALL_IMMEDIATE %FUNCTION_emit -POP_ebx # _process_expression_locals -POP_ebx # _process_expression_locals POP_ebx # _common_recursion STORE_INTEGER -LOAD_EFFECTIVE_ADDRESS %20 +LOAD_IMMEDIATE_eax &GLOBAL_break_target_head PUSH_eax #_common_recursion -LOAD_IMMEDIATE_eax &GLOBAL_current_function +LOAD_BASE_ADDRESS_eax %-12 LOAD_INTEGER -PUSH_eax #_process_expression1 -LOAD_EFFECTIVE_ADDRESS %28 -LOAD_INTEGER -PUSH_eax #_process_expression2 -CALL_IMMEDIATE %FUNCTION_emit -POP_ebx # _process_expression_locals -POP_ebx # _process_expression_locals POP_ebx # _common_recursion STORE_INTEGER -LOAD_EFFECTIVE_ADDRESS %20 +LOAD_IMMEDIATE_eax &GLOBAL_break_target_func PUSH_eax #_common_recursion -LOAD_IMMEDIATE_eax &STRING_227 -PUSH_eax #_process_expression1 -LOAD_EFFECTIVE_ADDRESS %28 +LOAD_BASE_ADDRESS_eax %-16 LOAD_INTEGER -PUSH_eax #_process_expression2 -CALL_IMMEDIATE %FUNCTION_emit -POP_ebx # _process_expression_locals -POP_ebx # _process_expression_locals POP_ebx # _common_recursion STORE_INTEGER -LOAD_EFFECTIVE_ADDRESS %20 +LOAD_IMMEDIATE_eax &GLOBAL_break_target_num PUSH_eax #_common_recursion -LOAD_EFFECTIVE_ADDRESS %12 -LOAD_INTEGER -PUSH_eax #_process_expression1 -LOAD_EFFECTIVE_ADDRESS %28 -LOAD_INTEGER -PUSH_eax #_process_expression2 -CALL_IMMEDIATE %FUNCTION_emit -POP_ebx # _process_expression_locals -POP_ebx # _process_expression_locals -POP_ebx # _common_recursion -STORE_INTEGER -LOAD_EFFECTIVE_ADDRESS %20 -PUSH_eax #_common_recursion -LOAD_IMMEDIATE_eax &STRING_228 -PUSH_eax #_process_expression1 -LOAD_EFFECTIVE_ADDRESS %28 -LOAD_INTEGER -PUSH_eax #_process_expression2 -CALL_IMMEDIATE %FUNCTION_emit -POP_ebx # _process_expression_locals -POP_ebx # _process_expression_locals -POP_ebx # _common_recursion -STORE_INTEGER -LOAD_IMMEDIATE_eax &GLOBAL_break_locals -PUSH_eax #_common_recursion -LOAD_EFFECTIVE_ADDRESS %4 +LOAD_BASE_ADDRESS_eax %-20 LOAD_INTEGER POP_ebx # _common_recursion STORE_INTEGER -LOAD_IMMEDIATE_eax &GLOBAL_break_target -PUSH_eax #_common_recursion -LOAD_EFFECTIVE_ADDRESS %8 -LOAD_INTEGER -POP_ebx # _common_recursion -STORE_INTEGER -LOAD_EFFECTIVE_ADDRESS %20 -LOAD_INTEGER -POP_ebx # _return_result_locals -POP_ebx # _return_result_locals -POP_ebx # _return_result_locals +POP_ebx # _recursive_statement_locals +POP_ebx # _recursive_statement_locals +POP_ebx # _recursive_statement_locals +POP_ebx # _recursive_statement_locals +POP_ebx # _recursive_statement_locals RETURN # Defining function process_while :FUNCTION_process_while +# Defining local nested_locals +LOAD_IMMEDIATE_eax &GLOBAL_break_frame +LOAD_INTEGER +PUSH_eax #nested_locals +# Defining local nested_break_head +LOAD_IMMEDIATE_eax &GLOBAL_break_target_head +LOAD_INTEGER +PUSH_eax #nested_break_head +# Defining local nested_break_func +LOAD_IMMEDIATE_eax &GLOBAL_break_target_func +LOAD_INTEGER +PUSH_eax #nested_break_func +# Defining local nested_break_num +LOAD_IMMEDIATE_eax &GLOBAL_break_target_num +LOAD_INTEGER +PUSH_eax #nested_break_num # Defining local number_string +PUSH_edi # Prevent overwriting in recursion +PUSH_ebp # Protect the old base pointer +COPY_esp_to_edi # Copy new base pointer LOAD_IMMEDIATE_eax &GLOBAL_current_count LOAD_INTEGER PUSH_eax #_process_expression1 +COPY_edi_to_ebp CALL_IMMEDIATE %FUNCTION_numerate_number POP_ebx # _process_expression_locals +POP_ebp # Restore old base pointer +POP_edi # Prevent overwrite PUSH_eax #number_string LOAD_IMMEDIATE_eax &GLOBAL_current_count PUSH_eax #_common_recursion @@ -12754,112 +10740,69 @@ POP_ebx # _common_recursion ADD_ebx_to_eax POP_ebx # _common_recursion STORE_INTEGER -# Defining local nested_break -LOAD_IMMEDIATE_eax &GLOBAL_break_target -LOAD_INTEGER -PUSH_eax #nested_break -# Defining local nested_locals -LOAD_IMMEDIATE_eax &GLOBAL_break_locals -LOAD_INTEGER -PUSH_eax #nested_locals -LOAD_IMMEDIATE_eax &GLOBAL_break_locals +LOAD_IMMEDIATE_eax &GLOBAL_break_target_head PUSH_eax #_common_recursion -LOAD_EFFECTIVE_ADDRESS %20 +LOAD_IMMEDIATE_eax &STRING_process_while_0 +POP_ebx # _common_recursion +STORE_INTEGER +LOAD_IMMEDIATE_eax &GLOBAL_break_target_num +PUSH_eax #_common_recursion +LOAD_BASE_ADDRESS_eax %-24 +LOAD_INTEGER +POP_ebx # _common_recursion +STORE_INTEGER +LOAD_IMMEDIATE_eax &GLOBAL_break_frame +PUSH_eax #_common_recursion +LOAD_IMMEDIATE_eax &GLOBAL_function LOAD_INTEGER # looking up offset # -> offset calculation -LOAD_IMMEDIATE_ebx %20 +LOAD_IMMEDIATE_ebx %4 ADD_ebx_to_eax LOAD_INTEGER POP_ebx # _common_recursion STORE_INTEGER -LOAD_IMMEDIATE_eax &GLOBAL_break_target +LOAD_IMMEDIATE_eax &GLOBAL_break_target_func PUSH_eax #_common_recursion -LOAD_IMMEDIATE_eax &STRING_229 -PUSH_eax #_process_expression1 -LOAD_IMMEDIATE_eax &GLOBAL_current_function +LOAD_IMMEDIATE_eax &GLOBAL_function LOAD_INTEGER -PUSH_eax #_process_expression1 -LOAD_IMMEDIATE_eax &STRING_230 -PUSH_eax #_process_expression1 -LOAD_EFFECTIVE_ADDRESS %24 +# looking up offset +# -> offset calculation +LOAD_IMMEDIATE_ebx %8 +ADD_ebx_to_eax LOAD_INTEGER -PUSH_eax #_process_expression2 -CALL_IMMEDIATE %FUNCTION_prepend_string -POP_ebx # _process_expression_locals -POP_ebx # _process_expression_locals -PUSH_eax #_process_expression2 -CALL_IMMEDIATE %FUNCTION_prepend_string -POP_ebx # _process_expression_locals -POP_ebx # _process_expression_locals -PUSH_eax #_process_expression2 -CALL_IMMEDIATE %FUNCTION_prepend_string -POP_ebx # _process_expression_locals -POP_ebx # _process_expression_locals POP_ebx # _common_recursion STORE_INTEGER -LOAD_EFFECTIVE_ADDRESS %20 -PUSH_eax #_common_recursion -LOAD_IMMEDIATE_eax &STRING_231 +PUSH_edi # Prevent overwriting in recursion +PUSH_ebp # Protect the old base pointer +COPY_esp_to_edi # Copy new base pointer +LOAD_IMMEDIATE_eax &STRING_process_while_1 PUSH_eax #_process_expression1 -LOAD_EFFECTIVE_ADDRESS %28 +COPY_edi_to_ebp +CALL_IMMEDIATE %FUNCTION_emit_out +POP_ebx # _process_expression_locals +POP_ebp # Restore old base pointer +POP_edi # Prevent overwrite +PUSH_edi # Prevent overwriting in recursion +PUSH_ebp # Protect the old base pointer +COPY_esp_to_edi # Copy new base pointer +LOAD_IMMEDIATE_eax &GLOBAL_function LOAD_INTEGER -PUSH_eax #_process_expression2 -CALL_IMMEDIATE %FUNCTION_emit -POP_ebx # _process_expression_locals -POP_ebx # _process_expression_locals -POP_ebx # _common_recursion -STORE_INTEGER -LOAD_EFFECTIVE_ADDRESS %20 -PUSH_eax #_common_recursion -LOAD_IMMEDIATE_eax &GLOBAL_current_function +# looking up offset +# -> offset calculation +LOAD_IMMEDIATE_ebx %8 +ADD_ebx_to_eax LOAD_INTEGER PUSH_eax #_process_expression1 -LOAD_EFFECTIVE_ADDRESS %28 +LOAD_BASE_ADDRESS_eax %-24 LOAD_INTEGER PUSH_eax #_process_expression2 -CALL_IMMEDIATE %FUNCTION_emit +COPY_edi_to_ebp +CALL_IMMEDIATE %FUNCTION_uniqueID_out POP_ebx # _process_expression_locals POP_ebx # _process_expression_locals -POP_ebx # _common_recursion -STORE_INTEGER -LOAD_EFFECTIVE_ADDRESS %20 -PUSH_eax #_common_recursion -LOAD_IMMEDIATE_eax &STRING_232 -PUSH_eax #_process_expression1 -LOAD_EFFECTIVE_ADDRESS %28 -LOAD_INTEGER -PUSH_eax #_process_expression2 -CALL_IMMEDIATE %FUNCTION_emit -POP_ebx # _process_expression_locals -POP_ebx # _process_expression_locals -POP_ebx # _common_recursion -STORE_INTEGER -LOAD_EFFECTIVE_ADDRESS %20 -PUSH_eax #_common_recursion -LOAD_EFFECTIVE_ADDRESS %12 -LOAD_INTEGER -PUSH_eax #_process_expression1 -LOAD_EFFECTIVE_ADDRESS %28 -LOAD_INTEGER -PUSH_eax #_process_expression2 -CALL_IMMEDIATE %FUNCTION_emit -POP_ebx # _process_expression_locals -POP_ebx # _process_expression_locals -POP_ebx # _common_recursion -STORE_INTEGER -LOAD_EFFECTIVE_ADDRESS %20 -PUSH_eax #_common_recursion -LOAD_IMMEDIATE_eax &STRING_233 -PUSH_eax #_process_expression1 -LOAD_EFFECTIVE_ADDRESS %28 -LOAD_INTEGER -PUSH_eax #_process_expression2 -CALL_IMMEDIATE %FUNCTION_emit -POP_ebx # _process_expression_locals -POP_ebx # _process_expression_locals -POP_ebx # _common_recursion -STORE_INTEGER +POP_ebp # Restore old base pointer +POP_edi # Prevent overwrite LOAD_IMMEDIATE_eax &GLOBAL_global_token PUSH_eax #_common_recursion LOAD_IMMEDIATE_eax &GLOBAL_global_token @@ -12868,287 +10811,195 @@ LOAD_INTEGER LOAD_INTEGER POP_ebx # _common_recursion STORE_INTEGER -LOAD_IMMEDIATE_eax &STRING_234 +PUSH_edi # Prevent overwriting in recursion +PUSH_ebp # Protect the old base pointer +COPY_esp_to_edi # Copy new base pointer +LOAD_IMMEDIATE_eax &STRING_process_while_2 PUSH_eax #_process_expression1 -LOAD_IMMEDIATE_eax &STRING_235 +LOAD_IMMEDIATE_eax &STRING_process_while_3 PUSH_eax #_process_expression2 +COPY_edi_to_ebp CALL_IMMEDIATE %FUNCTION_require_match POP_ebx # _process_expression_locals POP_ebx # _process_expression_locals -LOAD_EFFECTIVE_ADDRESS %20 -PUSH_eax #_common_recursion -LOAD_EFFECTIVE_ADDRESS %24 -LOAD_INTEGER -PUSH_eax #_process_expression1 -LOAD_EFFECTIVE_ADDRESS %24 -LOAD_INTEGER -PUSH_eax #_process_expression2 +POP_ebp # Restore old base pointer +POP_edi # Prevent overwrite +PUSH_edi # Prevent overwriting in recursion +PUSH_ebp # Protect the old base pointer +COPY_esp_to_edi # Copy new base pointer +COPY_edi_to_ebp CALL_IMMEDIATE %FUNCTION_expression -POP_ebx # _process_expression_locals -POP_ebx # _process_expression_locals -POP_ebx # _common_recursion -STORE_INTEGER -LOAD_EFFECTIVE_ADDRESS %20 -PUSH_eax #_common_recursion -LOAD_IMMEDIATE_eax &STRING_236 +POP_ebp # Restore old base pointer +POP_edi # Prevent overwrite +PUSH_edi # Prevent overwriting in recursion +PUSH_ebp # Protect the old base pointer +COPY_esp_to_edi # Copy new base pointer +LOAD_IMMEDIATE_eax &STRING_process_while_4 PUSH_eax #_process_expression1 -LOAD_EFFECTIVE_ADDRESS %28 +COPY_edi_to_ebp +CALL_IMMEDIATE %FUNCTION_emit_out +POP_ebx # _process_expression_locals +POP_ebp # Restore old base pointer +POP_edi # Prevent overwrite +PUSH_edi # Prevent overwriting in recursion +PUSH_ebp # Protect the old base pointer +COPY_esp_to_edi # Copy new base pointer +LOAD_IMMEDIATE_eax &GLOBAL_function LOAD_INTEGER -PUSH_eax #_process_expression2 -CALL_IMMEDIATE %FUNCTION_emit -POP_ebx # _process_expression_locals -POP_ebx # _process_expression_locals -POP_ebx # _common_recursion -STORE_INTEGER -LOAD_EFFECTIVE_ADDRESS %20 -PUSH_eax #_common_recursion -LOAD_IMMEDIATE_eax &GLOBAL_current_function +# looking up offset +# -> offset calculation +LOAD_IMMEDIATE_ebx %8 +ADD_ebx_to_eax LOAD_INTEGER PUSH_eax #_process_expression1 -LOAD_EFFECTIVE_ADDRESS %28 +LOAD_BASE_ADDRESS_eax %-24 LOAD_INTEGER PUSH_eax #_process_expression2 -CALL_IMMEDIATE %FUNCTION_emit +COPY_edi_to_ebp +CALL_IMMEDIATE %FUNCTION_uniqueID_out POP_ebx # _process_expression_locals POP_ebx # _process_expression_locals -POP_ebx # _common_recursion -STORE_INTEGER -LOAD_EFFECTIVE_ADDRESS %20 -PUSH_eax #_common_recursion -LOAD_IMMEDIATE_eax &STRING_237 +POP_ebp # Restore old base pointer +POP_edi # Prevent overwrite +PUSH_edi # Prevent overwriting in recursion +PUSH_ebp # Protect the old base pointer +COPY_esp_to_edi # Copy new base pointer +LOAD_IMMEDIATE_eax &STRING_process_while_5 PUSH_eax #_process_expression1 -LOAD_EFFECTIVE_ADDRESS %28 +COPY_edi_to_ebp +CALL_IMMEDIATE %FUNCTION_emit_out +POP_ebx # _process_expression_locals +POP_ebp # Restore old base pointer +POP_edi # Prevent overwrite +PUSH_edi # Prevent overwriting in recursion +PUSH_ebp # Protect the old base pointer +COPY_esp_to_edi # Copy new base pointer +LOAD_IMMEDIATE_eax &GLOBAL_function LOAD_INTEGER -PUSH_eax #_process_expression2 -CALL_IMMEDIATE %FUNCTION_emit -POP_ebx # _process_expression_locals -POP_ebx # _process_expression_locals -POP_ebx # _common_recursion -STORE_INTEGER -LOAD_EFFECTIVE_ADDRESS %20 -PUSH_eax #_common_recursion -LOAD_EFFECTIVE_ADDRESS %12 +# looking up offset +# -> offset calculation +LOAD_IMMEDIATE_ebx %8 +ADD_ebx_to_eax LOAD_INTEGER PUSH_eax #_process_expression1 -LOAD_EFFECTIVE_ADDRESS %28 +LOAD_BASE_ADDRESS_eax %-24 LOAD_INTEGER PUSH_eax #_process_expression2 -CALL_IMMEDIATE %FUNCTION_emit +COPY_edi_to_ebp +CALL_IMMEDIATE %FUNCTION_uniqueID_out POP_ebx # _process_expression_locals POP_ebx # _process_expression_locals -POP_ebx # _common_recursion -STORE_INTEGER -LOAD_EFFECTIVE_ADDRESS %20 -PUSH_eax #_common_recursion -LOAD_IMMEDIATE_eax &STRING_238 +POP_ebp # Restore old base pointer +POP_edi # Prevent overwrite +PUSH_edi # Prevent overwriting in recursion +PUSH_ebp # Protect the old base pointer +COPY_esp_to_edi # Copy new base pointer +LOAD_IMMEDIATE_eax &STRING_process_while_6 PUSH_eax #_process_expression1 -LOAD_EFFECTIVE_ADDRESS %28 -LOAD_INTEGER -PUSH_eax #_process_expression2 -CALL_IMMEDIATE %FUNCTION_emit -POP_ebx # _process_expression_locals -POP_ebx # _process_expression_locals -POP_ebx # _common_recursion -STORE_INTEGER -LOAD_EFFECTIVE_ADDRESS %20 -PUSH_eax #_common_recursion -LOAD_IMMEDIATE_eax &GLOBAL_current_function -LOAD_INTEGER -PUSH_eax #_process_expression1 -LOAD_EFFECTIVE_ADDRESS %28 -LOAD_INTEGER -PUSH_eax #_process_expression2 -CALL_IMMEDIATE %FUNCTION_emit -POP_ebx # _process_expression_locals -POP_ebx # _process_expression_locals -POP_ebx # _common_recursion -STORE_INTEGER -LOAD_EFFECTIVE_ADDRESS %20 -PUSH_eax #_common_recursion -LOAD_IMMEDIATE_eax &STRING_239 -PUSH_eax #_process_expression1 -LOAD_EFFECTIVE_ADDRESS %28 -LOAD_INTEGER -PUSH_eax #_process_expression2 -CALL_IMMEDIATE %FUNCTION_emit -POP_ebx # _process_expression_locals -POP_ebx # _process_expression_locals -POP_ebx # _common_recursion -STORE_INTEGER -LOAD_EFFECTIVE_ADDRESS %20 -PUSH_eax #_common_recursion -LOAD_EFFECTIVE_ADDRESS %12 -LOAD_INTEGER -PUSH_eax #_process_expression1 -LOAD_EFFECTIVE_ADDRESS %28 -LOAD_INTEGER -PUSH_eax #_process_expression2 -CALL_IMMEDIATE %FUNCTION_emit -POP_ebx # _process_expression_locals -POP_ebx # _process_expression_locals -POP_ebx # _common_recursion -STORE_INTEGER -LOAD_EFFECTIVE_ADDRESS %20 -PUSH_eax #_common_recursion -LOAD_IMMEDIATE_eax &STRING_240 -PUSH_eax #_process_expression1 -LOAD_EFFECTIVE_ADDRESS %28 -LOAD_INTEGER -PUSH_eax #_process_expression2 -CALL_IMMEDIATE %FUNCTION_emit -POP_ebx # _process_expression_locals -POP_ebx # _process_expression_locals -POP_ebx # _common_recursion -STORE_INTEGER -LOAD_IMMEDIATE_eax &STRING_241 -PUSH_eax #_process_expression1 -LOAD_IMMEDIATE_eax &STRING_242 +LOAD_IMMEDIATE_eax &STRING_process_while_7 PUSH_eax #_process_expression2 +COPY_edi_to_ebp CALL_IMMEDIATE %FUNCTION_require_match POP_ebx # _process_expression_locals POP_ebx # _process_expression_locals -LOAD_EFFECTIVE_ADDRESS %20 -PUSH_eax #_common_recursion -LOAD_EFFECTIVE_ADDRESS %24 -LOAD_INTEGER -PUSH_eax #_process_expression1 -LOAD_EFFECTIVE_ADDRESS %24 -LOAD_INTEGER -PUSH_eax #_process_expression2 +POP_ebp # Restore old base pointer +POP_edi # Prevent overwrite +PUSH_edi # Prevent overwriting in recursion +PUSH_ebp # Protect the old base pointer +COPY_esp_to_edi # Copy new base pointer +COPY_edi_to_ebp CALL_IMMEDIATE %FUNCTION_statement -POP_ebx # _process_expression_locals -POP_ebx # _process_expression_locals -POP_ebx # _common_recursion -STORE_INTEGER -LOAD_EFFECTIVE_ADDRESS %20 -PUSH_eax #_common_recursion -LOAD_IMMEDIATE_eax &STRING_243 +POP_ebp # Restore old base pointer +POP_edi # Prevent overwrite +PUSH_edi # Prevent overwriting in recursion +PUSH_ebp # Protect the old base pointer +COPY_esp_to_edi # Copy new base pointer +LOAD_IMMEDIATE_eax &STRING_process_while_8 PUSH_eax #_process_expression1 -LOAD_EFFECTIVE_ADDRESS %28 +COPY_edi_to_ebp +CALL_IMMEDIATE %FUNCTION_emit_out +POP_ebx # _process_expression_locals +POP_ebp # Restore old base pointer +POP_edi # Prevent overwrite +PUSH_edi # Prevent overwriting in recursion +PUSH_ebp # Protect the old base pointer +COPY_esp_to_edi # Copy new base pointer +LOAD_IMMEDIATE_eax &GLOBAL_function LOAD_INTEGER -PUSH_eax #_process_expression2 -CALL_IMMEDIATE %FUNCTION_emit -POP_ebx # _process_expression_locals -POP_ebx # _process_expression_locals -POP_ebx # _common_recursion -STORE_INTEGER -LOAD_EFFECTIVE_ADDRESS %20 -PUSH_eax #_common_recursion -LOAD_IMMEDIATE_eax &GLOBAL_current_function +# looking up offset +# -> offset calculation +LOAD_IMMEDIATE_ebx %8 +ADD_ebx_to_eax LOAD_INTEGER PUSH_eax #_process_expression1 -LOAD_EFFECTIVE_ADDRESS %28 +LOAD_BASE_ADDRESS_eax %-24 LOAD_INTEGER PUSH_eax #_process_expression2 -CALL_IMMEDIATE %FUNCTION_emit +COPY_edi_to_ebp +CALL_IMMEDIATE %FUNCTION_uniqueID_out POP_ebx # _process_expression_locals POP_ebx # _process_expression_locals -POP_ebx # _common_recursion -STORE_INTEGER -LOAD_EFFECTIVE_ADDRESS %20 -PUSH_eax #_common_recursion -LOAD_IMMEDIATE_eax &STRING_244 +POP_ebp # Restore old base pointer +POP_edi # Prevent overwrite +PUSH_edi # Prevent overwriting in recursion +PUSH_ebp # Protect the old base pointer +COPY_esp_to_edi # Copy new base pointer +LOAD_IMMEDIATE_eax &STRING_process_while_9 PUSH_eax #_process_expression1 -LOAD_EFFECTIVE_ADDRESS %28 +COPY_edi_to_ebp +CALL_IMMEDIATE %FUNCTION_emit_out +POP_ebx # _process_expression_locals +POP_ebp # Restore old base pointer +POP_edi # Prevent overwrite +PUSH_edi # Prevent overwriting in recursion +PUSH_ebp # Protect the old base pointer +COPY_esp_to_edi # Copy new base pointer +LOAD_IMMEDIATE_eax &GLOBAL_function LOAD_INTEGER -PUSH_eax #_process_expression2 -CALL_IMMEDIATE %FUNCTION_emit -POP_ebx # _process_expression_locals -POP_ebx # _process_expression_locals -POP_ebx # _common_recursion -STORE_INTEGER -LOAD_EFFECTIVE_ADDRESS %20 -PUSH_eax #_common_recursion -LOAD_EFFECTIVE_ADDRESS %12 +# looking up offset +# -> offset calculation +LOAD_IMMEDIATE_ebx %8 +ADD_ebx_to_eax LOAD_INTEGER PUSH_eax #_process_expression1 -LOAD_EFFECTIVE_ADDRESS %28 +LOAD_BASE_ADDRESS_eax %-24 LOAD_INTEGER PUSH_eax #_process_expression2 -CALL_IMMEDIATE %FUNCTION_emit +COPY_edi_to_ebp +CALL_IMMEDIATE %FUNCTION_uniqueID_out POP_ebx # _process_expression_locals POP_ebx # _process_expression_locals -POP_ebx # _common_recursion -STORE_INTEGER -LOAD_EFFECTIVE_ADDRESS %20 +POP_ebp # Restore old base pointer +POP_edi # Prevent overwrite +LOAD_IMMEDIATE_eax &GLOBAL_break_target_head PUSH_eax #_common_recursion -LOAD_IMMEDIATE_eax &STRING_245 -PUSH_eax #_process_expression1 -LOAD_EFFECTIVE_ADDRESS %28 +LOAD_BASE_ADDRESS_eax %-12 LOAD_INTEGER -PUSH_eax #_process_expression2 -CALL_IMMEDIATE %FUNCTION_emit -POP_ebx # _process_expression_locals -POP_ebx # _process_expression_locals POP_ebx # _common_recursion STORE_INTEGER -LOAD_EFFECTIVE_ADDRESS %20 +LOAD_IMMEDIATE_eax &GLOBAL_break_target_func PUSH_eax #_common_recursion -LOAD_IMMEDIATE_eax &GLOBAL_current_function +LOAD_BASE_ADDRESS_eax %-16 LOAD_INTEGER -PUSH_eax #_process_expression1 -LOAD_EFFECTIVE_ADDRESS %28 -LOAD_INTEGER -PUSH_eax #_process_expression2 -CALL_IMMEDIATE %FUNCTION_emit -POP_ebx # _process_expression_locals -POP_ebx # _process_expression_locals POP_ebx # _common_recursion STORE_INTEGER -LOAD_EFFECTIVE_ADDRESS %20 +LOAD_IMMEDIATE_eax &GLOBAL_break_target_num PUSH_eax #_common_recursion -LOAD_IMMEDIATE_eax &STRING_246 -PUSH_eax #_process_expression1 -LOAD_EFFECTIVE_ADDRESS %28 +LOAD_BASE_ADDRESS_eax %-20 LOAD_INTEGER -PUSH_eax #_process_expression2 -CALL_IMMEDIATE %FUNCTION_emit -POP_ebx # _process_expression_locals -POP_ebx # _process_expression_locals POP_ebx # _common_recursion STORE_INTEGER -LOAD_EFFECTIVE_ADDRESS %20 +LOAD_IMMEDIATE_eax &GLOBAL_break_frame PUSH_eax #_common_recursion -LOAD_EFFECTIVE_ADDRESS %12 -LOAD_INTEGER -PUSH_eax #_process_expression1 -LOAD_EFFECTIVE_ADDRESS %28 -LOAD_INTEGER -PUSH_eax #_process_expression2 -CALL_IMMEDIATE %FUNCTION_emit -POP_ebx # _process_expression_locals -POP_ebx # _process_expression_locals -POP_ebx # _common_recursion -STORE_INTEGER -LOAD_EFFECTIVE_ADDRESS %20 -PUSH_eax #_common_recursion -LOAD_IMMEDIATE_eax &STRING_247 -PUSH_eax #_process_expression1 -LOAD_EFFECTIVE_ADDRESS %28 -LOAD_INTEGER -PUSH_eax #_process_expression2 -CALL_IMMEDIATE %FUNCTION_emit -POP_ebx # _process_expression_locals -POP_ebx # _process_expression_locals -POP_ebx # _common_recursion -STORE_INTEGER -LOAD_IMMEDIATE_eax &GLOBAL_break_locals -PUSH_eax #_common_recursion -LOAD_EFFECTIVE_ADDRESS %4 +LOAD_BASE_ADDRESS_eax %-8 LOAD_INTEGER POP_ebx # _common_recursion STORE_INTEGER -LOAD_IMMEDIATE_eax &GLOBAL_break_target -PUSH_eax #_common_recursion -LOAD_EFFECTIVE_ADDRESS %8 -LOAD_INTEGER -POP_ebx # _common_recursion -STORE_INTEGER -LOAD_EFFECTIVE_ADDRESS %20 -LOAD_INTEGER -POP_ebx # _return_result_locals -POP_ebx # _return_result_locals -POP_ebx # _return_result_locals +POP_ebx # _recursive_statement_locals +POP_ebx # _recursive_statement_locals +POP_ebx # _recursive_statement_locals +POP_ebx # _recursive_statement_locals +POP_ebx # _recursive_statement_locals RETURN # Defining function return_result :FUNCTION_return_result @@ -13161,7 +11012,6 @@ LOAD_INTEGER POP_ebx # _common_recursion STORE_INTEGER # IF_return_result_0 - LOAD_IMMEDIATE_eax &GLOBAL_global_token LOAD_INTEGER # looking up offset @@ -13182,101 +11032,278 @@ SETNE MOVEZBL TEST JUMP_EQ %ELSE_return_result_0 - -LOAD_EFFECTIVE_ADDRESS %8 -PUSH_eax #_common_recursion -LOAD_EFFECTIVE_ADDRESS %12 -LOAD_INTEGER -PUSH_eax #_process_expression1 -LOAD_EFFECTIVE_ADDRESS %12 -LOAD_INTEGER -PUSH_eax #_process_expression2 +PUSH_edi # Prevent overwriting in recursion +PUSH_ebp # Protect the old base pointer +COPY_esp_to_edi # Copy new base pointer +COPY_edi_to_ebp CALL_IMMEDIATE %FUNCTION_expression -POP_ebx # _process_expression_locals -POP_ebx # _process_expression_locals -POP_ebx # _common_recursion -STORE_INTEGER +POP_ebp # Restore old base pointer +POP_edi # Prevent overwrite JUMP %_END_IF_return_result_0 - :ELSE_return_result_0 - :_END_IF_return_result_0 - -LOAD_IMMEDIATE_eax &STRING_248 +PUSH_edi # Prevent overwriting in recursion +PUSH_ebp # Protect the old base pointer +COPY_esp_to_edi # Copy new base pointer +LOAD_IMMEDIATE_eax &STRING_return_result_1 PUSH_eax #_process_expression1 -LOAD_IMMEDIATE_eax &STRING_249 +LOAD_IMMEDIATE_eax &STRING_return_result_2 PUSH_eax #_process_expression2 +COPY_edi_to_ebp CALL_IMMEDIATE %FUNCTION_require_match POP_ebx # _process_expression_locals POP_ebx # _process_expression_locals +POP_ebp # Restore old base pointer +POP_edi # Prevent overwrite # Defining local i PUSH_eax #i -# FOR_initialization_return_result_1 -LOAD_EFFECTIVE_ADDRESS %0 - +# FOR_initialization_return_result_3 +LOAD_BASE_ADDRESS_eax %-8 PUSH_eax #_common_recursion -LOAD_EFFECTIVE_ADDRESS %12 +LOAD_IMMEDIATE_eax &GLOBAL_function LOAD_INTEGER # looking up offset # -> offset calculation -LOAD_IMMEDIATE_ebx %20 +LOAD_IMMEDIATE_ebx %4 ADD_ebx_to_eax LOAD_INTEGER POP_ebx # _common_recursion STORE_INTEGER -:FOR_return_result_1 +:FOR_return_result_3 LOAD_IMMEDIATE_eax %0 PUSH_eax #_common_recursion -LOAD_EFFECTIVE_ADDRESS %4 +LOAD_BASE_ADDRESS_eax %-8 LOAD_INTEGER POP_ebx # _common_recursion CMP SETNE MOVEZBL TEST -JUMP_EQ %FOR_END_return_result_1 -JUMP %FOR_THEN_return_result_1 -:FOR_ITER_return_result_1 -LOAD_EFFECTIVE_ADDRESS %0 - +JUMP_EQ %FOR_END_return_result_3 +JUMP %FOR_THEN_return_result_3 +:FOR_ITER_return_result_3 +LOAD_BASE_ADDRESS_eax %-8 PUSH_eax #_common_recursion -LOAD_EFFECTIVE_ADDRESS %4 +LOAD_BASE_ADDRESS_eax %-8 LOAD_INTEGER # looking up offset LOAD_INTEGER POP_ebx # _common_recursion STORE_INTEGER -JUMP %FOR_return_result_1 -:FOR_THEN_return_result_1 -LOAD_EFFECTIVE_ADDRESS %12 -PUSH_eax #_common_recursion -LOAD_IMMEDIATE_eax &STRING_250 +JUMP %FOR_return_result_3 +:FOR_THEN_return_result_3 +PUSH_edi # Prevent overwriting in recursion +PUSH_ebp # Protect the old base pointer +COPY_esp_to_edi # Copy new base pointer +LOAD_IMMEDIATE_eax &STRING_return_result_4 PUSH_eax #_process_expression1 -LOAD_EFFECTIVE_ADDRESS %20 +COPY_edi_to_ebp +CALL_IMMEDIATE %FUNCTION_emit_out +POP_ebx # _process_expression_locals +POP_ebp # Restore old base pointer +POP_edi # Prevent overwrite +JUMP %FOR_ITER_return_result_3 +:FOR_END_return_result_3 +PUSH_edi # Prevent overwriting in recursion +PUSH_ebp # Protect the old base pointer +COPY_esp_to_edi # Copy new base pointer +LOAD_IMMEDIATE_eax &STRING_return_result_5 +PUSH_eax #_process_expression1 +COPY_edi_to_ebp +CALL_IMMEDIATE %FUNCTION_emit_out +POP_ebx # _process_expression_locals +POP_ebp # Restore old base pointer +POP_edi # Prevent overwrite +POP_ebx # _recursive_statement_locals +RETURN +# Defining function process_break +:FUNCTION_process_break +# IF_process_break_0 +LOAD_IMMEDIATE_eax %0 +PUSH_eax #_common_recursion +LOAD_IMMEDIATE_eax &GLOBAL_break_target_head LOAD_INTEGER +POP_ebx # _common_recursion +CMP +SETE +MOVEZBL +TEST +JUMP_EQ %ELSE_process_break_0 +PUSH_edi # Prevent overwriting in recursion +PUSH_ebp # Protect the old base pointer +COPY_esp_to_edi # Copy new base pointer +LOAD_IMMEDIATE_eax &STRING_process_break_1 +PUSH_eax #_process_expression1 +LOAD_IMMEDIATE_eax %2 PUSH_eax #_process_expression2 -CALL_IMMEDIATE %FUNCTION_emit +COPY_edi_to_ebp +CALL_IMMEDIATE %FUNCTION_file_print POP_ebx # _process_expression_locals POP_ebx # _process_expression_locals +POP_ebp # Restore old base pointer +POP_edi # Prevent overwrite +PUSH_edi # Prevent overwriting in recursion +PUSH_ebp # Protect the old base pointer +COPY_esp_to_edi # Copy new base pointer +COPY_edi_to_ebp +CALL_IMMEDIATE %FUNCTION_line_error +POP_ebp # Restore old base pointer +POP_edi # Prevent overwrite +PUSH_edi # Prevent overwriting in recursion +PUSH_ebp # Protect the old base pointer +COPY_esp_to_edi # Copy new base pointer +LOAD_IMMEDIATE_eax %1 +PUSH_eax #_process_expression1 +COPY_edi_to_ebp +CALL_IMMEDIATE %FUNCTION_exit +POP_ebx # _process_expression_locals +POP_ebp # Restore old base pointer +POP_edi # Prevent overwrite +JUMP %_END_IF_process_break_0 +:ELSE_process_break_0 +:_END_IF_process_break_0 +# Defining local i +LOAD_IMMEDIATE_eax &GLOBAL_function +LOAD_INTEGER +# looking up offset +# -> offset calculation +LOAD_IMMEDIATE_ebx %4 +ADD_ebx_to_eax +LOAD_INTEGER +PUSH_eax #i +:WHILE_process_break_2 +LOAD_BASE_ADDRESS_eax %-8 +LOAD_INTEGER +PUSH_eax #_common_recursion +LOAD_IMMEDIATE_eax &GLOBAL_break_frame +LOAD_INTEGER +POP_ebx # _common_recursion +CMP +SETNE +MOVEZBL +TEST +JUMP_EQ %END_WHILE_process_break_2 +# THEN_while_process_break_2 +# IF_process_break_3 +LOAD_IMMEDIATE_eax %0 +PUSH_eax #_common_recursion +LOAD_BASE_ADDRESS_eax %-8 +LOAD_INTEGER +POP_ebx # _common_recursion +CMP +SETE +MOVEZBL +TEST +JUMP_EQ %ELSE_process_break_3 +JUMP %END_WHILE_process_break_2 +JUMP %_END_IF_process_break_3 +:ELSE_process_break_3 +:_END_IF_process_break_3 +PUSH_edi # Prevent overwriting in recursion +PUSH_ebp # Protect the old base pointer +COPY_esp_to_edi # Copy new base pointer +LOAD_IMMEDIATE_eax &STRING_process_break_4 +PUSH_eax #_process_expression1 +COPY_edi_to_ebp +CALL_IMMEDIATE %FUNCTION_emit_out +POP_ebx # _process_expression_locals +POP_ebp # Restore old base pointer +POP_edi # Prevent overwrite +LOAD_BASE_ADDRESS_eax %-8 +PUSH_eax #_common_recursion +LOAD_BASE_ADDRESS_eax %-8 +LOAD_INTEGER +# looking up offset +LOAD_INTEGER POP_ebx # _common_recursion STORE_INTEGER -JUMP %FOR_ITER_return_result_1 -:FOR_END_return_result_1 -LOAD_EFFECTIVE_ADDRESS %12 +JUMP %WHILE_process_break_2 +:END_WHILE_process_break_2 +LOAD_IMMEDIATE_eax &GLOBAL_global_token PUSH_eax #_common_recursion -LOAD_IMMEDIATE_eax &STRING_251 -PUSH_eax #_process_expression1 -LOAD_EFFECTIVE_ADDRESS %20 +LOAD_IMMEDIATE_eax &GLOBAL_global_token +LOAD_INTEGER +# looking up offset LOAD_INTEGER -PUSH_eax #_process_expression2 -CALL_IMMEDIATE %FUNCTION_emit -POP_ebx # _process_expression_locals -POP_ebx # _process_expression_locals POP_ebx # _common_recursion STORE_INTEGER -LOAD_EFFECTIVE_ADDRESS %12 +PUSH_edi # Prevent overwriting in recursion +PUSH_ebp # Protect the old base pointer +COPY_esp_to_edi # Copy new base pointer +LOAD_IMMEDIATE_eax &STRING_process_break_5 +PUSH_eax #_process_expression1 +COPY_edi_to_ebp +CALL_IMMEDIATE %FUNCTION_emit_out +POP_ebx # _process_expression_locals +POP_ebp # Restore old base pointer +POP_edi # Prevent overwrite +PUSH_edi # Prevent overwriting in recursion +PUSH_ebp # Protect the old base pointer +COPY_esp_to_edi # Copy new base pointer +LOAD_IMMEDIATE_eax &GLOBAL_break_target_head LOAD_INTEGER -POP_ebx # _return_result_locals +PUSH_eax #_process_expression1 +COPY_edi_to_ebp +CALL_IMMEDIATE %FUNCTION_emit_out +POP_ebx # _process_expression_locals +POP_ebp # Restore old base pointer +POP_edi # Prevent overwrite +PUSH_edi # Prevent overwriting in recursion +PUSH_ebp # Protect the old base pointer +COPY_esp_to_edi # Copy new base pointer +LOAD_IMMEDIATE_eax &GLOBAL_break_target_func +LOAD_INTEGER +PUSH_eax #_process_expression1 +COPY_edi_to_ebp +CALL_IMMEDIATE %FUNCTION_emit_out +POP_ebx # _process_expression_locals +POP_ebp # Restore old base pointer +POP_edi # Prevent overwrite +PUSH_edi # Prevent overwriting in recursion +PUSH_ebp # Protect the old base pointer +COPY_esp_to_edi # Copy new base pointer +LOAD_IMMEDIATE_eax &STRING_process_break_6 +PUSH_eax #_process_expression1 +COPY_edi_to_ebp +CALL_IMMEDIATE %FUNCTION_emit_out +POP_ebx # _process_expression_locals +POP_ebp # Restore old base pointer +POP_edi # Prevent overwrite +PUSH_edi # Prevent overwriting in recursion +PUSH_ebp # Protect the old base pointer +COPY_esp_to_edi # Copy new base pointer +LOAD_IMMEDIATE_eax &GLOBAL_break_target_num +LOAD_INTEGER +PUSH_eax #_process_expression1 +COPY_edi_to_ebp +CALL_IMMEDIATE %FUNCTION_emit_out +POP_ebx # _process_expression_locals +POP_ebp # Restore old base pointer +POP_edi # Prevent overwrite +PUSH_edi # Prevent overwriting in recursion +PUSH_ebp # Protect the old base pointer +COPY_esp_to_edi # Copy new base pointer +LOAD_IMMEDIATE_eax &STRING_process_break_7 +PUSH_eax #_process_expression1 +COPY_edi_to_ebp +CALL_IMMEDIATE %FUNCTION_emit_out +POP_ebx # _process_expression_locals +POP_ebp # Restore old base pointer +POP_edi # Prevent overwrite +PUSH_edi # Prevent overwriting in recursion +PUSH_ebp # Protect the old base pointer +COPY_esp_to_edi # Copy new base pointer +LOAD_IMMEDIATE_eax &STRING_process_break_8 +PUSH_eax #_process_expression1 +LOAD_IMMEDIATE_eax &STRING_process_break_9 +PUSH_eax #_process_expression2 +COPY_edi_to_ebp +CALL_IMMEDIATE %FUNCTION_require_match +POP_ebx # _process_expression_locals +POP_ebx # _process_expression_locals +POP_ebp # Restore old base pointer +POP_edi # Prevent overwrite +POP_ebx # _recursive_statement_locals RETURN # Defining function recursive_statement :FUNCTION_recursive_statement @@ -13289,19 +11316,21 @@ LOAD_INTEGER POP_ebx # _common_recursion STORE_INTEGER # Defining local frame -LOAD_EFFECTIVE_ADDRESS %4 +LOAD_IMMEDIATE_eax &GLOBAL_function LOAD_INTEGER # looking up offset # -> offset calculation -LOAD_IMMEDIATE_ebx %20 +LOAD_IMMEDIATE_ebx %4 ADD_ebx_to_eax LOAD_INTEGER PUSH_eax #frame :WHILE_recursive_statement_0 - LOAD_IMMEDIATE_eax %1 PUSH_eax #_common_recursion -LOAD_IMMEDIATE_eax &STRING_252 +PUSH_edi # Prevent overwriting in recursion +PUSH_ebp # Protect the old base pointer +COPY_esp_to_edi # Copy new base pointer +LOAD_IMMEDIATE_eax &STRING_recursive_statement_1 PUSH_eax #_process_expression1 LOAD_IMMEDIATE_eax &GLOBAL_global_token LOAD_INTEGER @@ -13311,33 +11340,26 @@ LOAD_IMMEDIATE_ebx %8 ADD_ebx_to_eax LOAD_INTEGER PUSH_eax #_process_expression2 +COPY_edi_to_ebp CALL_IMMEDIATE %FUNCTION_match POP_ebx # _process_expression_locals POP_ebx # _process_expression_locals +POP_ebp # Restore old base pointer +POP_edi # Prevent overwrite POP_ebx # _common_recursion XOR_ebx_eax_into_eax TEST JUMP_EQ %END_WHILE_recursive_statement_0 - # THEN_while_recursive_statement_0 - -LOAD_EFFECTIVE_ADDRESS %12 -PUSH_eax #_common_recursion -LOAD_EFFECTIVE_ADDRESS %16 -LOAD_INTEGER -PUSH_eax #_process_expression1 -LOAD_EFFECTIVE_ADDRESS %16 -LOAD_INTEGER -PUSH_eax #_process_expression2 +PUSH_edi # Prevent overwriting in recursion +PUSH_ebp # Protect the old base pointer +COPY_esp_to_edi # Copy new base pointer +COPY_edi_to_ebp CALL_IMMEDIATE %FUNCTION_statement -POP_ebx # _process_expression_locals -POP_ebx # _process_expression_locals -POP_ebx # _common_recursion -STORE_INTEGER +POP_ebp # Restore old base pointer +POP_edi # Prevent overwrite JUMP %WHILE_recursive_statement_0 - :END_WHILE_recursive_statement_0 - LOAD_IMMEDIATE_eax &GLOBAL_global_token PUSH_eax #_common_recursion LOAD_IMMEDIATE_eax &GLOBAL_global_token @@ -13346,68 +11368,15 @@ LOAD_INTEGER LOAD_INTEGER POP_ebx # _common_recursion STORE_INTEGER -# IF_recursive_statement_1 -LOAD_IMMEDIATE_eax %0 -PUSH_eax #_common_recursion -LOAD_EFFECTIVE_ADDRESS %12 -LOAD_INTEGER -# looking up offset -# -> offset calculation -LOAD_IMMEDIATE_ebx %20 -ADD_ebx_to_eax -LOAD_INTEGER -POP_ebx # _common_recursion -CMP -SETNE -MOVEZBL -TEST -JUMP_EQ %ELSE_recursive_statement_1 -# Defining local i -PUSH_eax #i -# FOR_initialization_recursive_statement_2 -LOAD_EFFECTIVE_ADDRESS %0 - -PUSH_eax #_common_recursion -LOAD_EFFECTIVE_ADDRESS %16 -LOAD_INTEGER -# looking up offset -# -> offset calculation -LOAD_IMMEDIATE_ebx %20 -ADD_ebx_to_eax -LOAD_INTEGER -POP_ebx # _common_recursion -STORE_INTEGER -:FOR_recursive_statement_2 -LOAD_EFFECTIVE_ADDRESS %4 -LOAD_INTEGER -PUSH_eax #_common_recursion -LOAD_EFFECTIVE_ADDRESS %4 -LOAD_INTEGER -POP_ebx # _common_recursion -CMP -SETNE -MOVEZBL -TEST -JUMP_EQ %FOR_END_recursive_statement_2 -JUMP %FOR_THEN_recursive_statement_2 -:FOR_ITER_recursive_statement_2 -LOAD_EFFECTIVE_ADDRESS %0 - -PUSH_eax #_common_recursion -LOAD_EFFECTIVE_ADDRESS %4 -LOAD_INTEGER -# looking up offset -LOAD_INTEGER -POP_ebx # _common_recursion -STORE_INTEGER -JUMP %FOR_recursive_statement_2 -:FOR_THEN_recursive_statement_2 -# IF_recursive_statement_3 +# IF_recursive_statement_2 LOAD_IMMEDIATE_eax %1 PUSH_eax #_common_recursion -LOAD_IMMEDIATE_eax &STRING_253 +PUSH_edi # Prevent overwriting in recursion +PUSH_ebp # Protect the old base pointer +COPY_esp_to_edi # Copy new base pointer +LOAD_IMMEDIATE_eax &STRING_recursive_statement_3 PUSH_eax #_process_expression1 -LOAD_EFFECTIVE_ADDRESS %24 +LOAD_IMMEDIATE_eax &GLOBAL_out LOAD_INTEGER # looking up offset # -> offset calculation @@ -13415,60 +11384,86 @@ LOAD_IMMEDIATE_ebx %8 ADD_ebx_to_eax LOAD_INTEGER PUSH_eax #_process_expression2 +COPY_edi_to_ebp CALL_IMMEDIATE %FUNCTION_match POP_ebx # _process_expression_locals POP_ebx # _process_expression_locals +POP_ebp # Restore old base pointer +POP_edi # Prevent overwrite POP_ebx # _common_recursion XOR_ebx_eax_into_eax TEST -JUMP_EQ %ELSE_recursive_statement_3 -LOAD_EFFECTIVE_ADDRESS %16 +JUMP_EQ %ELSE_recursive_statement_2 +# Defining local i +PUSH_eax #i +# FOR_initialization_recursive_statement_4 +LOAD_BASE_ADDRESS_eax %-12 PUSH_eax #_common_recursion -LOAD_IMMEDIATE_eax &STRING_254 +LOAD_IMMEDIATE_eax &GLOBAL_function +LOAD_INTEGER +# looking up offset +# -> offset calculation +LOAD_IMMEDIATE_ebx %4 +ADD_ebx_to_eax +LOAD_INTEGER +POP_ebx # _common_recursion +STORE_INTEGER +:FOR_recursive_statement_4 +LOAD_BASE_ADDRESS_eax %-8 +LOAD_INTEGER +PUSH_eax #_common_recursion +LOAD_BASE_ADDRESS_eax %-12 +LOAD_INTEGER +POP_ebx # _common_recursion +CMP +SETNE +MOVEZBL +TEST +JUMP_EQ %FOR_END_recursive_statement_4 +JUMP %FOR_THEN_recursive_statement_4 +:FOR_ITER_recursive_statement_4 +LOAD_BASE_ADDRESS_eax %-12 +PUSH_eax #_common_recursion +LOAD_BASE_ADDRESS_eax %-12 +LOAD_INTEGER +# looking up offset +LOAD_INTEGER +POP_ebx # _common_recursion +STORE_INTEGER +JUMP %FOR_recursive_statement_4 +:FOR_THEN_recursive_statement_4 +PUSH_edi # Prevent overwriting in recursion +PUSH_ebp # Protect the old base pointer +COPY_esp_to_edi # Copy new base pointer +LOAD_IMMEDIATE_eax &STRING_recursive_statement_5 PUSH_eax #_process_expression1 -LOAD_EFFECTIVE_ADDRESS %24 -LOAD_INTEGER -PUSH_eax #_process_expression2 -CALL_IMMEDIATE %FUNCTION_emit +COPY_edi_to_ebp +CALL_IMMEDIATE %FUNCTION_emit_out POP_ebx # _process_expression_locals -POP_ebx # _process_expression_locals -POP_ebx # _common_recursion -STORE_INTEGER -JUMP %_END_IF_recursive_statement_3 -:ELSE_recursive_statement_3 -:_END_IF_recursive_statement_3 -LOAD_EFFECTIVE_ADDRESS %12 +POP_ebp # Restore old base pointer +POP_edi # Prevent overwrite +JUMP %FOR_ITER_recursive_statement_4 +:FOR_END_recursive_statement_4 +POP_ebx # _recursive_statement_locals +JUMP %_END_IF_recursive_statement_2 +:ELSE_recursive_statement_2 +:_END_IF_recursive_statement_2 +LOAD_IMMEDIATE_eax &GLOBAL_function LOAD_INTEGER # looking up offset # -> offset calculation -LOAD_IMMEDIATE_ebx %20 +LOAD_IMMEDIATE_ebx %4 ADD_ebx_to_eax PUSH_eax #_common_recursion -LOAD_EFFECTIVE_ADDRESS %16 -LOAD_INTEGER -# looking up offset -# -> offset calculation -LOAD_IMMEDIATE_ebx %20 -ADD_ebx_to_eax -LOAD_INTEGER -# looking up offset +LOAD_BASE_ADDRESS_eax %-8 LOAD_INTEGER POP_ebx # _common_recursion STORE_INTEGER -JUMP %FOR_ITER_recursive_statement_2 -:FOR_END_recursive_statement_2 POP_ebx # _recursive_statement_locals -JUMP %_END_IF_recursive_statement_1 -:ELSE_recursive_statement_1 -:_END_IF_recursive_statement_1 -LOAD_EFFECTIVE_ADDRESS %12 -LOAD_INTEGER -POP_ebx # _return_result_locals RETURN # Defining function statement :FUNCTION_statement # IF_statement_0 - LOAD_IMMEDIATE_eax &GLOBAL_global_token LOAD_INTEGER # looking up offset @@ -13489,24 +11484,15 @@ SETE MOVEZBL TEST JUMP_EQ %ELSE_statement_0 - -LOAD_EFFECTIVE_ADDRESS %8 -PUSH_eax #_common_recursion -LOAD_EFFECTIVE_ADDRESS %12 -LOAD_INTEGER -PUSH_eax #_process_expression1 -LOAD_EFFECTIVE_ADDRESS %12 -LOAD_INTEGER -PUSH_eax #_process_expression2 +PUSH_edi # Prevent overwriting in recursion +PUSH_ebp # Protect the old base pointer +COPY_esp_to_edi # Copy new base pointer +COPY_edi_to_ebp CALL_IMMEDIATE %FUNCTION_recursive_statement -POP_ebx # _process_expression_locals -POP_ebx # _process_expression_locals -POP_ebx # _common_recursion -STORE_INTEGER +POP_ebp # Restore old base pointer +POP_edi # Prevent overwrite JUMP %_END_IF_statement_0 - :ELSE_statement_0 - # IF_statement_1 LOAD_IMMEDIATE_eax %58 PUSH_eax #_common_recursion @@ -13528,8 +11514,9 @@ SETE MOVEZBL TEST JUMP_EQ %ELSE_statement_1 -LOAD_EFFECTIVE_ADDRESS %8 -PUSH_eax #_common_recursion +PUSH_edi # Prevent overwriting in recursion +PUSH_ebp # Protect the old base pointer +COPY_esp_to_edi # Copy new base pointer LOAD_IMMEDIATE_eax &GLOBAL_global_token LOAD_INTEGER # looking up offset @@ -13538,26 +11525,21 @@ LOAD_IMMEDIATE_ebx %8 ADD_ebx_to_eax LOAD_INTEGER PUSH_eax #_process_expression1 -LOAD_EFFECTIVE_ADDRESS %16 -LOAD_INTEGER -PUSH_eax #_process_expression2 -CALL_IMMEDIATE %FUNCTION_emit +COPY_edi_to_ebp +CALL_IMMEDIATE %FUNCTION_emit_out POP_ebx # _process_expression_locals -POP_ebx # _process_expression_locals -POP_ebx # _common_recursion -STORE_INTEGER -LOAD_EFFECTIVE_ADDRESS %8 -PUSH_eax #_common_recursion -LOAD_IMMEDIATE_eax &STRING_255 +POP_ebp # Restore old base pointer +POP_edi # Prevent overwrite +PUSH_edi # Prevent overwriting in recursion +PUSH_ebp # Protect the old base pointer +COPY_esp_to_edi # Copy new base pointer +LOAD_IMMEDIATE_eax &STRING_statement_2 PUSH_eax #_process_expression1 -LOAD_EFFECTIVE_ADDRESS %16 -LOAD_INTEGER -PUSH_eax #_process_expression2 -CALL_IMMEDIATE %FUNCTION_emit +COPY_edi_to_ebp +CALL_IMMEDIATE %FUNCTION_emit_out POP_ebx # _process_expression_locals -POP_ebx # _process_expression_locals -POP_ebx # _common_recursion -STORE_INTEGER +POP_ebp # Restore old base pointer +POP_edi # Prevent overwrite LOAD_IMMEDIATE_eax &GLOBAL_global_token PUSH_eax #_common_recursion LOAD_IMMEDIATE_eax &GLOBAL_global_token @@ -13568,9 +11550,12 @@ POP_ebx # _common_recursion STORE_INTEGER JUMP %_END_IF_statement_1 :ELSE_statement_1 -# IF_statement_2 +# IF_statement_3 LOAD_IMMEDIATE_eax %0 PUSH_eax #_common_recursion +PUSH_edi # Prevent overwriting in recursion +PUSH_ebp # Protect the old base pointer +COPY_esp_to_edi # Copy new base pointer LOAD_IMMEDIATE_eax &GLOBAL_global_token LOAD_INTEGER # looking up offset @@ -13579,70 +11564,24 @@ LOAD_IMMEDIATE_ebx %8 ADD_ebx_to_eax LOAD_INTEGER PUSH_eax #_process_expression1 -LOAD_EFFECTIVE_ADDRESS %12 -LOAD_INTEGER -# looking up offset -# -> offset calculation -LOAD_IMMEDIATE_ebx %20 -ADD_ebx_to_eax +LOAD_IMMEDIATE_eax &GLOBAL_prim_types LOAD_INTEGER PUSH_eax #_process_expression2 -CALL_IMMEDIATE %FUNCTION_sym_lookup -POP_ebx # _process_expression_locals -POP_ebx # _process_expression_locals -POP_ebx # _common_recursion -CMP -SETE -MOVEZBL -PUSH_eax #_common_recursion -LOAD_IMMEDIATE_eax %0 -PUSH_eax #_common_recursion -LOAD_IMMEDIATE_eax &GLOBAL_global_token -LOAD_INTEGER -# looking up offset -# -> offset calculation -LOAD_IMMEDIATE_ebx %8 -ADD_ebx_to_eax -LOAD_INTEGER -PUSH_eax #_process_expression1 -LOAD_EFFECTIVE_ADDRESS %16 -LOAD_INTEGER -# looking up offset -# -> offset calculation -LOAD_IMMEDIATE_ebx %16 -ADD_ebx_to_eax -LOAD_INTEGER -PUSH_eax #_process_expression2 -CALL_IMMEDIATE %FUNCTION_sym_lookup -POP_ebx # _process_expression_locals -POP_ebx # _process_expression_locals -POP_ebx # _common_recursion -CMP -SETE -MOVEZBL -POP_ebx # _common_recursion -AND_eax_ebx -PUSH_eax #_common_recursion -LOAD_IMMEDIATE_eax %0 -PUSH_eax #_common_recursion -LOAD_IMMEDIATE_eax &GLOBAL_global_token -LOAD_INTEGER -# looking up offset -# -> offset calculation -LOAD_IMMEDIATE_ebx %8 -ADD_ebx_to_eax -LOAD_INTEGER -PUSH_eax #_process_expression1 +COPY_edi_to_ebp CALL_IMMEDIATE %FUNCTION_lookup_type POP_ebx # _process_expression_locals +POP_ebx # _process_expression_locals +POP_ebp # Restore old base pointer +POP_edi # Prevent overwrite POP_ebx # _common_recursion CMP SETNE MOVEZBL -POP_ebx # _common_recursion -AND_eax_ebx PUSH_eax #_common_recursion -LOAD_IMMEDIATE_eax &STRING_256 +PUSH_edi # Prevent overwriting in recursion +PUSH_ebp # Protect the old base pointer +COPY_esp_to_edi # Copy new base pointer +LOAD_IMMEDIATE_eax &STRING_statement_4 PUSH_eax #_process_expression1 LOAD_IMMEDIATE_eax &GLOBAL_global_token LOAD_INTEGER @@ -13652,92 +11591,30 @@ LOAD_IMMEDIATE_ebx %8 ADD_ebx_to_eax LOAD_INTEGER PUSH_eax #_process_expression2 +COPY_edi_to_ebp CALL_IMMEDIATE %FUNCTION_match POP_ebx # _process_expression_locals POP_ebx # _process_expression_locals +POP_ebp # Restore old base pointer +POP_edi # Prevent overwrite POP_ebx # _common_recursion OR_eax_ebx TEST -JUMP_EQ %ELSE_statement_2 -LOAD_EFFECTIVE_ADDRESS %8 -PUSH_eax #_common_recursion -LOAD_EFFECTIVE_ADDRESS %12 -LOAD_INTEGER -PUSH_eax #_process_expression1 -LOAD_EFFECTIVE_ADDRESS %12 -LOAD_INTEGER -PUSH_eax #_process_expression2 -CALL_IMMEDIATE %FUNCTION_collect_local -POP_ebx # _process_expression_locals -POP_ebx # _process_expression_locals -POP_ebx # _common_recursion -STORE_INTEGER -JUMP %_END_IF_statement_2 -:ELSE_statement_2 -# IF_statement_3 -LOAD_IMMEDIATE_eax &STRING_257 -PUSH_eax #_process_expression1 -LOAD_IMMEDIATE_eax &GLOBAL_global_token -LOAD_INTEGER -# looking up offset -# -> offset calculation -LOAD_IMMEDIATE_ebx %8 -ADD_ebx_to_eax -LOAD_INTEGER -PUSH_eax #_process_expression2 -CALL_IMMEDIATE %FUNCTION_match -POP_ebx # _process_expression_locals -POP_ebx # _process_expression_locals -TEST JUMP_EQ %ELSE_statement_3 -LOAD_EFFECTIVE_ADDRESS %8 -PUSH_eax #_common_recursion -LOAD_EFFECTIVE_ADDRESS %12 -LOAD_INTEGER -PUSH_eax #_process_expression1 -LOAD_EFFECTIVE_ADDRESS %12 -LOAD_INTEGER -PUSH_eax #_process_expression2 -CALL_IMMEDIATE %FUNCTION_process_if -POP_ebx # _process_expression_locals -POP_ebx # _process_expression_locals -POP_ebx # _common_recursion -STORE_INTEGER +PUSH_edi # Prevent overwriting in recursion +PUSH_ebp # Protect the old base pointer +COPY_esp_to_edi # Copy new base pointer +COPY_edi_to_ebp +CALL_IMMEDIATE %FUNCTION_collect_local +POP_ebp # Restore old base pointer +POP_edi # Prevent overwrite JUMP %_END_IF_statement_3 :ELSE_statement_3 -# IF_statement_4 -LOAD_IMMEDIATE_eax &STRING_258 -PUSH_eax #_process_expression1 -LOAD_IMMEDIATE_eax &GLOBAL_global_token -LOAD_INTEGER -# looking up offset -# -> offset calculation -LOAD_IMMEDIATE_ebx %8 -ADD_ebx_to_eax -LOAD_INTEGER -PUSH_eax #_process_expression2 -CALL_IMMEDIATE %FUNCTION_match -POP_ebx # _process_expression_locals -POP_ebx # _process_expression_locals -TEST -JUMP_EQ %ELSE_statement_4 -LOAD_EFFECTIVE_ADDRESS %8 -PUSH_eax #_common_recursion -LOAD_EFFECTIVE_ADDRESS %12 -LOAD_INTEGER -PUSH_eax #_process_expression1 -LOAD_EFFECTIVE_ADDRESS %12 -LOAD_INTEGER -PUSH_eax #_process_expression2 -CALL_IMMEDIATE %FUNCTION_process_do -POP_ebx # _process_expression_locals -POP_ebx # _process_expression_locals -POP_ebx # _common_recursion -STORE_INTEGER -JUMP %_END_IF_statement_4 -:ELSE_statement_4 # IF_statement_5 -LOAD_IMMEDIATE_eax &STRING_259 +PUSH_edi # Prevent overwriting in recursion +PUSH_ebp # Protect the old base pointer +COPY_esp_to_edi # Copy new base pointer +LOAD_IMMEDIATE_eax &STRING_statement_6 PUSH_eax #_process_expression1 LOAD_IMMEDIATE_eax &GLOBAL_global_token LOAD_INTEGER @@ -13747,59 +11624,28 @@ LOAD_IMMEDIATE_ebx %8 ADD_ebx_to_eax LOAD_INTEGER PUSH_eax #_process_expression2 +COPY_edi_to_ebp CALL_IMMEDIATE %FUNCTION_match POP_ebx # _process_expression_locals POP_ebx # _process_expression_locals +POP_ebp # Restore old base pointer +POP_edi # Prevent overwrite TEST JUMP_EQ %ELSE_statement_5 -LOAD_EFFECTIVE_ADDRESS %8 -PUSH_eax #_common_recursion -LOAD_EFFECTIVE_ADDRESS %12 -LOAD_INTEGER -PUSH_eax #_process_expression1 -LOAD_EFFECTIVE_ADDRESS %12 -LOAD_INTEGER -PUSH_eax #_process_expression2 -CALL_IMMEDIATE %FUNCTION_process_while -POP_ebx # _process_expression_locals -POP_ebx # _process_expression_locals -POP_ebx # _common_recursion -STORE_INTEGER +PUSH_edi # Prevent overwriting in recursion +PUSH_ebp # Protect the old base pointer +COPY_esp_to_edi # Copy new base pointer +COPY_edi_to_ebp +CALL_IMMEDIATE %FUNCTION_process_if +POP_ebp # Restore old base pointer +POP_edi # Prevent overwrite JUMP %_END_IF_statement_5 :ELSE_statement_5 -# IF_statement_6 -LOAD_IMMEDIATE_eax &STRING_260 -PUSH_eax #_process_expression1 -LOAD_IMMEDIATE_eax &GLOBAL_global_token -LOAD_INTEGER -# looking up offset -# -> offset calculation -LOAD_IMMEDIATE_ebx %8 -ADD_ebx_to_eax -LOAD_INTEGER -PUSH_eax #_process_expression2 -CALL_IMMEDIATE %FUNCTION_match -POP_ebx # _process_expression_locals -POP_ebx # _process_expression_locals -TEST -JUMP_EQ %ELSE_statement_6 -LOAD_EFFECTIVE_ADDRESS %8 -PUSH_eax #_common_recursion -LOAD_EFFECTIVE_ADDRESS %12 -LOAD_INTEGER -PUSH_eax #_process_expression1 -LOAD_EFFECTIVE_ADDRESS %12 -LOAD_INTEGER -PUSH_eax #_process_expression2 -CALL_IMMEDIATE %FUNCTION_process_for -POP_ebx # _process_expression_locals -POP_ebx # _process_expression_locals -POP_ebx # _common_recursion -STORE_INTEGER -JUMP %_END_IF_statement_6 -:ELSE_statement_6 # IF_statement_7 -LOAD_IMMEDIATE_eax &STRING_261 +PUSH_edi # Prevent overwriting in recursion +PUSH_ebp # Protect the old base pointer +COPY_esp_to_edi # Copy new base pointer +LOAD_IMMEDIATE_eax &STRING_statement_8 PUSH_eax #_process_expression1 LOAD_IMMEDIATE_eax &GLOBAL_global_token LOAD_INTEGER @@ -13809,95 +11655,28 @@ LOAD_IMMEDIATE_ebx %8 ADD_ebx_to_eax LOAD_INTEGER PUSH_eax #_process_expression2 +COPY_edi_to_ebp CALL_IMMEDIATE %FUNCTION_match POP_ebx # _process_expression_locals POP_ebx # _process_expression_locals +POP_ebp # Restore old base pointer +POP_edi # Prevent overwrite TEST JUMP_EQ %ELSE_statement_7 -LOAD_EFFECTIVE_ADDRESS %8 -PUSH_eax #_common_recursion -LOAD_EFFECTIVE_ADDRESS %12 -LOAD_INTEGER -PUSH_eax #_process_expression1 -CALL_IMMEDIATE %FUNCTION_process_asm -POP_ebx # _process_expression_locals -POP_ebx # _common_recursion -STORE_INTEGER +PUSH_edi # Prevent overwriting in recursion +PUSH_ebp # Protect the old base pointer +COPY_esp_to_edi # Copy new base pointer +COPY_edi_to_ebp +CALL_IMMEDIATE %FUNCTION_process_do +POP_ebp # Restore old base pointer +POP_edi # Prevent overwrite JUMP %_END_IF_statement_7 :ELSE_statement_7 -# IF_statement_8 -LOAD_IMMEDIATE_eax &STRING_262 -PUSH_eax #_process_expression1 -LOAD_IMMEDIATE_eax &GLOBAL_global_token -LOAD_INTEGER -# looking up offset -# -> offset calculation -LOAD_IMMEDIATE_ebx %8 -ADD_ebx_to_eax -LOAD_INTEGER -PUSH_eax #_process_expression2 -CALL_IMMEDIATE %FUNCTION_match -POP_ebx # _process_expression_locals -POP_ebx # _process_expression_locals -TEST -JUMP_EQ %ELSE_statement_8 -LOAD_IMMEDIATE_eax &GLOBAL_global_token -PUSH_eax #_common_recursion -LOAD_IMMEDIATE_eax &GLOBAL_global_token -LOAD_INTEGER -# looking up offset -LOAD_INTEGER -POP_ebx # _common_recursion -STORE_INTEGER -LOAD_EFFECTIVE_ADDRESS %8 -PUSH_eax #_common_recursion -LOAD_IMMEDIATE_eax &STRING_263 -PUSH_eax #_process_expression1 -LOAD_IMMEDIATE_eax &GLOBAL_global_token -LOAD_INTEGER -# looking up offset -# -> offset calculation -LOAD_IMMEDIATE_ebx %8 -ADD_ebx_to_eax -LOAD_INTEGER -PUSH_eax #_process_expression1 -LOAD_IMMEDIATE_eax &STRING_264 -PUSH_eax #_process_expression2 -CALL_IMMEDIATE %FUNCTION_prepend_string -POP_ebx # _process_expression_locals -POP_ebx # _process_expression_locals -PUSH_eax #_process_expression2 -CALL_IMMEDIATE %FUNCTION_prepend_string -POP_ebx # _process_expression_locals -POP_ebx # _process_expression_locals -PUSH_eax #_process_expression1 -LOAD_EFFECTIVE_ADDRESS %16 -LOAD_INTEGER -PUSH_eax #_process_expression2 -CALL_IMMEDIATE %FUNCTION_emit -POP_ebx # _process_expression_locals -POP_ebx # _process_expression_locals -POP_ebx # _common_recursion -STORE_INTEGER -LOAD_IMMEDIATE_eax &GLOBAL_global_token -PUSH_eax #_common_recursion -LOAD_IMMEDIATE_eax &GLOBAL_global_token -LOAD_INTEGER -# looking up offset -LOAD_INTEGER -POP_ebx # _common_recursion -STORE_INTEGER -LOAD_IMMEDIATE_eax &STRING_265 -PUSH_eax #_process_expression1 -LOAD_IMMEDIATE_eax &STRING_266 -PUSH_eax #_process_expression2 -CALL_IMMEDIATE %FUNCTION_require_match -POP_ebx # _process_expression_locals -POP_ebx # _process_expression_locals -JUMP %_END_IF_statement_8 -:ELSE_statement_8 # IF_statement_9 -LOAD_IMMEDIATE_eax &STRING_267 +PUSH_edi # Prevent overwriting in recursion +PUSH_ebp # Protect the old base pointer +COPY_esp_to_edi # Copy new base pointer +LOAD_IMMEDIATE_eax &STRING_statement_10 PUSH_eax #_process_expression1 LOAD_IMMEDIATE_eax &GLOBAL_global_token LOAD_INTEGER @@ -13907,28 +11686,28 @@ LOAD_IMMEDIATE_ebx %8 ADD_ebx_to_eax LOAD_INTEGER PUSH_eax #_process_expression2 +COPY_edi_to_ebp CALL_IMMEDIATE %FUNCTION_match POP_ebx # _process_expression_locals POP_ebx # _process_expression_locals +POP_ebp # Restore old base pointer +POP_edi # Prevent overwrite TEST JUMP_EQ %ELSE_statement_9 -LOAD_EFFECTIVE_ADDRESS %8 -PUSH_eax #_common_recursion -LOAD_EFFECTIVE_ADDRESS %12 -LOAD_INTEGER -PUSH_eax #_process_expression1 -LOAD_EFFECTIVE_ADDRESS %12 -LOAD_INTEGER -PUSH_eax #_process_expression2 -CALL_IMMEDIATE %FUNCTION_return_result -POP_ebx # _process_expression_locals -POP_ebx # _process_expression_locals -POP_ebx # _common_recursion -STORE_INTEGER +PUSH_edi # Prevent overwriting in recursion +PUSH_ebp # Protect the old base pointer +COPY_esp_to_edi # Copy new base pointer +COPY_edi_to_ebp +CALL_IMMEDIATE %FUNCTION_process_while +POP_ebp # Restore old base pointer +POP_edi # Prevent overwrite JUMP %_END_IF_statement_9 :ELSE_statement_9 -# IF_statement_10 -LOAD_IMMEDIATE_eax &STRING_268 +# IF_statement_11 +PUSH_edi # Prevent overwriting in recursion +PUSH_ebp # Protect the old base pointer +COPY_esp_to_edi # Copy new base pointer +LOAD_IMMEDIATE_eax &STRING_statement_12 PUSH_eax #_process_expression1 LOAD_IMMEDIATE_eax &GLOBAL_global_token LOAD_INTEGER @@ -13938,143 +11717,28 @@ LOAD_IMMEDIATE_ebx %8 ADD_ebx_to_eax LOAD_INTEGER PUSH_eax #_process_expression2 +COPY_edi_to_ebp CALL_IMMEDIATE %FUNCTION_match POP_ebx # _process_expression_locals POP_ebx # _process_expression_locals -TEST -JUMP_EQ %ELSE_statement_10 -# IF_statement_11 -LOAD_IMMEDIATE_eax %0 -PUSH_eax #_common_recursion -LOAD_IMMEDIATE_eax &GLOBAL_break_target -LOAD_INTEGER -POP_ebx # _common_recursion -CMP -SETE -MOVEZBL +POP_ebp # Restore old base pointer +POP_edi # Prevent overwrite TEST JUMP_EQ %ELSE_statement_11 -LOAD_IMMEDIATE_eax &STRING_269 -PUSH_eax #_process_expression1 -LOAD_IMMEDIATE_eax %2 -PUSH_eax #_process_expression2 -CALL_IMMEDIATE %FUNCTION_file_print -POP_ebx # _process_expression_locals -POP_ebx # _process_expression_locals -CALL_IMMEDIATE %FUNCTION_line_error -LOAD_IMMEDIATE_eax %1 -PUSH_eax #_process_expression1 -CALL_IMMEDIATE %FUNCTION_exit -POP_ebx # _process_expression_locals +PUSH_edi # Prevent overwriting in recursion +PUSH_ebp # Protect the old base pointer +COPY_esp_to_edi # Copy new base pointer +COPY_edi_to_ebp +CALL_IMMEDIATE %FUNCTION_process_for +POP_ebp # Restore old base pointer +POP_edi # Prevent overwrite JUMP %_END_IF_statement_11 :ELSE_statement_11 -:_END_IF_statement_11 -# Defining local i -LOAD_EFFECTIVE_ADDRESS %4 -LOAD_INTEGER -# looking up offset -# -> offset calculation -LOAD_IMMEDIATE_ebx %20 -ADD_ebx_to_eax -LOAD_INTEGER -PUSH_eax #i -:WHILE_statement_12 -LOAD_EFFECTIVE_ADDRESS %0 - -LOAD_INTEGER -PUSH_eax #_common_recursion -LOAD_IMMEDIATE_eax &GLOBAL_break_locals -LOAD_INTEGER -POP_ebx # _common_recursion -CMP -SETNE -MOVEZBL -TEST -JUMP_EQ %END_WHILE_statement_12 -# THEN_while_statement_12 # IF_statement_13 -LOAD_IMMEDIATE_eax %0 -PUSH_eax #_common_recursion -LOAD_EFFECTIVE_ADDRESS %4 -LOAD_INTEGER -POP_ebx # _common_recursion -CMP -SETE -MOVEZBL -TEST -JUMP_EQ %ELSE_statement_13 -JUMP %END_WHILE_statement_12 -JUMP %_END_IF_statement_13 -:ELSE_statement_13 -:_END_IF_statement_13 -LOAD_EFFECTIVE_ADDRESS %12 -PUSH_eax #_common_recursion -LOAD_IMMEDIATE_eax &STRING_270 -PUSH_eax #_process_expression1 -LOAD_EFFECTIVE_ADDRESS %20 -LOAD_INTEGER -PUSH_eax #_process_expression2 -CALL_IMMEDIATE %FUNCTION_emit -POP_ebx # _process_expression_locals -POP_ebx # _process_expression_locals -POP_ebx # _common_recursion -STORE_INTEGER -LOAD_EFFECTIVE_ADDRESS %0 - -PUSH_eax #_common_recursion -LOAD_EFFECTIVE_ADDRESS %4 -LOAD_INTEGER -# looking up offset -LOAD_INTEGER -POP_ebx # _common_recursion -STORE_INTEGER -JUMP %WHILE_statement_12 -:END_WHILE_statement_12 -LOAD_IMMEDIATE_eax &GLOBAL_global_token -PUSH_eax #_common_recursion -LOAD_IMMEDIATE_eax &GLOBAL_global_token -LOAD_INTEGER -# looking up offset -LOAD_INTEGER -POP_ebx # _common_recursion -STORE_INTEGER -LOAD_EFFECTIVE_ADDRESS %12 -PUSH_eax #_common_recursion -LOAD_IMMEDIATE_eax &STRING_271 -PUSH_eax #_process_expression1 -LOAD_IMMEDIATE_eax &GLOBAL_break_target -LOAD_INTEGER -PUSH_eax #_process_expression1 -LOAD_IMMEDIATE_eax &STRING_272 -PUSH_eax #_process_expression2 -CALL_IMMEDIATE %FUNCTION_prepend_string -POP_ebx # _process_expression_locals -POP_ebx # _process_expression_locals -PUSH_eax #_process_expression2 -CALL_IMMEDIATE %FUNCTION_prepend_string -POP_ebx # _process_expression_locals -POP_ebx # _process_expression_locals -PUSH_eax #_process_expression1 -LOAD_EFFECTIVE_ADDRESS %20 -LOAD_INTEGER -PUSH_eax #_process_expression2 -CALL_IMMEDIATE %FUNCTION_emit -POP_ebx # _process_expression_locals -POP_ebx # _process_expression_locals -POP_ebx # _common_recursion -STORE_INTEGER -LOAD_IMMEDIATE_eax &STRING_273 -PUSH_eax #_process_expression1 -LOAD_IMMEDIATE_eax &STRING_274 -PUSH_eax #_process_expression2 -CALL_IMMEDIATE %FUNCTION_require_match -POP_ebx # _process_expression_locals -POP_ebx # _process_expression_locals -POP_ebx # _recursive_statement_locals -JUMP %_END_IF_statement_10 -:ELSE_statement_10 -# IF_statement_14 -LOAD_IMMEDIATE_eax &STRING_275 +PUSH_edi # Prevent overwriting in recursion +PUSH_ebp # Protect the old base pointer +COPY_esp_to_edi # Copy new base pointer +LOAD_IMMEDIATE_eax &STRING_statement_14 PUSH_eax #_process_expression1 LOAD_IMMEDIATE_eax &GLOBAL_global_token LOAD_INTEGER @@ -14084,11 +11748,45 @@ LOAD_IMMEDIATE_ebx %8 ADD_ebx_to_eax LOAD_INTEGER PUSH_eax #_process_expression2 +COPY_edi_to_ebp CALL_IMMEDIATE %FUNCTION_match POP_ebx # _process_expression_locals POP_ebx # _process_expression_locals +POP_ebp # Restore old base pointer +POP_edi # Prevent overwrite TEST -JUMP_EQ %ELSE_statement_14 +JUMP_EQ %ELSE_statement_13 +PUSH_edi # Prevent overwriting in recursion +PUSH_ebp # Protect the old base pointer +COPY_esp_to_edi # Copy new base pointer +COPY_edi_to_ebp +CALL_IMMEDIATE %FUNCTION_process_asm +POP_ebp # Restore old base pointer +POP_edi # Prevent overwrite +JUMP %_END_IF_statement_13 +:ELSE_statement_13 +# IF_statement_15 +PUSH_edi # Prevent overwriting in recursion +PUSH_ebp # Protect the old base pointer +COPY_esp_to_edi # Copy new base pointer +LOAD_IMMEDIATE_eax &STRING_statement_16 +PUSH_eax #_process_expression1 +LOAD_IMMEDIATE_eax &GLOBAL_global_token +LOAD_INTEGER +# looking up offset +# -> offset calculation +LOAD_IMMEDIATE_ebx %8 +ADD_ebx_to_eax +LOAD_INTEGER +PUSH_eax #_process_expression2 +COPY_edi_to_ebp +CALL_IMMEDIATE %FUNCTION_match +POP_ebx # _process_expression_locals +POP_ebx # _process_expression_locals +POP_ebp # Restore old base pointer +POP_edi # Prevent overwrite +TEST +JUMP_EQ %ELSE_statement_15 LOAD_IMMEDIATE_eax &GLOBAL_global_token PUSH_eax #_common_recursion LOAD_IMMEDIATE_eax &GLOBAL_global_token @@ -14097,62 +11795,214 @@ LOAD_INTEGER LOAD_INTEGER POP_ebx # _common_recursion STORE_INTEGER -LOAD_EFFECTIVE_ADDRESS %8 -PUSH_eax #_common_recursion -LOAD_IMMEDIATE_eax &STRING_276 +PUSH_edi # Prevent overwriting in recursion +PUSH_ebp # Protect the old base pointer +COPY_esp_to_edi # Copy new base pointer +LOAD_IMMEDIATE_eax &STRING_statement_17 PUSH_eax #_process_expression1 -LOAD_EFFECTIVE_ADDRESS %16 +COPY_edi_to_ebp +CALL_IMMEDIATE %FUNCTION_emit_out +POP_ebx # _process_expression_locals +POP_ebp # Restore old base pointer +POP_edi # Prevent overwrite +PUSH_edi # Prevent overwriting in recursion +PUSH_ebp # Protect the old base pointer +COPY_esp_to_edi # Copy new base pointer +LOAD_IMMEDIATE_eax &GLOBAL_global_token LOAD_INTEGER -PUSH_eax #_process_expression2 -CALL_IMMEDIATE %FUNCTION_emit +# looking up offset +# -> offset calculation +LOAD_IMMEDIATE_ebx %8 +ADD_ebx_to_eax +LOAD_INTEGER +PUSH_eax #_process_expression1 +COPY_edi_to_ebp +CALL_IMMEDIATE %FUNCTION_emit_out POP_ebx # _process_expression_locals +POP_ebp # Restore old base pointer +POP_edi # Prevent overwrite +PUSH_edi # Prevent overwriting in recursion +PUSH_ebp # Protect the old base pointer +COPY_esp_to_edi # Copy new base pointer +LOAD_IMMEDIATE_eax &STRING_statement_18 +PUSH_eax #_process_expression1 +COPY_edi_to_ebp +CALL_IMMEDIATE %FUNCTION_emit_out POP_ebx # _process_expression_locals +POP_ebp # Restore old base pointer +POP_edi # Prevent overwrite +LOAD_IMMEDIATE_eax &GLOBAL_global_token +PUSH_eax #_common_recursion +LOAD_IMMEDIATE_eax &GLOBAL_global_token +LOAD_INTEGER +# looking up offset +LOAD_INTEGER POP_ebx # _common_recursion STORE_INTEGER -LOAD_IMMEDIATE_eax &STRING_277 +PUSH_edi # Prevent overwriting in recursion +PUSH_ebp # Protect the old base pointer +COPY_esp_to_edi # Copy new base pointer +LOAD_IMMEDIATE_eax &STRING_statement_19 PUSH_eax #_process_expression1 -LOAD_IMMEDIATE_eax &STRING_278 +LOAD_IMMEDIATE_eax &STRING_statement_20 PUSH_eax #_process_expression2 +COPY_edi_to_ebp CALL_IMMEDIATE %FUNCTION_require_match POP_ebx # _process_expression_locals POP_ebx # _process_expression_locals -JUMP %_END_IF_statement_14 -:ELSE_statement_14 -LOAD_EFFECTIVE_ADDRESS %8 -PUSH_eax #_common_recursion -LOAD_EFFECTIVE_ADDRESS %12 -LOAD_INTEGER +POP_ebp # Restore old base pointer +POP_edi # Prevent overwrite +JUMP %_END_IF_statement_15 +:ELSE_statement_15 +# IF_statement_21 +PUSH_edi # Prevent overwriting in recursion +PUSH_ebp # Protect the old base pointer +COPY_esp_to_edi # Copy new base pointer +LOAD_IMMEDIATE_eax &STRING_statement_22 PUSH_eax #_process_expression1 -LOAD_EFFECTIVE_ADDRESS %12 +LOAD_IMMEDIATE_eax &GLOBAL_global_token +LOAD_INTEGER +# looking up offset +# -> offset calculation +LOAD_IMMEDIATE_ebx %8 +ADD_ebx_to_eax LOAD_INTEGER PUSH_eax #_process_expression2 +COPY_edi_to_ebp +CALL_IMMEDIATE %FUNCTION_match +POP_ebx # _process_expression_locals +POP_ebx # _process_expression_locals +POP_ebp # Restore old base pointer +POP_edi # Prevent overwrite +TEST +JUMP_EQ %ELSE_statement_21 +PUSH_edi # Prevent overwriting in recursion +PUSH_ebp # Protect the old base pointer +COPY_esp_to_edi # Copy new base pointer +COPY_edi_to_ebp +CALL_IMMEDIATE %FUNCTION_return_result +POP_ebp # Restore old base pointer +POP_edi # Prevent overwrite +JUMP %_END_IF_statement_21 +:ELSE_statement_21 +# IF_statement_23 +PUSH_edi # Prevent overwriting in recursion +PUSH_ebp # Protect the old base pointer +COPY_esp_to_edi # Copy new base pointer +LOAD_IMMEDIATE_eax &STRING_statement_24 +PUSH_eax #_process_expression1 +LOAD_IMMEDIATE_eax &GLOBAL_global_token +LOAD_INTEGER +# looking up offset +# -> offset calculation +LOAD_IMMEDIATE_ebx %8 +ADD_ebx_to_eax +LOAD_INTEGER +PUSH_eax #_process_expression2 +COPY_edi_to_ebp +CALL_IMMEDIATE %FUNCTION_match +POP_ebx # _process_expression_locals +POP_ebx # _process_expression_locals +POP_ebp # Restore old base pointer +POP_edi # Prevent overwrite +TEST +JUMP_EQ %ELSE_statement_23 +PUSH_edi # Prevent overwriting in recursion +PUSH_ebp # Protect the old base pointer +COPY_esp_to_edi # Copy new base pointer +COPY_edi_to_ebp +CALL_IMMEDIATE %FUNCTION_process_break +POP_ebp # Restore old base pointer +POP_edi # Prevent overwrite +JUMP %_END_IF_statement_23 +:ELSE_statement_23 +# IF_statement_25 +PUSH_edi # Prevent overwriting in recursion +PUSH_ebp # Protect the old base pointer +COPY_esp_to_edi # Copy new base pointer +LOAD_IMMEDIATE_eax &STRING_statement_26 +PUSH_eax #_process_expression1 +LOAD_IMMEDIATE_eax &GLOBAL_global_token +LOAD_INTEGER +# looking up offset +# -> offset calculation +LOAD_IMMEDIATE_ebx %8 +ADD_ebx_to_eax +LOAD_INTEGER +PUSH_eax #_process_expression2 +COPY_edi_to_ebp +CALL_IMMEDIATE %FUNCTION_match +POP_ebx # _process_expression_locals +POP_ebx # _process_expression_locals +POP_ebp # Restore old base pointer +POP_edi # Prevent overwrite +TEST +JUMP_EQ %ELSE_statement_25 +LOAD_IMMEDIATE_eax &GLOBAL_global_token +PUSH_eax #_common_recursion +LOAD_IMMEDIATE_eax &GLOBAL_global_token +LOAD_INTEGER +# looking up offset +LOAD_INTEGER +POP_ebx # _common_recursion +STORE_INTEGER +PUSH_edi # Prevent overwriting in recursion +PUSH_ebp # Protect the old base pointer +COPY_esp_to_edi # Copy new base pointer +LOAD_IMMEDIATE_eax &STRING_statement_27 +PUSH_eax #_process_expression1 +COPY_edi_to_ebp +CALL_IMMEDIATE %FUNCTION_emit_out +POP_ebx # _process_expression_locals +POP_ebp # Restore old base pointer +POP_edi # Prevent overwrite +PUSH_edi # Prevent overwriting in recursion +PUSH_ebp # Protect the old base pointer +COPY_esp_to_edi # Copy new base pointer +LOAD_IMMEDIATE_eax &STRING_statement_28 +PUSH_eax #_process_expression1 +LOAD_IMMEDIATE_eax &STRING_statement_29 +PUSH_eax #_process_expression2 +COPY_edi_to_ebp +CALL_IMMEDIATE %FUNCTION_require_match +POP_ebx # _process_expression_locals +POP_ebx # _process_expression_locals +POP_ebp # Restore old base pointer +POP_edi # Prevent overwrite +JUMP %_END_IF_statement_25 +:ELSE_statement_25 +PUSH_edi # Prevent overwriting in recursion +PUSH_ebp # Protect the old base pointer +COPY_esp_to_edi # Copy new base pointer +COPY_edi_to_ebp CALL_IMMEDIATE %FUNCTION_expression -POP_ebx # _process_expression_locals -POP_ebx # _process_expression_locals -POP_ebx # _common_recursion -STORE_INTEGER -LOAD_IMMEDIATE_eax &STRING_279 +POP_ebp # Restore old base pointer +POP_edi # Prevent overwrite +PUSH_edi # Prevent overwriting in recursion +PUSH_ebp # Protect the old base pointer +COPY_esp_to_edi # Copy new base pointer +LOAD_IMMEDIATE_eax &STRING_statement_30 PUSH_eax #_process_expression1 -LOAD_IMMEDIATE_eax &STRING_280 +LOAD_IMMEDIATE_eax &STRING_statement_31 PUSH_eax #_process_expression2 +COPY_edi_to_ebp CALL_IMMEDIATE %FUNCTION_require_match POP_ebx # _process_expression_locals POP_ebx # _process_expression_locals -:_END_IF_statement_14 -:_END_IF_statement_10 +POP_ebp # Restore old base pointer +POP_edi # Prevent overwrite +:_END_IF_statement_25 +:_END_IF_statement_23 +:_END_IF_statement_21 +:_END_IF_statement_15 +:_END_IF_statement_13 +:_END_IF_statement_11 :_END_IF_statement_9 -:_END_IF_statement_8 :_END_IF_statement_7 -:_END_IF_statement_6 :_END_IF_statement_5 -:_END_IF_statement_4 :_END_IF_statement_3 -:_END_IF_statement_2 :_END_IF_statement_1 :_END_IF_statement_0 - -LOAD_EFFECTIVE_ADDRESS %8 -LOAD_INTEGER RETURN # Defining function collect_arguments :FUNCTION_collect_arguments @@ -14165,10 +12015,12 @@ LOAD_INTEGER POP_ebx # _common_recursion STORE_INTEGER :WHILE_collect_arguments_0 - LOAD_IMMEDIATE_eax %1 PUSH_eax #_common_recursion -LOAD_IMMEDIATE_eax &STRING_281 +PUSH_edi # Prevent overwriting in recursion +PUSH_ebp # Protect the old base pointer +COPY_esp_to_edi # Copy new base pointer +LOAD_IMMEDIATE_eax &STRING_collect_arguments_1 PUSH_eax #_process_expression1 LOAD_IMMEDIATE_eax &GLOBAL_global_token LOAD_INTEGER @@ -14178,20 +12030,27 @@ LOAD_IMMEDIATE_ebx %8 ADD_ebx_to_eax LOAD_INTEGER PUSH_eax #_process_expression2 +COPY_edi_to_ebp CALL_IMMEDIATE %FUNCTION_match POP_ebx # _process_expression_locals POP_ebx # _process_expression_locals +POP_ebp # Restore old base pointer +POP_edi # Prevent overwrite POP_ebx # _common_recursion XOR_ebx_eax_into_eax TEST JUMP_EQ %END_WHILE_collect_arguments_0 - # THEN_while_collect_arguments_0 - # Defining local type_size +PUSH_edi # Prevent overwriting in recursion +PUSH_ebp # Protect the old base pointer +COPY_esp_to_edi # Copy new base pointer +COPY_edi_to_ebp CALL_IMMEDIATE %FUNCTION_type_name +POP_ebp # Restore old base pointer +POP_edi # Prevent overwrite PUSH_eax #type_size -# IF_collect_arguments_1 +# IF_collect_arguments_2 LOAD_IMMEDIATE_eax &GLOBAL_global_token LOAD_INTEGER # looking up offset @@ -14211,21 +12070,12 @@ CMP SETE MOVEZBL TEST -JUMP_EQ %ELSE_collect_arguments_1 -LOAD_IMMEDIATE_eax &GLOBAL_global_token -PUSH_eax #_common_recursion -LOAD_IMMEDIATE_eax &GLOBAL_global_token -LOAD_INTEGER -# looking up offset -# -> offset calculation -LOAD_IMMEDIATE_ebx %4 -ADD_ebx_to_eax -LOAD_INTEGER -POP_ebx # _common_recursion -STORE_INTEGER -JUMP %_END_IF_collect_arguments_1 -:ELSE_collect_arguments_1 -# IF_collect_arguments_2 +JUMP_EQ %ELSE_collect_arguments_2 + +#continue statement +JUMP %_END_IF_collect_arguments_2 +:ELSE_collect_arguments_2 +# IF_collect_arguments_3 LOAD_IMMEDIATE_eax &GLOBAL_global_token LOAD_INTEGER # looking up offset @@ -14245,8 +12095,11 @@ CMP SETNE MOVEZBL TEST -JUMP_EQ %ELSE_collect_arguments_2 +JUMP_EQ %ELSE_collect_arguments_3 # Defining local a +PUSH_edi # Prevent overwriting in recursion +PUSH_ebp # Protect the old base pointer +COPY_esp_to_edi # Copy new base pointer LOAD_IMMEDIATE_eax &GLOBAL_global_token LOAD_INTEGER # looking up offset @@ -14255,10 +12108,10 @@ LOAD_IMMEDIATE_ebx %8 ADD_ebx_to_eax LOAD_INTEGER PUSH_eax #_process_expression1 -LOAD_EFFECTIVE_ADDRESS %4 +LOAD_BASE_ADDRESS_eax %-8 LOAD_INTEGER PUSH_eax #_process_expression2 -LOAD_EFFECTIVE_ADDRESS %16 +LOAD_IMMEDIATE_eax &GLOBAL_function LOAD_INTEGER # looking up offset # -> offset calculation @@ -14266,27 +12119,169 @@ LOAD_IMMEDIATE_ebx %16 ADD_ebx_to_eax LOAD_INTEGER PUSH_eax #_process_expression2 +COPY_edi_to_ebp CALL_IMMEDIATE %FUNCTION_sym_declare POP_ebx # _process_expression_locals POP_ebx # _process_expression_locals POP_ebx # _process_expression_locals +POP_ebp # Restore old base pointer +POP_edi # Prevent overwrite PUSH_eax #a -LOAD_EFFECTIVE_ADDRESS %12 +# IF_collect_arguments_4 +PUSH_edi # Prevent overwriting in recursion +PUSH_ebp # Protect the old base pointer +COPY_esp_to_edi # Copy new base pointer +LOAD_IMMEDIATE_eax &STRING_collect_arguments_5 +PUSH_eax #_process_expression1 +LOAD_IMMEDIATE_eax &GLOBAL_function +LOAD_INTEGER +# looking up offset +# -> offset calculation +LOAD_IMMEDIATE_ebx %8 +ADD_ebx_to_eax +LOAD_INTEGER +PUSH_eax #_process_expression2 +COPY_edi_to_ebp +CALL_IMMEDIATE %FUNCTION_match +POP_ebx # _process_expression_locals +POP_ebx # _process_expression_locals +POP_ebp # Restore old base pointer +POP_edi # Prevent overwrite +TEST +JUMP_EQ %ELSE_collect_arguments_4 +# IF_collect_arguments_6 +PUSH_edi # Prevent overwriting in recursion +PUSH_ebp # Protect the old base pointer +COPY_esp_to_edi # Copy new base pointer +LOAD_IMMEDIATE_eax &STRING_collect_arguments_7 +PUSH_eax #_process_expression1 +LOAD_BASE_ADDRESS_eax %-12 +LOAD_INTEGER +# looking up offset +# -> offset calculation +LOAD_IMMEDIATE_ebx %8 +ADD_ebx_to_eax +LOAD_INTEGER +PUSH_eax #_process_expression2 +COPY_edi_to_ebp +CALL_IMMEDIATE %FUNCTION_match +POP_ebx # _process_expression_locals +POP_ebx # _process_expression_locals +POP_ebp # Restore old base pointer +POP_edi # Prevent overwrite +TEST +JUMP_EQ %ELSE_collect_arguments_6 +LOAD_BASE_ADDRESS_eax %-12 LOAD_INTEGER # looking up offset # -> offset calculation LOAD_IMMEDIATE_ebx %16 ADD_ebx_to_eax PUSH_eax #_common_recursion -LOAD_EFFECTIVE_ADDRESS %4 -LOAD_INTEGER +LOAD_IMMEDIATE_eax %4 POP_ebx # _common_recursion STORE_INTEGER -POP_ebx # _recursive_statement_locals -JUMP %_END_IF_collect_arguments_2 -:ELSE_collect_arguments_2 -:_END_IF_collect_arguments_2 -:_END_IF_collect_arguments_1 +JUMP %_END_IF_collect_arguments_6 +:ELSE_collect_arguments_6 +:_END_IF_collect_arguments_6 +# IF_collect_arguments_8 +PUSH_edi # Prevent overwriting in recursion +PUSH_ebp # Protect the old base pointer +COPY_esp_to_edi # Copy new base pointer +LOAD_IMMEDIATE_eax &STRING_collect_arguments_9 +PUSH_eax #_process_expression1 +LOAD_BASE_ADDRESS_eax %-12 +LOAD_INTEGER +# looking up offset +# -> offset calculation +LOAD_IMMEDIATE_ebx %8 +ADD_ebx_to_eax +LOAD_INTEGER +PUSH_eax #_process_expression2 +COPY_edi_to_ebp +CALL_IMMEDIATE %FUNCTION_match +POP_ebx # _process_expression_locals +POP_ebx # _process_expression_locals +POP_ebp # Restore old base pointer +POP_edi # Prevent overwrite +TEST +JUMP_EQ %ELSE_collect_arguments_8 +LOAD_BASE_ADDRESS_eax %-12 +LOAD_INTEGER +# looking up offset +# -> offset calculation +LOAD_IMMEDIATE_ebx %16 +ADD_ebx_to_eax +PUSH_eax #_common_recursion +LOAD_IMMEDIATE_eax %8 +POP_ebx # _common_recursion +STORE_INTEGER +JUMP %_END_IF_collect_arguments_8 +:ELSE_collect_arguments_8 +:_END_IF_collect_arguments_8 +JUMP %_END_IF_collect_arguments_4 +:ELSE_collect_arguments_4 +# IF_collect_arguments_10 +LOAD_IMMEDIATE_eax %0 +PUSH_eax #_common_recursion +LOAD_IMMEDIATE_eax &GLOBAL_function +LOAD_INTEGER +# looking up offset +# -> offset calculation +LOAD_IMMEDIATE_ebx %16 +ADD_ebx_to_eax +LOAD_INTEGER +POP_ebx # _common_recursion +CMP +SETE +MOVEZBL +TEST +JUMP_EQ %ELSE_collect_arguments_10 +LOAD_BASE_ADDRESS_eax %-12 +LOAD_INTEGER +# looking up offset +# -> offset calculation +LOAD_IMMEDIATE_ebx %16 +ADD_ebx_to_eax +PUSH_eax #_common_recursion +LOAD_IMMEDIATE_eax %0 +PUSH_eax #_common_recursion +LOAD_IMMEDIATE_eax %4 +POP_ebx # _common_recursion +SUBTRACT_eax_from_ebx_into_ebx +MOVE_ebx_to_eax +POP_ebx # _common_recursion +STORE_INTEGER +JUMP %_END_IF_collect_arguments_10 +:ELSE_collect_arguments_10 +LOAD_BASE_ADDRESS_eax %-12 +LOAD_INTEGER +# looking up offset +# -> offset calculation +LOAD_IMMEDIATE_ebx %16 +ADD_ebx_to_eax +PUSH_eax #_common_recursion +LOAD_IMMEDIATE_eax &GLOBAL_function +LOAD_INTEGER +# looking up offset +# -> offset calculation +LOAD_IMMEDIATE_ebx %16 +ADD_ebx_to_eax +LOAD_INTEGER +# looking up offset +# -> offset calculation +LOAD_IMMEDIATE_ebx %16 +ADD_ebx_to_eax +LOAD_INTEGER +PUSH_eax #_common_recursion +LOAD_IMMEDIATE_eax %4 +POP_ebx # _common_recursion +SUBTRACT_eax_from_ebx_into_ebx +MOVE_ebx_to_eax +POP_ebx # _common_recursion +STORE_INTEGER +:_END_IF_collect_arguments_10 +:_END_IF_collect_arguments_4 LOAD_IMMEDIATE_eax &GLOBAL_global_token PUSH_eax #_common_recursion LOAD_IMMEDIATE_eax &GLOBAL_global_token @@ -14295,7 +12290,23 @@ LOAD_INTEGER LOAD_INTEGER POP_ebx # _common_recursion STORE_INTEGER -# IF_collect_arguments_3 +LOAD_IMMEDIATE_eax &GLOBAL_function +LOAD_INTEGER +# looking up offset +# -> offset calculation +LOAD_IMMEDIATE_ebx %16 +ADD_ebx_to_eax +PUSH_eax #_common_recursion +LOAD_BASE_ADDRESS_eax %-12 +LOAD_INTEGER +POP_ebx # _common_recursion +STORE_INTEGER +POP_ebx # _recursive_statement_locals +JUMP %_END_IF_collect_arguments_3 +:ELSE_collect_arguments_3 +:_END_IF_collect_arguments_3 +:_END_IF_collect_arguments_2 +# IF_collect_arguments_11 LOAD_IMMEDIATE_eax &GLOBAL_global_token LOAD_INTEGER # looking up offset @@ -14315,7 +12326,7 @@ CMP SETE MOVEZBL TEST -JUMP_EQ %ELSE_collect_arguments_3 +JUMP_EQ %ELSE_collect_arguments_11 LOAD_IMMEDIATE_eax &GLOBAL_global_token PUSH_eax #_common_recursion LOAD_IMMEDIATE_eax &GLOBAL_global_token @@ -14324,14 +12335,12 @@ LOAD_INTEGER LOAD_INTEGER POP_ebx # _common_recursion STORE_INTEGER -JUMP %_END_IF_collect_arguments_3 -:ELSE_collect_arguments_3 -:_END_IF_collect_arguments_3 +JUMP %_END_IF_collect_arguments_11 +:ELSE_collect_arguments_11 +:_END_IF_collect_arguments_11 POP_ebx # _recursive_statement_locals JUMP %WHILE_collect_arguments_0 - :END_WHILE_collect_arguments_0 - LOAD_IMMEDIATE_eax &GLOBAL_global_token PUSH_eax #_common_recursion LOAD_IMMEDIATE_eax &GLOBAL_global_token @@ -14343,32 +12352,16 @@ STORE_INTEGER RETURN # Defining function declare_function :FUNCTION_declare_function -# Defining local essential -LOAD_IMMEDIATE_eax &GLOBAL_global_token -LOAD_INTEGER -# looking up offset -# -> offset calculation -LOAD_IMMEDIATE_ebx %4 -ADD_ebx_to_eax -LOAD_INTEGER -# looking up offset -# -> offset calculation -LOAD_IMMEDIATE_ebx %8 -ADD_ebx_to_eax -LOAD_INTEGER -PUSH_eax #essential -LOAD_IMMEDIATE_eax &GLOBAL_current_function -PUSH_eax #_common_recursion -LOAD_EFFECTIVE_ADDRESS %4 -LOAD_INTEGER -POP_ebx # _common_recursion -STORE_INTEGER LOAD_IMMEDIATE_eax &GLOBAL_current_count PUSH_eax #_common_recursion LOAD_IMMEDIATE_eax %0 POP_ebx # _common_recursion STORE_INTEGER -# Defining local func +LOAD_IMMEDIATE_eax &GLOBAL_function +PUSH_eax #_common_recursion +PUSH_edi # Prevent overwriting in recursion +PUSH_ebp # Protect the old base pointer +COPY_esp_to_edi # Copy new base pointer LOAD_IMMEDIATE_eax &GLOBAL_global_token LOAD_INTEGER # looking up offset @@ -14382,48 +12375,34 @@ LOAD_IMMEDIATE_ebx %8 ADD_ebx_to_eax LOAD_INTEGER PUSH_eax #_process_expression1 -LOAD_IMMEDIATE_eax %1 -PUSH_eax #_process_expression1 -LOAD_IMMEDIATE_eax %28 -PUSH_eax #_process_expression2 -CALL_IMMEDIATE %FUNCTION_calloc -POP_ebx # _process_expression_locals -POP_ebx # _process_expression_locals +LOAD_IMMEDIATE_eax %0 PUSH_eax #_process_expression2 LOAD_IMMEDIATE_eax &GLOBAL_global_function_list LOAD_INTEGER PUSH_eax #_process_expression2 +COPY_edi_to_ebp CALL_IMMEDIATE %FUNCTION_sym_declare POP_ebx # _process_expression_locals POP_ebx # _process_expression_locals POP_ebx # _process_expression_locals -PUSH_eax #func -LOAD_EFFECTIVE_ADDRESS %0 - -LOAD_INTEGER -# looking up offset -# -> offset calculation -LOAD_IMMEDIATE_ebx %12 -ADD_ebx_to_eax -PUSH_eax #_common_recursion -LOAD_EFFECTIVE_ADDRESS %16 -LOAD_INTEGER +POP_ebp # Restore old base pointer +POP_edi # Prevent overwrite POP_ebx # _common_recursion STORE_INTEGER -LOAD_EFFECTIVE_ADDRESS %0 - -LOAD_INTEGER -PUSH_eax #_process_expression1 -CALL_IMMEDIATE %FUNCTION_collect_arguments -POP_ebx # _process_expression_locals LOAD_IMMEDIATE_eax &GLOBAL_global_function_list PUSH_eax #_common_recursion -LOAD_EFFECTIVE_ADDRESS %4 +LOAD_IMMEDIATE_eax &GLOBAL_function LOAD_INTEGER POP_ebx # _common_recursion STORE_INTEGER +PUSH_edi # Prevent overwriting in recursion +PUSH_ebp # Protect the old base pointer +COPY_esp_to_edi # Copy new base pointer +COPY_edi_to_ebp +CALL_IMMEDIATE %FUNCTION_collect_arguments +POP_ebp # Restore old base pointer +POP_edi # Prevent overwrite # IF_declare_function_0 - LOAD_IMMEDIATE_eax &GLOBAL_global_token LOAD_INTEGER # looking up offset @@ -14444,7 +12423,6 @@ SETE MOVEZBL TEST JUMP_EQ %ELSE_declare_function_0 - LOAD_IMMEDIATE_eax &GLOBAL_global_token PUSH_eax #_common_recursion LOAD_IMMEDIATE_eax &GLOBAL_global_token @@ -14454,78 +12432,86 @@ LOAD_INTEGER POP_ebx # _common_recursion STORE_INTEGER JUMP %_END_IF_declare_function_0 - :ELSE_declare_function_0 - -LOAD_EFFECTIVE_ADDRESS %16 -PUSH_eax #_common_recursion -LOAD_IMMEDIATE_eax &STRING_282 +PUSH_edi # Prevent overwriting in recursion +PUSH_ebp # Protect the old base pointer +COPY_esp_to_edi # Copy new base pointer +LOAD_IMMEDIATE_eax &STRING_declare_function_1 PUSH_eax #_process_expression1 -LOAD_EFFECTIVE_ADDRESS %12 +COPY_edi_to_ebp +CALL_IMMEDIATE %FUNCTION_emit_out +POP_ebx # _process_expression_locals +POP_ebp # Restore old base pointer +POP_edi # Prevent overwrite +PUSH_edi # Prevent overwriting in recursion +PUSH_ebp # Protect the old base pointer +COPY_esp_to_edi # Copy new base pointer +LOAD_IMMEDIATE_eax &GLOBAL_function +LOAD_INTEGER +# looking up offset +# -> offset calculation +LOAD_IMMEDIATE_ebx %8 +ADD_ebx_to_eax LOAD_INTEGER PUSH_eax #_process_expression1 -LOAD_IMMEDIATE_eax &STRING_283 -PUSH_eax #_process_expression2 -CALL_IMMEDIATE %FUNCTION_prepend_string -POP_ebx # _process_expression_locals -POP_ebx # _process_expression_locals -PUSH_eax #_process_expression2 -CALL_IMMEDIATE %FUNCTION_prepend_string -POP_ebx # _process_expression_locals +COPY_edi_to_ebp +CALL_IMMEDIATE %FUNCTION_emit_out POP_ebx # _process_expression_locals +POP_ebp # Restore old base pointer +POP_edi # Prevent overwrite +PUSH_edi # Prevent overwriting in recursion +PUSH_ebp # Protect the old base pointer +COPY_esp_to_edi # Copy new base pointer +LOAD_IMMEDIATE_eax &STRING_declare_function_2 PUSH_eax #_process_expression1 -LOAD_EFFECTIVE_ADDRESS %24 +COPY_edi_to_ebp +CALL_IMMEDIATE %FUNCTION_emit_out +POP_ebx # _process_expression_locals +POP_ebp # Restore old base pointer +POP_edi # Prevent overwrite +PUSH_edi # Prevent overwriting in recursion +PUSH_ebp # Protect the old base pointer +COPY_esp_to_edi # Copy new base pointer +LOAD_IMMEDIATE_eax &STRING_declare_function_3 +PUSH_eax #_process_expression1 +COPY_edi_to_ebp +CALL_IMMEDIATE %FUNCTION_emit_out +POP_ebx # _process_expression_locals +POP_ebp # Restore old base pointer +POP_edi # Prevent overwrite +PUSH_edi # Prevent overwriting in recursion +PUSH_ebp # Protect the old base pointer +COPY_esp_to_edi # Copy new base pointer +LOAD_IMMEDIATE_eax &GLOBAL_function LOAD_INTEGER -PUSH_eax #_process_expression2 -CALL_IMMEDIATE %FUNCTION_emit -POP_ebx # _process_expression_locals -POP_ebx # _process_expression_locals -POP_ebx # _common_recursion -STORE_INTEGER -LOAD_EFFECTIVE_ADDRESS %16 -PUSH_eax #_common_recursion -LOAD_IMMEDIATE_eax &STRING_284 -PUSH_eax #_process_expression1 -LOAD_EFFECTIVE_ADDRESS %12 +# looking up offset +# -> offset calculation +LOAD_IMMEDIATE_ebx %8 +ADD_ebx_to_eax LOAD_INTEGER PUSH_eax #_process_expression1 -LOAD_IMMEDIATE_eax &STRING_285 -PUSH_eax #_process_expression2 -CALL_IMMEDIATE %FUNCTION_prepend_string -POP_ebx # _process_expression_locals -POP_ebx # _process_expression_locals -PUSH_eax #_process_expression2 -CALL_IMMEDIATE %FUNCTION_prepend_string -POP_ebx # _process_expression_locals +COPY_edi_to_ebp +CALL_IMMEDIATE %FUNCTION_emit_out POP_ebx # _process_expression_locals +POP_ebp # Restore old base pointer +POP_edi # Prevent overwrite +PUSH_edi # Prevent overwriting in recursion +PUSH_ebp # Protect the old base pointer +COPY_esp_to_edi # Copy new base pointer +LOAD_IMMEDIATE_eax &STRING_declare_function_4 PUSH_eax #_process_expression1 -LOAD_EFFECTIVE_ADDRESS %24 -LOAD_INTEGER -PUSH_eax #_process_expression2 -CALL_IMMEDIATE %FUNCTION_emit +COPY_edi_to_ebp +CALL_IMMEDIATE %FUNCTION_emit_out POP_ebx # _process_expression_locals -POP_ebx # _process_expression_locals -POP_ebx # _common_recursion -STORE_INTEGER -LOAD_EFFECTIVE_ADDRESS %16 -PUSH_eax #_common_recursion -LOAD_EFFECTIVE_ADDRESS %20 -LOAD_INTEGER +POP_ebp # Restore old base pointer +POP_edi # Prevent overwrite +# IF_declare_function_5 +PUSH_edi # Prevent overwriting in recursion +PUSH_ebp # Protect the old base pointer +COPY_esp_to_edi # Copy new base pointer +LOAD_IMMEDIATE_eax &STRING_declare_function_6 PUSH_eax #_process_expression1 -LOAD_EFFECTIVE_ADDRESS %8 -LOAD_INTEGER -PUSH_eax #_process_expression2 -CALL_IMMEDIATE %FUNCTION_statement -POP_ebx # _process_expression_locals -POP_ebx # _process_expression_locals -POP_ebx # _common_recursion -STORE_INTEGER -# IF_declare_function_1 -LOAD_IMMEDIATE_eax %1 -PUSH_eax #_common_recursion -LOAD_IMMEDIATE_eax &STRING_286 -PUSH_eax #_process_expression1 -LOAD_EFFECTIVE_ADDRESS %24 +LOAD_IMMEDIATE_eax &GLOBAL_function LOAD_INTEGER # looking up offset # -> offset calculation @@ -14533,57 +12519,113 @@ LOAD_IMMEDIATE_ebx %8 ADD_ebx_to_eax LOAD_INTEGER PUSH_eax #_process_expression2 +COPY_edi_to_ebp CALL_IMMEDIATE %FUNCTION_match POP_ebx # _process_expression_locals POP_ebx # _process_expression_locals +POP_ebp # Restore old base pointer +POP_edi # Prevent overwrite +TEST +JUMP_EQ %ELSE_declare_function_5 +PUSH_edi # Prevent overwriting in recursion +PUSH_ebp # Protect the old base pointer +COPY_esp_to_edi # Copy new base pointer +LOAD_IMMEDIATE_eax &STRING_declare_function_7 +PUSH_eax #_process_expression1 +COPY_edi_to_ebp +CALL_IMMEDIATE %FUNCTION_emit_out +POP_ebx # _process_expression_locals +POP_ebp # Restore old base pointer +POP_edi # Prevent overwrite +JUMP %_END_IF_declare_function_5 +:ELSE_declare_function_5 +:_END_IF_declare_function_5 +PUSH_edi # Prevent overwriting in recursion +PUSH_ebp # Protect the old base pointer +COPY_esp_to_edi # Copy new base pointer +COPY_edi_to_ebp +CALL_IMMEDIATE %FUNCTION_statement +POP_ebp # Restore old base pointer +POP_edi # Prevent overwrite +# IF_declare_function_8 +LOAD_IMMEDIATE_eax %1 +PUSH_eax #_common_recursion +PUSH_edi # Prevent overwriting in recursion +PUSH_ebp # Protect the old base pointer +COPY_esp_to_edi # Copy new base pointer +LOAD_IMMEDIATE_eax &STRING_declare_function_9 +PUSH_eax #_process_expression1 +LOAD_IMMEDIATE_eax &GLOBAL_out +LOAD_INTEGER +# looking up offset +# -> offset calculation +LOAD_IMMEDIATE_ebx %8 +ADD_ebx_to_eax +LOAD_INTEGER +PUSH_eax #_process_expression2 +COPY_edi_to_ebp +CALL_IMMEDIATE %FUNCTION_match +POP_ebx # _process_expression_locals +POP_ebx # _process_expression_locals +POP_ebp # Restore old base pointer +POP_edi # Prevent overwrite POP_ebx # _common_recursion XOR_ebx_eax_into_eax TEST -JUMP_EQ %ELSE_declare_function_1 -LOAD_EFFECTIVE_ADDRESS %16 -PUSH_eax #_common_recursion -LOAD_IMMEDIATE_eax &STRING_287 +JUMP_EQ %ELSE_declare_function_8 +PUSH_edi # Prevent overwriting in recursion +PUSH_ebp # Protect the old base pointer +COPY_esp_to_edi # Copy new base pointer +LOAD_IMMEDIATE_eax &STRING_declare_function_10 PUSH_eax #_process_expression1 -LOAD_EFFECTIVE_ADDRESS %24 -LOAD_INTEGER -PUSH_eax #_process_expression2 -CALL_IMMEDIATE %FUNCTION_emit +COPY_edi_to_ebp +CALL_IMMEDIATE %FUNCTION_emit_out POP_ebx # _process_expression_locals -POP_ebx # _process_expression_locals -POP_ebx # _common_recursion -STORE_INTEGER -JUMP %_END_IF_declare_function_1 -:ELSE_declare_function_1 -:_END_IF_declare_function_1 +POP_ebp # Restore old base pointer +POP_edi # Prevent overwrite +JUMP %_END_IF_declare_function_8 +:ELSE_declare_function_8 +:_END_IF_declare_function_8 :_END_IF_declare_function_0 - -LOAD_EFFECTIVE_ADDRESS %16 -LOAD_INTEGER -POP_ebx # _return_result_locals -POP_ebx # _return_result_locals RETURN # Defining function program :FUNCTION_program +LOAD_IMMEDIATE_eax &GLOBAL_out +PUSH_eax #_common_recursion +LOAD_IMMEDIATE_eax %0 +POP_ebx # _common_recursion +STORE_INTEGER +LOAD_IMMEDIATE_eax &GLOBAL_function +PUSH_eax #_common_recursion +LOAD_IMMEDIATE_eax %0 +POP_ebx # _common_recursion +STORE_INTEGER # Defining local type_size PUSH_eax #type_size -:WHILE_program_0 - +:new_type #C goto label +# IF_program_0 LOAD_IMMEDIATE_eax %0 PUSH_eax #_common_recursion LOAD_IMMEDIATE_eax &GLOBAL_global_token LOAD_INTEGER POP_ebx # _common_recursion CMP -SETNE +SETE MOVEZBL TEST -JUMP_EQ %END_WHILE_program_0 - -# THEN_while_program_0 - -:new_type #C goto label +JUMP_EQ %ELSE_program_0 +LOAD_IMMEDIATE_eax &GLOBAL_out +LOAD_INTEGER +POP_ebx # _return_result_locals +RETURN +JUMP %_END_IF_program_0 +:ELSE_program_0 +:_END_IF_program_0 # IF_program_1 -LOAD_IMMEDIATE_eax &STRING_288 +PUSH_edi # Prevent overwriting in recursion +PUSH_ebp # Protect the old base pointer +COPY_esp_to_edi # Copy new base pointer +LOAD_IMMEDIATE_eax &STRING_program_2 PUSH_eax #_process_expression1 LOAD_IMMEDIATE_eax &GLOBAL_global_token LOAD_INTEGER @@ -14593,17 +12635,29 @@ LOAD_IMMEDIATE_ebx %8 ADD_ebx_to_eax LOAD_INTEGER PUSH_eax #_process_expression2 +COPY_edi_to_ebp CALL_IMMEDIATE %FUNCTION_match POP_ebx # _process_expression_locals POP_ebx # _process_expression_locals +POP_ebp # Restore old base pointer +POP_edi # Prevent overwrite TEST JUMP_EQ %ELSE_program_1 -LOAD_IMMEDIATE_eax &GLOBAL_global_constant_list +LOAD_IMMEDIATE_eax &GLOBAL_global_token PUSH_eax #_common_recursion LOAD_IMMEDIATE_eax &GLOBAL_global_token LOAD_INTEGER # looking up offset LOAD_INTEGER +POP_ebx # _common_recursion +STORE_INTEGER +LOAD_IMMEDIATE_eax &GLOBAL_global_constant_list +PUSH_eax #_common_recursion +PUSH_edi # Prevent overwriting in recursion +PUSH_ebp # Protect the old base pointer +COPY_esp_to_edi # Copy new base pointer +LOAD_IMMEDIATE_eax &GLOBAL_global_token +LOAD_INTEGER # looking up offset # -> offset calculation LOAD_IMMEDIATE_ebx %8 @@ -14615,10 +12669,13 @@ PUSH_eax #_process_expression2 LOAD_IMMEDIATE_eax &GLOBAL_global_constant_list LOAD_INTEGER PUSH_eax #_process_expression2 +COPY_edi_to_ebp CALL_IMMEDIATE %FUNCTION_sym_declare POP_ebx # _process_expression_locals POP_ebx # _process_expression_locals POP_ebx # _process_expression_locals +POP_ebp # Restore old base pointer +POP_edi # Prevent overwrite POP_ebx # _common_recursion STORE_INTEGER LOAD_IMMEDIATE_eax &GLOBAL_global_constant_list @@ -14632,8 +12689,6 @@ LOAD_IMMEDIATE_eax &GLOBAL_global_token LOAD_INTEGER # looking up offset LOAD_INTEGER -# looking up offset -LOAD_INTEGER POP_ebx # _common_recursion STORE_INTEGER LOAD_IMMEDIATE_eax &GLOBAL_global_token @@ -14644,93 +12699,117 @@ LOAD_INTEGER LOAD_INTEGER # looking up offset LOAD_INTEGER -# looking up offset -LOAD_INTEGER POP_ebx # _common_recursion STORE_INTEGER JUMP %_END_IF_program_1 :ELSE_program_1 -LOAD_EFFECTIVE_ADDRESS %0 - +LOAD_BASE_ADDRESS_eax %-8 PUSH_eax #_common_recursion +PUSH_edi # Prevent overwriting in recursion +PUSH_ebp # Protect the old base pointer +COPY_esp_to_edi # Copy new base pointer +COPY_edi_to_ebp CALL_IMMEDIATE %FUNCTION_type_name -POP_ebx # _common_recursion -STORE_INTEGER -# IF_program_2 -LOAD_IMMEDIATE_eax %0 -PUSH_eax #_common_recursion -LOAD_EFFECTIVE_ADDRESS %4 -LOAD_INTEGER -POP_ebx # _common_recursion -CMP -SETE -MOVEZBL -TEST -JUMP_EQ %ELSE_program_2 -JUMP %new_type -JUMP %_END_IF_program_2 -:ELSE_program_2 -:_END_IF_program_2 -LOAD_IMMEDIATE_eax &GLOBAL_global_token -PUSH_eax #_common_recursion -LOAD_IMMEDIATE_eax &GLOBAL_global_token -LOAD_INTEGER -# looking up offset -LOAD_INTEGER +POP_ebp # Restore old base pointer +POP_edi # Prevent overwrite POP_ebx # _common_recursion STORE_INTEGER # IF_program_3 -LOAD_IMMEDIATE_eax &GLOBAL_global_token -LOAD_INTEGER -# looking up offset -# -> offset calculation -LOAD_IMMEDIATE_ebx %8 -ADD_ebx_to_eax -LOAD_INTEGER -PUSH_eax #_common_recursion LOAD_IMMEDIATE_eax %0 -POP_ebx # _common_recursion -ADD_ebx_to_eax -LOAD_BYTE PUSH_eax #_common_recursion -LOAD_IMMEDIATE_eax %59 +LOAD_BASE_ADDRESS_eax %-8 +LOAD_INTEGER POP_ebx # _common_recursion CMP SETE MOVEZBL TEST JUMP_EQ %ELSE_program_3 +JUMP %new_type +JUMP %_END_IF_program_3 +:ELSE_program_3 +:_END_IF_program_3 LOAD_IMMEDIATE_eax &GLOBAL_global_symbol_list PUSH_eax #_common_recursion +PUSH_edi # Prevent overwriting in recursion +PUSH_ebp # Protect the old base pointer +COPY_esp_to_edi # Copy new base pointer LOAD_IMMEDIATE_eax &GLOBAL_global_token LOAD_INTEGER # looking up offset # -> offset calculation -LOAD_IMMEDIATE_ebx %4 -ADD_ebx_to_eax -LOAD_INTEGER -# looking up offset -# -> offset calculation LOAD_IMMEDIATE_ebx %8 ADD_ebx_to_eax LOAD_INTEGER PUSH_eax #_process_expression1 -LOAD_EFFECTIVE_ADDRESS %8 +LOAD_BASE_ADDRESS_eax %-8 LOAD_INTEGER PUSH_eax #_process_expression2 LOAD_IMMEDIATE_eax &GLOBAL_global_symbol_list LOAD_INTEGER PUSH_eax #_process_expression2 +COPY_edi_to_ebp CALL_IMMEDIATE %FUNCTION_sym_declare POP_ebx # _process_expression_locals POP_ebx # _process_expression_locals POP_ebx # _process_expression_locals +POP_ebp # Restore old base pointer +POP_edi # Prevent overwrite +POP_ebx # _common_recursion +STORE_INTEGER +LOAD_IMMEDIATE_eax &GLOBAL_global_token +PUSH_eax #_common_recursion +LOAD_IMMEDIATE_eax &GLOBAL_global_token +LOAD_INTEGER +# looking up offset +LOAD_INTEGER +POP_ebx # _common_recursion +STORE_INTEGER +# IF_program_4 +PUSH_edi # Prevent overwriting in recursion +PUSH_ebp # Protect the old base pointer +COPY_esp_to_edi # Copy new base pointer +LOAD_IMMEDIATE_eax &STRING_program_5 +PUSH_eax #_process_expression1 +LOAD_IMMEDIATE_eax &GLOBAL_global_token +LOAD_INTEGER +# looking up offset +# -> offset calculation +LOAD_IMMEDIATE_ebx %8 +ADD_ebx_to_eax +LOAD_INTEGER +PUSH_eax #_process_expression2 +COPY_edi_to_ebp +CALL_IMMEDIATE %FUNCTION_match +POP_ebx # _process_expression_locals +POP_ebx # _process_expression_locals +POP_ebp # Restore old base pointer +POP_edi # Prevent overwrite +TEST +JUMP_EQ %ELSE_program_4 +LOAD_IMMEDIATE_eax &GLOBAL_globals_list +PUSH_eax #_common_recursion +PUSH_edi # Prevent overwriting in recursion +PUSH_ebp # Protect the old base pointer +COPY_esp_to_edi # Copy new base pointer +LOAD_IMMEDIATE_eax &STRING_program_6 +PUSH_eax #_process_expression1 +LOAD_IMMEDIATE_eax &GLOBAL_globals_list +LOAD_INTEGER +PUSH_eax #_process_expression2 +COPY_edi_to_ebp +CALL_IMMEDIATE %FUNCTION_emit +POP_ebx # _process_expression_locals +POP_ebx # _process_expression_locals +POP_ebp # Restore old base pointer +POP_edi # Prevent overwrite POP_ebx # _common_recursion STORE_INTEGER LOAD_IMMEDIATE_eax &GLOBAL_globals_list PUSH_eax #_common_recursion -LOAD_IMMEDIATE_eax &STRING_289 -PUSH_eax #_process_expression1 +PUSH_edi # Prevent overwriting in recursion +PUSH_ebp # Protect the old base pointer +COPY_esp_to_edi # Copy new base pointer LOAD_IMMEDIATE_eax &GLOBAL_global_token LOAD_INTEGER # looking up offset @@ -14744,34 +12823,33 @@ LOAD_IMMEDIATE_ebx %8 ADD_ebx_to_eax LOAD_INTEGER PUSH_eax #_process_expression1 -LOAD_IMMEDIATE_eax &STRING_290 -PUSH_eax #_process_expression2 -CALL_IMMEDIATE %FUNCTION_prepend_string -POP_ebx # _process_expression_locals -POP_ebx # _process_expression_locals -PUSH_eax #_process_expression2 -CALL_IMMEDIATE %FUNCTION_prepend_string -POP_ebx # _process_expression_locals -POP_ebx # _process_expression_locals -PUSH_eax #_process_expression1 LOAD_IMMEDIATE_eax &GLOBAL_globals_list LOAD_INTEGER PUSH_eax #_process_expression2 +COPY_edi_to_ebp CALL_IMMEDIATE %FUNCTION_emit POP_ebx # _process_expression_locals POP_ebx # _process_expression_locals +POP_ebp # Restore old base pointer +POP_edi # Prevent overwrite POP_ebx # _common_recursion STORE_INTEGER LOAD_IMMEDIATE_eax &GLOBAL_globals_list PUSH_eax #_common_recursion -LOAD_IMMEDIATE_eax &STRING_291 +PUSH_edi # Prevent overwriting in recursion +PUSH_ebp # Protect the old base pointer +COPY_esp_to_edi # Copy new base pointer +LOAD_IMMEDIATE_eax &STRING_program_7 PUSH_eax #_process_expression1 LOAD_IMMEDIATE_eax &GLOBAL_globals_list LOAD_INTEGER PUSH_eax #_process_expression2 +COPY_edi_to_ebp CALL_IMMEDIATE %FUNCTION_emit POP_ebx # _process_expression_locals POP_ebx # _process_expression_locals +POP_ebp # Restore old base pointer +POP_edi # Prevent overwrite POP_ebx # _common_recursion STORE_INTEGER LOAD_IMMEDIATE_eax &GLOBAL_global_token @@ -14782,9 +12860,138 @@ LOAD_INTEGER LOAD_INTEGER POP_ebx # _common_recursion STORE_INTEGER -JUMP %_END_IF_program_3 -:ELSE_program_3 -# IF_program_4 +JUMP %_END_IF_program_4 +:ELSE_program_4 +# IF_program_8 +PUSH_edi # Prevent overwriting in recursion +PUSH_ebp # Protect the old base pointer +COPY_esp_to_edi # Copy new base pointer +LOAD_IMMEDIATE_eax &STRING_program_9 +PUSH_eax #_process_expression1 +LOAD_IMMEDIATE_eax &GLOBAL_global_token +LOAD_INTEGER +# looking up offset +# -> offset calculation +LOAD_IMMEDIATE_ebx %8 +ADD_ebx_to_eax +LOAD_INTEGER +PUSH_eax #_process_expression2 +COPY_edi_to_ebp +CALL_IMMEDIATE %FUNCTION_match +POP_ebx # _process_expression_locals +POP_ebx # _process_expression_locals +POP_ebp # Restore old base pointer +POP_edi # Prevent overwrite +TEST +JUMP_EQ %ELSE_program_8 +PUSH_edi # Prevent overwriting in recursion +PUSH_ebp # Protect the old base pointer +COPY_esp_to_edi # Copy new base pointer +COPY_edi_to_ebp +CALL_IMMEDIATE %FUNCTION_declare_function +POP_ebp # Restore old base pointer +POP_edi # Prevent overwrite +JUMP %_END_IF_program_8 +:ELSE_program_8 +# IF_program_10 +PUSH_edi # Prevent overwriting in recursion +PUSH_ebp # Protect the old base pointer +COPY_esp_to_edi # Copy new base pointer +LOAD_IMMEDIATE_eax &STRING_program_11 +PUSH_eax #_process_expression1 +LOAD_IMMEDIATE_eax &GLOBAL_global_token +LOAD_INTEGER +# looking up offset +# -> offset calculation +LOAD_IMMEDIATE_ebx %8 +ADD_ebx_to_eax +LOAD_INTEGER +PUSH_eax #_process_expression2 +COPY_edi_to_ebp +CALL_IMMEDIATE %FUNCTION_match +POP_ebx # _process_expression_locals +POP_ebx # _process_expression_locals +POP_ebp # Restore old base pointer +POP_edi # Prevent overwrite +TEST +JUMP_EQ %ELSE_program_10 +LOAD_IMMEDIATE_eax &GLOBAL_globals_list +PUSH_eax #_common_recursion +PUSH_edi # Prevent overwriting in recursion +PUSH_ebp # Protect the old base pointer +COPY_esp_to_edi # Copy new base pointer +LOAD_IMMEDIATE_eax &STRING_program_12 +PUSH_eax #_process_expression1 +LOAD_IMMEDIATE_eax &GLOBAL_globals_list +LOAD_INTEGER +PUSH_eax #_process_expression2 +COPY_edi_to_ebp +CALL_IMMEDIATE %FUNCTION_emit +POP_ebx # _process_expression_locals +POP_ebx # _process_expression_locals +POP_ebp # Restore old base pointer +POP_edi # Prevent overwrite +POP_ebx # _common_recursion +STORE_INTEGER +LOAD_IMMEDIATE_eax &GLOBAL_globals_list +PUSH_eax #_common_recursion +PUSH_edi # Prevent overwriting in recursion +PUSH_ebp # Protect the old base pointer +COPY_esp_to_edi # Copy new base pointer +LOAD_IMMEDIATE_eax &GLOBAL_global_token +LOAD_INTEGER +# looking up offset +# -> offset calculation +LOAD_IMMEDIATE_ebx %4 +ADD_ebx_to_eax +LOAD_INTEGER +# looking up offset +# -> offset calculation +LOAD_IMMEDIATE_ebx %8 +ADD_ebx_to_eax +LOAD_INTEGER +PUSH_eax #_process_expression1 +LOAD_IMMEDIATE_eax &GLOBAL_globals_list +LOAD_INTEGER +PUSH_eax #_process_expression2 +COPY_edi_to_ebp +CALL_IMMEDIATE %FUNCTION_emit +POP_ebx # _process_expression_locals +POP_ebx # _process_expression_locals +POP_ebp # Restore old base pointer +POP_edi # Prevent overwrite +POP_ebx # _common_recursion +STORE_INTEGER +LOAD_IMMEDIATE_eax &GLOBAL_globals_list +PUSH_eax #_common_recursion +PUSH_edi # Prevent overwriting in recursion +PUSH_ebp # Protect the old base pointer +COPY_esp_to_edi # Copy new base pointer +LOAD_IMMEDIATE_eax &STRING_program_13 +PUSH_eax #_process_expression1 +LOAD_IMMEDIATE_eax &GLOBAL_globals_list +LOAD_INTEGER +PUSH_eax #_process_expression2 +COPY_edi_to_ebp +CALL_IMMEDIATE %FUNCTION_emit +POP_ebx # _process_expression_locals +POP_ebx # _process_expression_locals +POP_ebp # Restore old base pointer +POP_edi # Prevent overwrite +POP_ebx # _common_recursion +STORE_INTEGER +LOAD_IMMEDIATE_eax &GLOBAL_global_token +PUSH_eax #_common_recursion +LOAD_IMMEDIATE_eax &GLOBAL_global_token +LOAD_INTEGER +# looking up offset +LOAD_INTEGER +POP_ebx # _common_recursion +STORE_INTEGER +# IF_program_14 +PUSH_edi # Prevent overwriting in recursion +PUSH_ebp # Protect the old base pointer +COPY_esp_to_edi # Copy new base pointer LOAD_IMMEDIATE_eax &GLOBAL_global_token LOAD_INTEGER # looking up offset @@ -14797,36 +13004,151 @@ LOAD_IMMEDIATE_eax %0 POP_ebx # _common_recursion ADD_ebx_to_eax LOAD_BYTE +PUSH_eax #_process_expression1 +LOAD_IMMEDIATE_eax &STRING_program_15 +PUSH_eax #_process_expression2 +COPY_edi_to_ebp +CALL_IMMEDIATE %FUNCTION_in_set +POP_ebx # _process_expression_locals +POP_ebx # _process_expression_locals +POP_ebp # Restore old base pointer +POP_edi # Prevent overwrite +TEST +JUMP_EQ %ELSE_program_14 +LOAD_IMMEDIATE_eax &GLOBAL_globals_list PUSH_eax #_common_recursion -LOAD_IMMEDIATE_eax %40 +PUSH_edi # Prevent overwriting in recursion +PUSH_ebp # Protect the old base pointer +COPY_esp_to_edi # Copy new base pointer +LOAD_IMMEDIATE_eax &STRING_program_16 +PUSH_eax #_process_expression1 +LOAD_IMMEDIATE_eax &GLOBAL_globals_list +LOAD_INTEGER +PUSH_eax #_process_expression2 +COPY_edi_to_ebp +CALL_IMMEDIATE %FUNCTION_emit +POP_ebx # _process_expression_locals +POP_ebx # _process_expression_locals +POP_ebp # Restore old base pointer +POP_edi # Prevent overwrite +POP_ebx # _common_recursion +STORE_INTEGER +LOAD_IMMEDIATE_eax &GLOBAL_globals_list +PUSH_eax #_common_recursion +PUSH_edi # Prevent overwriting in recursion +PUSH_ebp # Protect the old base pointer +COPY_esp_to_edi # Copy new base pointer +LOAD_IMMEDIATE_eax &GLOBAL_global_token +LOAD_INTEGER +# looking up offset +# -> offset calculation +LOAD_IMMEDIATE_ebx %8 +ADD_ebx_to_eax +LOAD_INTEGER +PUSH_eax #_process_expression1 +LOAD_IMMEDIATE_eax &GLOBAL_globals_list +LOAD_INTEGER +PUSH_eax #_process_expression2 +COPY_edi_to_ebp +CALL_IMMEDIATE %FUNCTION_emit +POP_ebx # _process_expression_locals +POP_ebx # _process_expression_locals +POP_ebp # Restore old base pointer +POP_edi # Prevent overwrite +POP_ebx # _common_recursion +STORE_INTEGER +LOAD_IMMEDIATE_eax &GLOBAL_globals_list +PUSH_eax #_common_recursion +PUSH_edi # Prevent overwriting in recursion +PUSH_ebp # Protect the old base pointer +COPY_esp_to_edi # Copy new base pointer +LOAD_IMMEDIATE_eax &STRING_program_17 +PUSH_eax #_process_expression1 +LOAD_IMMEDIATE_eax &GLOBAL_globals_list +LOAD_INTEGER +PUSH_eax #_process_expression2 +COPY_edi_to_ebp +CALL_IMMEDIATE %FUNCTION_emit +POP_ebx # _process_expression_locals +POP_ebx # _process_expression_locals +POP_ebp # Restore old base pointer +POP_edi # Prevent overwrite +POP_ebx # _common_recursion +STORE_INTEGER +JUMP %_END_IF_program_14 +:ELSE_program_14 +# IF_program_18 +LOAD_IMMEDIATE_eax %34 +PUSH_eax #_common_recursion +LOAD_IMMEDIATE_eax &GLOBAL_global_token +LOAD_INTEGER +# looking up offset +# -> offset calculation +LOAD_IMMEDIATE_ebx %8 +ADD_ebx_to_eax +LOAD_INTEGER +PUSH_eax #_common_recursion +LOAD_IMMEDIATE_eax %0 +POP_ebx # _common_recursion +ADD_ebx_to_eax +LOAD_BYTE POP_ebx # _common_recursion CMP SETE MOVEZBL TEST -JUMP_EQ %ELSE_program_4 -LOAD_EFFECTIVE_ADDRESS %8 +JUMP_EQ %ELSE_program_18 +LOAD_IMMEDIATE_eax &GLOBAL_globals_list PUSH_eax #_common_recursion -LOAD_EFFECTIVE_ADDRESS %12 +PUSH_edi # Prevent overwriting in recursion +PUSH_ebp # Protect the old base pointer +COPY_esp_to_edi # Copy new base pointer +PUSH_edi # Prevent overwriting in recursion +PUSH_ebp # Protect the old base pointer +COPY_esp_to_edi # Copy new base pointer +LOAD_IMMEDIATE_eax &GLOBAL_global_token +LOAD_INTEGER +# looking up offset +# -> offset calculation +LOAD_IMMEDIATE_ebx %8 +ADD_ebx_to_eax LOAD_INTEGER PUSH_eax #_process_expression1 -LOAD_EFFECTIVE_ADDRESS %8 +COPY_edi_to_ebp +CALL_IMMEDIATE %FUNCTION_parse_string +POP_ebx # _process_expression_locals +POP_ebp # Restore old base pointer +POP_edi # Prevent overwrite +PUSH_eax #_process_expression1 +LOAD_IMMEDIATE_eax &GLOBAL_globals_list LOAD_INTEGER PUSH_eax #_process_expression2 -CALL_IMMEDIATE %FUNCTION_declare_function +COPY_edi_to_ebp +CALL_IMMEDIATE %FUNCTION_emit POP_ebx # _process_expression_locals POP_ebx # _process_expression_locals +POP_ebp # Restore old base pointer +POP_edi # Prevent overwrite POP_ebx # _common_recursion STORE_INTEGER -JUMP %_END_IF_program_4 -:ELSE_program_4 -LOAD_IMMEDIATE_eax &STRING_292 +JUMP %_END_IF_program_18 +:ELSE_program_18 +PUSH_edi # Prevent overwriting in recursion +PUSH_ebp # Protect the old base pointer +COPY_esp_to_edi # Copy new base pointer +LOAD_IMMEDIATE_eax &STRING_program_19 PUSH_eax #_process_expression1 LOAD_IMMEDIATE_eax %2 PUSH_eax #_process_expression2 +COPY_edi_to_ebp CALL_IMMEDIATE %FUNCTION_file_print POP_ebx # _process_expression_locals POP_ebx # _process_expression_locals +POP_ebp # Restore old base pointer +POP_edi # Prevent overwrite +PUSH_edi # Prevent overwriting in recursion +PUSH_ebp # Protect the old base pointer +COPY_esp_to_edi # Copy new base pointer LOAD_IMMEDIATE_eax &GLOBAL_global_token LOAD_INTEGER # looking up offset @@ -14837,39 +13159,142 @@ LOAD_INTEGER PUSH_eax #_process_expression1 LOAD_IMMEDIATE_eax %2 PUSH_eax #_process_expression2 +COPY_edi_to_ebp CALL_IMMEDIATE %FUNCTION_file_print POP_ebx # _process_expression_locals POP_ebx # _process_expression_locals -LOAD_IMMEDIATE_eax &STRING_293 +POP_ebp # Restore old base pointer +POP_edi # Prevent overwrite +PUSH_edi # Prevent overwriting in recursion +PUSH_ebp # Protect the old base pointer +COPY_esp_to_edi # Copy new base pointer +LOAD_IMMEDIATE_eax &STRING_program_20 PUSH_eax #_process_expression1 LOAD_IMMEDIATE_eax %2 PUSH_eax #_process_expression2 +COPY_edi_to_ebp CALL_IMMEDIATE %FUNCTION_file_print POP_ebx # _process_expression_locals POP_ebx # _process_expression_locals +POP_ebp # Restore old base pointer +POP_edi # Prevent overwrite +PUSH_edi # Prevent overwriting in recursion +PUSH_ebp # Protect the old base pointer +COPY_esp_to_edi # Copy new base pointer +COPY_edi_to_ebp CALL_IMMEDIATE %FUNCTION_line_error +POP_ebp # Restore old base pointer +POP_edi # Prevent overwrite +PUSH_edi # Prevent overwriting in recursion +PUSH_ebp # Protect the old base pointer +COPY_esp_to_edi # Copy new base pointer LOAD_IMMEDIATE_eax %1 PUSH_eax #_process_expression1 +COPY_edi_to_ebp CALL_IMMEDIATE %FUNCTION_exit POP_ebx # _process_expression_locals -:_END_IF_program_4 -:_END_IF_program_3 -:_END_IF_program_1 -JUMP %WHILE_program_0 - -:END_WHILE_program_0 - -LOAD_EFFECTIVE_ADDRESS %8 +POP_ebp # Restore old base pointer +POP_edi # Prevent overwrite +:_END_IF_program_18 +:_END_IF_program_14 +LOAD_IMMEDIATE_eax &GLOBAL_global_token +PUSH_eax #_common_recursion +LOAD_IMMEDIATE_eax &GLOBAL_global_token LOAD_INTEGER -POP_ebx # _return_result_locals +# looking up offset +LOAD_INTEGER +POP_ebx # _common_recursion +STORE_INTEGER +PUSH_edi # Prevent overwriting in recursion +PUSH_ebp # Protect the old base pointer +COPY_esp_to_edi # Copy new base pointer +LOAD_IMMEDIATE_eax &STRING_program_21 +PUSH_eax #_process_expression1 +LOAD_IMMEDIATE_eax &STRING_program_22 +PUSH_eax #_process_expression2 +COPY_edi_to_ebp +CALL_IMMEDIATE %FUNCTION_require_match +POP_ebx # _process_expression_locals +POP_ebx # _process_expression_locals +POP_ebp # Restore old base pointer +POP_edi # Prevent overwrite +JUMP %_END_IF_program_10 +:ELSE_program_10 +PUSH_edi # Prevent overwriting in recursion +PUSH_ebp # Protect the old base pointer +COPY_esp_to_edi # Copy new base pointer +LOAD_IMMEDIATE_eax &STRING_program_23 +PUSH_eax #_process_expression1 +LOAD_IMMEDIATE_eax %2 +PUSH_eax #_process_expression2 +COPY_edi_to_ebp +CALL_IMMEDIATE %FUNCTION_file_print +POP_ebx # _process_expression_locals +POP_ebx # _process_expression_locals +POP_ebp # Restore old base pointer +POP_edi # Prevent overwrite +PUSH_edi # Prevent overwriting in recursion +PUSH_ebp # Protect the old base pointer +COPY_esp_to_edi # Copy new base pointer +LOAD_IMMEDIATE_eax &GLOBAL_global_token +LOAD_INTEGER +# looking up offset +# -> offset calculation +LOAD_IMMEDIATE_ebx %8 +ADD_ebx_to_eax +LOAD_INTEGER +PUSH_eax #_process_expression1 +LOAD_IMMEDIATE_eax %2 +PUSH_eax #_process_expression2 +COPY_edi_to_ebp +CALL_IMMEDIATE %FUNCTION_file_print +POP_ebx # _process_expression_locals +POP_ebx # _process_expression_locals +POP_ebp # Restore old base pointer +POP_edi # Prevent overwrite +PUSH_edi # Prevent overwriting in recursion +PUSH_ebp # Protect the old base pointer +COPY_esp_to_edi # Copy new base pointer +LOAD_IMMEDIATE_eax &STRING_program_24 +PUSH_eax #_process_expression1 +LOAD_IMMEDIATE_eax %2 +PUSH_eax #_process_expression2 +COPY_edi_to_ebp +CALL_IMMEDIATE %FUNCTION_file_print +POP_ebx # _process_expression_locals +POP_ebx # _process_expression_locals +POP_ebp # Restore old base pointer +POP_edi # Prevent overwrite +PUSH_edi # Prevent overwriting in recursion +PUSH_ebp # Protect the old base pointer +COPY_esp_to_edi # Copy new base pointer +COPY_edi_to_ebp +CALL_IMMEDIATE %FUNCTION_line_error +POP_ebp # Restore old base pointer +POP_edi # Prevent overwrite +PUSH_edi # Prevent overwriting in recursion +PUSH_ebp # Protect the old base pointer +COPY_esp_to_edi # Copy new base pointer +LOAD_IMMEDIATE_eax %1 +PUSH_eax #_process_expression1 +COPY_edi_to_ebp +CALL_IMMEDIATE %FUNCTION_exit +POP_ebx # _process_expression_locals +POP_ebp # Restore old base pointer +POP_edi # Prevent overwrite +:_END_IF_program_10 +:_END_IF_program_8 +:_END_IF_program_4 +:_END_IF_program_1 +JUMP %new_type +POP_ebx # _recursive_statement_locals RETURN # Defining function recursive_output :FUNCTION_recursive_output # IF_recursive_output_0 - LOAD_IMMEDIATE_eax %0 PUSH_eax #_common_recursion -LOAD_EFFECTIVE_ADDRESS %12 +LOAD_BASE_ADDRESS_eax %-4 LOAD_INTEGER POP_ebx # _common_recursion CMP @@ -14877,26 +13302,31 @@ SETE MOVEZBL TEST JUMP_EQ %ELSE_recursive_output_0 - RETURN JUMP %_END_IF_recursive_output_0 - :ELSE_recursive_output_0 - :_END_IF_recursive_output_0 - -LOAD_EFFECTIVE_ADDRESS %8 +PUSH_edi # Prevent overwriting in recursion +PUSH_ebp # Protect the old base pointer +COPY_esp_to_edi # Copy new base pointer +LOAD_BASE_ADDRESS_eax %-4 LOAD_INTEGER # looking up offset LOAD_INTEGER PUSH_eax #_process_expression1 -LOAD_EFFECTIVE_ADDRESS %8 +LOAD_BASE_ADDRESS_eax %-8 LOAD_INTEGER PUSH_eax #_process_expression2 +COPY_edi_to_ebp CALL_IMMEDIATE %FUNCTION_recursive_output POP_ebx # _process_expression_locals POP_ebx # _process_expression_locals -LOAD_EFFECTIVE_ADDRESS %8 +POP_ebp # Restore old base pointer +POP_edi # Prevent overwrite +PUSH_edi # Prevent overwriting in recursion +PUSH_ebp # Protect the old base pointer +COPY_esp_to_edi # Copy new base pointer +LOAD_BASE_ADDRESS_eax %-4 LOAD_INTEGER # looking up offset # -> offset calculation @@ -14904,15 +13334,36 @@ LOAD_IMMEDIATE_ebx %8 ADD_ebx_to_eax LOAD_INTEGER PUSH_eax #_process_expression1 -LOAD_EFFECTIVE_ADDRESS %8 +LOAD_BASE_ADDRESS_eax %-8 LOAD_INTEGER PUSH_eax #_process_expression2 +COPY_edi_to_ebp CALL_IMMEDIATE %FUNCTION_file_print POP_ebx # _process_expression_locals POP_ebx # _process_expression_locals +POP_ebp # Restore old base pointer +POP_edi # Prevent overwrite RETURN # Defining function main :FUNCTION_main +COPY_esp_to_ebp # Deal with special case +LOAD_IMMEDIATE_eax &GLOBAL_hold_string +PUSH_eax #_common_recursion +PUSH_edi # Prevent overwriting in recursion +PUSH_ebp # Protect the old base pointer +COPY_esp_to_edi # Copy new base pointer +LOAD_IMMEDIATE_eax %4096 +PUSH_eax #_process_expression1 +LOAD_IMMEDIATE_eax %1 +PUSH_eax #_process_expression2 +COPY_edi_to_ebp +CALL_IMMEDIATE %FUNCTION_calloc +POP_ebx # _process_expression_locals +POP_ebx # _process_expression_locals +POP_ebp # Restore old base pointer +POP_edi # Prevent overwrite +POP_ebx # _common_recursion +STORE_INTEGER # Defining local DEBUG LOAD_IMMEDIATE_eax %0 PUSH_eax #DEBUG @@ -14926,12 +13377,10 @@ PUSH_eax #destination_file LOAD_IMMEDIATE_eax %1 PUSH_eax #i :WHILE_main_0 - -LOAD_EFFECTIVE_ADDRESS %0 - +LOAD_BASE_ADDRESS_eax %-16 LOAD_INTEGER PUSH_eax #_common_recursion -LOAD_EFFECTIVE_ADDRESS %24 +LOAD_BASE_ADDRESS_eax %4 LOAD_INTEGER POP_ebx # _common_recursion CMP @@ -14939,15 +13388,13 @@ SETLE MOVEZBL TEST JUMP_EQ %END_WHILE_main_0 - # THEN_while_main_0 - # IF_main_1 LOAD_IMMEDIATE_eax %0 PUSH_eax #_common_recursion -LOAD_EFFECTIVE_ADDRESS %28 +LOAD_BASE_ADDRESS_eax %8 PUSH_eax #_common_recursion -LOAD_EFFECTIVE_ADDRESS %8 +LOAD_BASE_ADDRESS_eax %-16 LOAD_INTEGER POP_ebx # _common_recursion SAL_eax_Immediate8 !2 @@ -14959,10 +13406,9 @@ SETE MOVEZBL TEST JUMP_EQ %ELSE_main_1 -LOAD_EFFECTIVE_ADDRESS %0 - +LOAD_BASE_ADDRESS_eax %-16 PUSH_eax #_common_recursion -LOAD_EFFECTIVE_ADDRESS %4 +LOAD_BASE_ADDRESS_eax %-16 LOAD_INTEGER PUSH_eax #_common_recursion LOAD_IMMEDIATE_eax %1 @@ -14973,43 +13419,55 @@ STORE_INTEGER JUMP %_END_IF_main_1 :ELSE_main_1 # IF_main_2 -LOAD_EFFECTIVE_ADDRESS %24 +PUSH_edi # Prevent overwriting in recursion +PUSH_ebp # Protect the old base pointer +COPY_esp_to_edi # Copy new base pointer +LOAD_BASE_ADDRESS_eax %8 PUSH_eax #_common_recursion -LOAD_EFFECTIVE_ADDRESS %4 +LOAD_BASE_ADDRESS_eax %-16 LOAD_INTEGER POP_ebx # _common_recursion SAL_eax_Immediate8 !2 ADD_ebx_to_eax LOAD_INTEGER PUSH_eax #_process_expression1 -LOAD_IMMEDIATE_eax &STRING_294 +LOAD_IMMEDIATE_eax &STRING_main_3 PUSH_eax #_process_expression2 +COPY_edi_to_ebp CALL_IMMEDIATE %FUNCTION_match POP_ebx # _process_expression_locals POP_ebx # _process_expression_locals +POP_ebp # Restore old base pointer +POP_edi # Prevent overwrite PUSH_eax #_common_recursion -LOAD_EFFECTIVE_ADDRESS %28 +PUSH_edi # Prevent overwriting in recursion +PUSH_ebp # Protect the old base pointer +COPY_esp_to_edi # Copy new base pointer +LOAD_BASE_ADDRESS_eax %8 PUSH_eax #_common_recursion -LOAD_EFFECTIVE_ADDRESS %8 +LOAD_BASE_ADDRESS_eax %-16 LOAD_INTEGER POP_ebx # _common_recursion SAL_eax_Immediate8 !2 ADD_ebx_to_eax LOAD_INTEGER PUSH_eax #_process_expression1 -LOAD_IMMEDIATE_eax &STRING_295 +LOAD_IMMEDIATE_eax &STRING_main_4 PUSH_eax #_process_expression2 +COPY_edi_to_ebp CALL_IMMEDIATE %FUNCTION_match POP_ebx # _process_expression_locals POP_ebx # _process_expression_locals +POP_ebp # Restore old base pointer +POP_edi # Prevent overwrite POP_ebx # _common_recursion OR_eax_ebx TEST JUMP_EQ %ELSE_main_2 # Defining local name -LOAD_EFFECTIVE_ADDRESS %24 +LOAD_BASE_ADDRESS_eax %8 PUSH_eax #_common_recursion -LOAD_EFFECTIVE_ADDRESS %4 +LOAD_BASE_ADDRESS_eax %-16 LOAD_INTEGER PUSH_eax #_common_recursion LOAD_IMMEDIATE_eax %1 @@ -15020,79 +13478,114 @@ SAL_eax_Immediate8 !2 ADD_ebx_to_eax LOAD_INTEGER PUSH_eax #name -LOAD_EFFECTIVE_ADDRESS %12 +LOAD_BASE_ADDRESS_eax %-8 PUSH_eax #_common_recursion -LOAD_EFFECTIVE_ADDRESS %4 +PUSH_edi # Prevent overwriting in recursion +PUSH_ebp # Protect the old base pointer +COPY_esp_to_edi # Copy new base pointer +LOAD_BASE_ADDRESS_eax %-20 LOAD_INTEGER PUSH_eax #_process_expression1 -LOAD_IMMEDIATE_eax &STRING_296 +LOAD_IMMEDIATE_eax &STRING_main_5 PUSH_eax #_process_expression2 +COPY_edi_to_ebp CALL_IMMEDIATE %FUNCTION_fopen POP_ebx # _process_expression_locals POP_ebx # _process_expression_locals +POP_ebp # Restore old base pointer +POP_edi # Prevent overwrite POP_ebx # _common_recursion STORE_INTEGER -# IF_main_3 +# IF_main_6 LOAD_IMMEDIATE_eax %0 PUSH_eax #_common_recursion -LOAD_EFFECTIVE_ADDRESS %16 +LOAD_BASE_ADDRESS_eax %-8 LOAD_INTEGER POP_ebx # _common_recursion CMP SETE MOVEZBL TEST -JUMP_EQ %ELSE_main_3 -LOAD_IMMEDIATE_eax &STRING_297 +JUMP_EQ %ELSE_main_6 +PUSH_edi # Prevent overwriting in recursion +PUSH_ebp # Protect the old base pointer +COPY_esp_to_edi # Copy new base pointer +LOAD_IMMEDIATE_eax &STRING_main_7 PUSH_eax #_process_expression1 LOAD_IMMEDIATE_eax %2 PUSH_eax #_process_expression2 +COPY_edi_to_ebp CALL_IMMEDIATE %FUNCTION_file_print POP_ebx # _process_expression_locals POP_ebx # _process_expression_locals -LOAD_EFFECTIVE_ADDRESS %0 - +POP_ebp # Restore old base pointer +POP_edi # Prevent overwrite +PUSH_edi # Prevent overwriting in recursion +PUSH_ebp # Protect the old base pointer +COPY_esp_to_edi # Copy new base pointer +LOAD_BASE_ADDRESS_eax %-20 LOAD_INTEGER PUSH_eax #_process_expression1 LOAD_IMMEDIATE_eax %2 PUSH_eax #_process_expression2 +COPY_edi_to_ebp CALL_IMMEDIATE %FUNCTION_file_print POP_ebx # _process_expression_locals POP_ebx # _process_expression_locals -LOAD_IMMEDIATE_eax &STRING_298 +POP_ebp # Restore old base pointer +POP_edi # Prevent overwrite +PUSH_edi # Prevent overwriting in recursion +PUSH_ebp # Protect the old base pointer +COPY_esp_to_edi # Copy new base pointer +LOAD_IMMEDIATE_eax &STRING_main_8 PUSH_eax #_process_expression1 LOAD_IMMEDIATE_eax %2 PUSH_eax #_process_expression2 +COPY_edi_to_ebp CALL_IMMEDIATE %FUNCTION_file_print POP_ebx # _process_expression_locals POP_ebx # _process_expression_locals +POP_ebp # Restore old base pointer +POP_edi # Prevent overwrite +PUSH_edi # Prevent overwriting in recursion +PUSH_ebp # Protect the old base pointer +COPY_esp_to_edi # Copy new base pointer LOAD_IMMEDIATE_eax %1 PUSH_eax #_process_expression1 +COPY_edi_to_ebp CALL_IMMEDIATE %FUNCTION_exit POP_ebx # _process_expression_locals -JUMP %_END_IF_main_3 -:ELSE_main_3 -:_END_IF_main_3 +POP_ebp # Restore old base pointer +POP_edi # Prevent overwrite +JUMP %_END_IF_main_6 +:ELSE_main_6 +:_END_IF_main_6 LOAD_IMMEDIATE_eax &GLOBAL_global_token PUSH_eax #_common_recursion -LOAD_EFFECTIVE_ADDRESS %16 +PUSH_edi # Prevent overwriting in recursion +PUSH_ebp # Protect the old base pointer +COPY_esp_to_edi # Copy new base pointer +LOAD_BASE_ADDRESS_eax %-8 LOAD_INTEGER PUSH_eax #_process_expression1 LOAD_IMMEDIATE_eax &GLOBAL_global_token LOAD_INTEGER PUSH_eax #_process_expression2 -LOAD_EFFECTIVE_ADDRESS %12 +LOAD_BASE_ADDRESS_eax %-20 LOAD_INTEGER PUSH_eax #_process_expression2 +COPY_edi_to_ebp CALL_IMMEDIATE %FUNCTION_read_all_tokens POP_ebx # _process_expression_locals POP_ebx # _process_expression_locals POP_ebx # _process_expression_locals +POP_ebp # Restore old base pointer +POP_edi # Prevent overwrite POP_ebx # _common_recursion STORE_INTEGER -LOAD_EFFECTIVE_ADDRESS %4 +LOAD_BASE_ADDRESS_eax %-16 PUSH_eax #_common_recursion -LOAD_EFFECTIVE_ADDRESS %8 +LOAD_BASE_ADDRESS_eax %-16 LOAD_INTEGER PUSH_eax #_common_recursion LOAD_IMMEDIATE_eax %2 @@ -15103,45 +13596,60 @@ STORE_INTEGER POP_ebx # _recursive_statement_locals JUMP %_END_IF_main_2 :ELSE_main_2 -# IF_main_4 -LOAD_EFFECTIVE_ADDRESS %24 +# IF_main_9 +PUSH_edi # Prevent overwriting in recursion +PUSH_ebp # Protect the old base pointer +COPY_esp_to_edi # Copy new base pointer +LOAD_BASE_ADDRESS_eax %8 PUSH_eax #_common_recursion -LOAD_EFFECTIVE_ADDRESS %4 +LOAD_BASE_ADDRESS_eax %-16 LOAD_INTEGER POP_ebx # _common_recursion SAL_eax_Immediate8 !2 ADD_ebx_to_eax LOAD_INTEGER PUSH_eax #_process_expression1 -LOAD_IMMEDIATE_eax &STRING_299 +LOAD_IMMEDIATE_eax &STRING_main_10 PUSH_eax #_process_expression2 +COPY_edi_to_ebp CALL_IMMEDIATE %FUNCTION_match POP_ebx # _process_expression_locals POP_ebx # _process_expression_locals +POP_ebp # Restore old base pointer +POP_edi # Prevent overwrite PUSH_eax #_common_recursion -LOAD_EFFECTIVE_ADDRESS %28 +PUSH_edi # Prevent overwriting in recursion +PUSH_ebp # Protect the old base pointer +COPY_esp_to_edi # Copy new base pointer +LOAD_BASE_ADDRESS_eax %8 PUSH_eax #_common_recursion -LOAD_EFFECTIVE_ADDRESS %8 +LOAD_BASE_ADDRESS_eax %-16 LOAD_INTEGER POP_ebx # _common_recursion SAL_eax_Immediate8 !2 ADD_ebx_to_eax LOAD_INTEGER PUSH_eax #_process_expression1 -LOAD_IMMEDIATE_eax &STRING_300 +LOAD_IMMEDIATE_eax &STRING_main_11 PUSH_eax #_process_expression2 +COPY_edi_to_ebp CALL_IMMEDIATE %FUNCTION_match POP_ebx # _process_expression_locals POP_ebx # _process_expression_locals +POP_ebp # Restore old base pointer +POP_edi # Prevent overwrite POP_ebx # _common_recursion OR_eax_ebx TEST -JUMP_EQ %ELSE_main_4 -LOAD_EFFECTIVE_ADDRESS %4 +JUMP_EQ %ELSE_main_9 +LOAD_BASE_ADDRESS_eax %-12 PUSH_eax #_common_recursion -LOAD_EFFECTIVE_ADDRESS %28 +PUSH_edi # Prevent overwriting in recursion +PUSH_ebp # Protect the old base pointer +COPY_esp_to_edi # Copy new base pointer +LOAD_BASE_ADDRESS_eax %8 PUSH_eax #_common_recursion -LOAD_EFFECTIVE_ADDRESS %8 +LOAD_BASE_ADDRESS_eax %-16 LOAD_INTEGER PUSH_eax #_common_recursion LOAD_IMMEDIATE_eax %1 @@ -15152,34 +13660,46 @@ SAL_eax_Immediate8 !2 ADD_ebx_to_eax LOAD_INTEGER PUSH_eax #_process_expression1 -LOAD_IMMEDIATE_eax &STRING_301 +LOAD_IMMEDIATE_eax &STRING_main_12 PUSH_eax #_process_expression2 +COPY_edi_to_ebp CALL_IMMEDIATE %FUNCTION_fopen POP_ebx # _process_expression_locals POP_ebx # _process_expression_locals +POP_ebp # Restore old base pointer +POP_edi # Prevent overwrite POP_ebx # _common_recursion STORE_INTEGER -# IF_main_5 +# IF_main_13 LOAD_IMMEDIATE_eax %0 PUSH_eax #_common_recursion -LOAD_EFFECTIVE_ADDRESS %8 +LOAD_BASE_ADDRESS_eax %-12 LOAD_INTEGER POP_ebx # _common_recursion CMP SETE MOVEZBL TEST -JUMP_EQ %ELSE_main_5 -LOAD_IMMEDIATE_eax &STRING_302 +JUMP_EQ %ELSE_main_13 +PUSH_edi # Prevent overwriting in recursion +PUSH_ebp # Protect the old base pointer +COPY_esp_to_edi # Copy new base pointer +LOAD_IMMEDIATE_eax &STRING_main_14 PUSH_eax #_process_expression1 LOAD_IMMEDIATE_eax %2 PUSH_eax #_process_expression2 +COPY_edi_to_ebp CALL_IMMEDIATE %FUNCTION_file_print POP_ebx # _process_expression_locals POP_ebx # _process_expression_locals -LOAD_EFFECTIVE_ADDRESS %24 +POP_ebp # Restore old base pointer +POP_edi # Prevent overwrite +PUSH_edi # Prevent overwriting in recursion +PUSH_ebp # Protect the old base pointer +COPY_esp_to_edi # Copy new base pointer +LOAD_BASE_ADDRESS_eax %8 PUSH_eax #_common_recursion -LOAD_EFFECTIVE_ADDRESS %4 +LOAD_BASE_ADDRESS_eax %-16 LOAD_INTEGER PUSH_eax #_common_recursion LOAD_IMMEDIATE_eax %1 @@ -15192,27 +13712,41 @@ LOAD_INTEGER PUSH_eax #_process_expression1 LOAD_IMMEDIATE_eax %2 PUSH_eax #_process_expression2 +COPY_edi_to_ebp CALL_IMMEDIATE %FUNCTION_file_print POP_ebx # _process_expression_locals POP_ebx # _process_expression_locals -LOAD_IMMEDIATE_eax &STRING_303 +POP_ebp # Restore old base pointer +POP_edi # Prevent overwrite +PUSH_edi # Prevent overwriting in recursion +PUSH_ebp # Protect the old base pointer +COPY_esp_to_edi # Copy new base pointer +LOAD_IMMEDIATE_eax &STRING_main_15 PUSH_eax #_process_expression1 LOAD_IMMEDIATE_eax %2 PUSH_eax #_process_expression2 +COPY_edi_to_ebp CALL_IMMEDIATE %FUNCTION_file_print POP_ebx # _process_expression_locals POP_ebx # _process_expression_locals +POP_ebp # Restore old base pointer +POP_edi # Prevent overwrite +PUSH_edi # Prevent overwriting in recursion +PUSH_ebp # Protect the old base pointer +COPY_esp_to_edi # Copy new base pointer LOAD_IMMEDIATE_eax %1 PUSH_eax #_process_expression1 +COPY_edi_to_ebp CALL_IMMEDIATE %FUNCTION_exit POP_ebx # _process_expression_locals -JUMP %_END_IF_main_5 -:ELSE_main_5 -:_END_IF_main_5 -LOAD_EFFECTIVE_ADDRESS %0 - +POP_ebp # Restore old base pointer +POP_edi # Prevent overwrite +JUMP %_END_IF_main_13 +:ELSE_main_13 +:_END_IF_main_13 +LOAD_BASE_ADDRESS_eax %-16 PUSH_eax #_common_recursion -LOAD_EFFECTIVE_ADDRESS %4 +LOAD_BASE_ADDRESS_eax %-16 LOAD_INTEGER PUSH_eax #_common_recursion LOAD_IMMEDIATE_eax %2 @@ -15220,206 +13754,281 @@ POP_ebx # _common_recursion ADD_ebx_to_eax POP_ebx # _common_recursion STORE_INTEGER -JUMP %_END_IF_main_4 -:ELSE_main_4 -# IF_main_6 -LOAD_EFFECTIVE_ADDRESS %24 -PUSH_eax #_common_recursion -LOAD_EFFECTIVE_ADDRESS %4 -LOAD_INTEGER -POP_ebx # _common_recursion -SAL_eax_Immediate8 !2 -ADD_ebx_to_eax -LOAD_INTEGER -PUSH_eax #_process_expression1 -LOAD_IMMEDIATE_eax &STRING_304 -PUSH_eax #_process_expression2 -CALL_IMMEDIATE %FUNCTION_match -POP_ebx # _process_expression_locals -POP_ebx # _process_expression_locals -PUSH_eax #_common_recursion -LOAD_EFFECTIVE_ADDRESS %28 -PUSH_eax #_common_recursion -LOAD_EFFECTIVE_ADDRESS %8 -LOAD_INTEGER -POP_ebx # _common_recursion -SAL_eax_Immediate8 !2 -ADD_ebx_to_eax -LOAD_INTEGER -PUSH_eax #_process_expression1 -LOAD_IMMEDIATE_eax &STRING_305 -PUSH_eax #_process_expression2 -CALL_IMMEDIATE %FUNCTION_match -POP_ebx # _process_expression_locals -POP_ebx # _process_expression_locals -POP_ebx # _common_recursion -OR_eax_ebx -TEST -JUMP_EQ %ELSE_main_6 -LOAD_EFFECTIVE_ADDRESS %12 -PUSH_eax #_common_recursion -LOAD_IMMEDIATE_eax %1 -POP_ebx # _common_recursion -STORE_INTEGER -LOAD_EFFECTIVE_ADDRESS %0 - -PUSH_eax #_common_recursion -LOAD_EFFECTIVE_ADDRESS %4 -LOAD_INTEGER -PUSH_eax #_common_recursion -LOAD_IMMEDIATE_eax %1 -POP_ebx # _common_recursion -ADD_ebx_to_eax -POP_ebx # _common_recursion -STORE_INTEGER -JUMP %_END_IF_main_6 -:ELSE_main_6 -# IF_main_7 -LOAD_EFFECTIVE_ADDRESS %24 -PUSH_eax #_common_recursion -LOAD_EFFECTIVE_ADDRESS %4 -LOAD_INTEGER -POP_ebx # _common_recursion -SAL_eax_Immediate8 !2 -ADD_ebx_to_eax -LOAD_INTEGER -PUSH_eax #_process_expression1 -LOAD_IMMEDIATE_eax &STRING_306 -PUSH_eax #_process_expression2 -CALL_IMMEDIATE %FUNCTION_match -POP_ebx # _process_expression_locals -POP_ebx # _process_expression_locals -PUSH_eax #_common_recursion -LOAD_EFFECTIVE_ADDRESS %28 -PUSH_eax #_common_recursion -LOAD_EFFECTIVE_ADDRESS %8 -LOAD_INTEGER -POP_ebx # _common_recursion -SAL_eax_Immediate8 !2 -ADD_ebx_to_eax -LOAD_INTEGER -PUSH_eax #_process_expression1 -LOAD_IMMEDIATE_eax &STRING_307 -PUSH_eax #_process_expression2 -CALL_IMMEDIATE %FUNCTION_match -POP_ebx # _process_expression_locals -POP_ebx # _process_expression_locals -POP_ebx # _common_recursion -OR_eax_ebx -TEST -JUMP_EQ %ELSE_main_7 -LOAD_IMMEDIATE_eax &STRING_308 -PUSH_eax #_process_expression1 -LOAD_IMMEDIATE_eax %1 -PUSH_eax #_process_expression2 -CALL_IMMEDIATE %FUNCTION_file_print -POP_ebx # _process_expression_locals -POP_ebx # _process_expression_locals -LOAD_IMMEDIATE_eax %0 -PUSH_eax #_process_expression1 -CALL_IMMEDIATE %FUNCTION_exit -POP_ebx # _process_expression_locals -JUMP %_END_IF_main_7 -:ELSE_main_7 -# IF_main_8 -LOAD_EFFECTIVE_ADDRESS %24 -PUSH_eax #_common_recursion -LOAD_EFFECTIVE_ADDRESS %4 -LOAD_INTEGER -POP_ebx # _common_recursion -SAL_eax_Immediate8 !2 -ADD_ebx_to_eax -LOAD_INTEGER -PUSH_eax #_process_expression1 -LOAD_IMMEDIATE_eax &STRING_309 -PUSH_eax #_process_expression2 -CALL_IMMEDIATE %FUNCTION_match -POP_ebx # _process_expression_locals -POP_ebx # _process_expression_locals -PUSH_eax #_common_recursion -LOAD_EFFECTIVE_ADDRESS %28 -PUSH_eax #_common_recursion -LOAD_EFFECTIVE_ADDRESS %8 -LOAD_INTEGER -POP_ebx # _common_recursion -SAL_eax_Immediate8 !2 -ADD_ebx_to_eax -LOAD_INTEGER -PUSH_eax #_process_expression1 -LOAD_IMMEDIATE_eax &STRING_310 -PUSH_eax #_process_expression2 -CALL_IMMEDIATE %FUNCTION_match -POP_ebx # _process_expression_locals -POP_ebx # _process_expression_locals -POP_ebx # _common_recursion -OR_eax_ebx -TEST -JUMP_EQ %ELSE_main_8 -LOAD_IMMEDIATE_eax &STRING_311 -PUSH_eax #_process_expression1 -LOAD_IMMEDIATE_eax %2 -PUSH_eax #_process_expression2 -CALL_IMMEDIATE %FUNCTION_file_print -POP_ebx # _process_expression_locals -POP_ebx # _process_expression_locals -LOAD_IMMEDIATE_eax %0 -PUSH_eax #_process_expression1 -CALL_IMMEDIATE %FUNCTION_exit -POP_ebx # _process_expression_locals -JUMP %_END_IF_main_8 -:ELSE_main_8 -LOAD_IMMEDIATE_eax &STRING_312 -PUSH_eax #_process_expression1 -LOAD_IMMEDIATE_eax %1 -PUSH_eax #_process_expression2 -CALL_IMMEDIATE %FUNCTION_file_print -POP_ebx # _process_expression_locals -POP_ebx # _process_expression_locals -LOAD_IMMEDIATE_eax %1 -PUSH_eax #_process_expression1 -CALL_IMMEDIATE %FUNCTION_exit -POP_ebx # _process_expression_locals -:_END_IF_main_8 -:_END_IF_main_7 -:_END_IF_main_6 -:_END_IF_main_4 -:_END_IF_main_2 -:_END_IF_main_1 -JUMP %WHILE_main_0 - -:END_WHILE_main_0 - -# IF_main_9 -LOAD_IMMEDIATE_eax %0 -PUSH_eax #_common_recursion -LOAD_EFFECTIVE_ADDRESS %12 -LOAD_INTEGER -POP_ebx # _common_recursion -CMP -SETE -MOVEZBL -TEST -JUMP_EQ %ELSE_main_9 -LOAD_IMMEDIATE_eax &GLOBAL_global_token -PUSH_eax #_common_recursion -LOAD_EFFECTIVE_ADDRESS %12 -LOAD_INTEGER -PUSH_eax #_process_expression1 -LOAD_IMMEDIATE_eax &GLOBAL_global_token -LOAD_INTEGER -PUSH_eax #_process_expression2 -LOAD_IMMEDIATE_eax &STRING_313 -PUSH_eax #_process_expression2 -CALL_IMMEDIATE %FUNCTION_read_all_tokens -POP_ebx # _process_expression_locals -POP_ebx # _process_expression_locals -POP_ebx # _process_expression_locals -POP_ebx # _common_recursion -STORE_INTEGER JUMP %_END_IF_main_9 :ELSE_main_9 +# IF_main_16 +PUSH_edi # Prevent overwriting in recursion +PUSH_ebp # Protect the old base pointer +COPY_esp_to_edi # Copy new base pointer +LOAD_BASE_ADDRESS_eax %8 +PUSH_eax #_common_recursion +LOAD_BASE_ADDRESS_eax %-16 +LOAD_INTEGER +POP_ebx # _common_recursion +SAL_eax_Immediate8 !2 +ADD_ebx_to_eax +LOAD_INTEGER +PUSH_eax #_process_expression1 +LOAD_IMMEDIATE_eax &STRING_main_17 +PUSH_eax #_process_expression2 +COPY_edi_to_ebp +CALL_IMMEDIATE %FUNCTION_match +POP_ebx # _process_expression_locals +POP_ebx # _process_expression_locals +POP_ebp # Restore old base pointer +POP_edi # Prevent overwrite +PUSH_eax #_common_recursion +PUSH_edi # Prevent overwriting in recursion +PUSH_ebp # Protect the old base pointer +COPY_esp_to_edi # Copy new base pointer +LOAD_BASE_ADDRESS_eax %8 +PUSH_eax #_common_recursion +LOAD_BASE_ADDRESS_eax %-16 +LOAD_INTEGER +POP_ebx # _common_recursion +SAL_eax_Immediate8 !2 +ADD_ebx_to_eax +LOAD_INTEGER +PUSH_eax #_process_expression1 +LOAD_IMMEDIATE_eax &STRING_main_18 +PUSH_eax #_process_expression2 +COPY_edi_to_ebp +CALL_IMMEDIATE %FUNCTION_match +POP_ebx # _process_expression_locals +POP_ebx # _process_expression_locals +POP_ebp # Restore old base pointer +POP_edi # Prevent overwrite +POP_ebx # _common_recursion +OR_eax_ebx +TEST +JUMP_EQ %ELSE_main_16 +LOAD_BASE_ADDRESS_eax %-4 +PUSH_eax #_common_recursion +LOAD_IMMEDIATE_eax %1 +POP_ebx # _common_recursion +STORE_INTEGER +LOAD_BASE_ADDRESS_eax %-16 +PUSH_eax #_common_recursion +LOAD_BASE_ADDRESS_eax %-16 +LOAD_INTEGER +PUSH_eax #_common_recursion +LOAD_IMMEDIATE_eax %1 +POP_ebx # _common_recursion +ADD_ebx_to_eax +POP_ebx # _common_recursion +STORE_INTEGER +JUMP %_END_IF_main_16 +:ELSE_main_16 +# IF_main_19 +PUSH_edi # Prevent overwriting in recursion +PUSH_ebp # Protect the old base pointer +COPY_esp_to_edi # Copy new base pointer +LOAD_BASE_ADDRESS_eax %8 +PUSH_eax #_common_recursion +LOAD_BASE_ADDRESS_eax %-16 +LOAD_INTEGER +POP_ebx # _common_recursion +SAL_eax_Immediate8 !2 +ADD_ebx_to_eax +LOAD_INTEGER +PUSH_eax #_process_expression1 +LOAD_IMMEDIATE_eax &STRING_main_20 +PUSH_eax #_process_expression2 +COPY_edi_to_ebp +CALL_IMMEDIATE %FUNCTION_match +POP_ebx # _process_expression_locals +POP_ebx # _process_expression_locals +POP_ebp # Restore old base pointer +POP_edi # Prevent overwrite +PUSH_eax #_common_recursion +PUSH_edi # Prevent overwriting in recursion +PUSH_ebp # Protect the old base pointer +COPY_esp_to_edi # Copy new base pointer +LOAD_BASE_ADDRESS_eax %8 +PUSH_eax #_common_recursion +LOAD_BASE_ADDRESS_eax %-16 +LOAD_INTEGER +POP_ebx # _common_recursion +SAL_eax_Immediate8 !2 +ADD_ebx_to_eax +LOAD_INTEGER +PUSH_eax #_process_expression1 +LOAD_IMMEDIATE_eax &STRING_main_21 +PUSH_eax #_process_expression2 +COPY_edi_to_ebp +CALL_IMMEDIATE %FUNCTION_match +POP_ebx # _process_expression_locals +POP_ebx # _process_expression_locals +POP_ebp # Restore old base pointer +POP_edi # Prevent overwrite +POP_ebx # _common_recursion +OR_eax_ebx +TEST +JUMP_EQ %ELSE_main_19 +PUSH_edi # Prevent overwriting in recursion +PUSH_ebp # Protect the old base pointer +COPY_esp_to_edi # Copy new base pointer +LOAD_IMMEDIATE_eax &STRING_main_22 +PUSH_eax #_process_expression1 +LOAD_IMMEDIATE_eax %1 +PUSH_eax #_process_expression2 +COPY_edi_to_ebp +CALL_IMMEDIATE %FUNCTION_file_print +POP_ebx # _process_expression_locals +POP_ebx # _process_expression_locals +POP_ebp # Restore old base pointer +POP_edi # Prevent overwrite +PUSH_edi # Prevent overwriting in recursion +PUSH_ebp # Protect the old base pointer +COPY_esp_to_edi # Copy new base pointer +LOAD_IMMEDIATE_eax %0 +PUSH_eax #_process_expression1 +COPY_edi_to_ebp +CALL_IMMEDIATE %FUNCTION_exit +POP_ebx # _process_expression_locals +POP_ebp # Restore old base pointer +POP_edi # Prevent overwrite +JUMP %_END_IF_main_19 +:ELSE_main_19 +# IF_main_23 +PUSH_edi # Prevent overwriting in recursion +PUSH_ebp # Protect the old base pointer +COPY_esp_to_edi # Copy new base pointer +LOAD_BASE_ADDRESS_eax %8 +PUSH_eax #_common_recursion +LOAD_BASE_ADDRESS_eax %-16 +LOAD_INTEGER +POP_ebx # _common_recursion +SAL_eax_Immediate8 !2 +ADD_ebx_to_eax +LOAD_INTEGER +PUSH_eax #_process_expression1 +LOAD_IMMEDIATE_eax &STRING_main_24 +PUSH_eax #_process_expression2 +COPY_edi_to_ebp +CALL_IMMEDIATE %FUNCTION_match +POP_ebx # _process_expression_locals +POP_ebx # _process_expression_locals +POP_ebp # Restore old base pointer +POP_edi # Prevent overwrite +PUSH_eax #_common_recursion +PUSH_edi # Prevent overwriting in recursion +PUSH_ebp # Protect the old base pointer +COPY_esp_to_edi # Copy new base pointer +LOAD_BASE_ADDRESS_eax %8 +PUSH_eax #_common_recursion +LOAD_BASE_ADDRESS_eax %-16 +LOAD_INTEGER +POP_ebx # _common_recursion +SAL_eax_Immediate8 !2 +ADD_ebx_to_eax +LOAD_INTEGER +PUSH_eax #_process_expression1 +LOAD_IMMEDIATE_eax &STRING_main_25 +PUSH_eax #_process_expression2 +COPY_edi_to_ebp +CALL_IMMEDIATE %FUNCTION_match +POP_ebx # _process_expression_locals +POP_ebx # _process_expression_locals +POP_ebp # Restore old base pointer +POP_edi # Prevent overwrite +POP_ebx # _common_recursion +OR_eax_ebx +TEST +JUMP_EQ %ELSE_main_23 +PUSH_edi # Prevent overwriting in recursion +PUSH_ebp # Protect the old base pointer +COPY_esp_to_edi # Copy new base pointer +LOAD_IMMEDIATE_eax &STRING_main_26 +PUSH_eax #_process_expression1 +LOAD_IMMEDIATE_eax %2 +PUSH_eax #_process_expression2 +COPY_edi_to_ebp +CALL_IMMEDIATE %FUNCTION_file_print +POP_ebx # _process_expression_locals +POP_ebx # _process_expression_locals +POP_ebp # Restore old base pointer +POP_edi # Prevent overwrite +PUSH_edi # Prevent overwriting in recursion +PUSH_ebp # Protect the old base pointer +COPY_esp_to_edi # Copy new base pointer +LOAD_IMMEDIATE_eax %0 +PUSH_eax #_process_expression1 +COPY_edi_to_ebp +CALL_IMMEDIATE %FUNCTION_exit +POP_ebx # _process_expression_locals +POP_ebp # Restore old base pointer +POP_edi # Prevent overwrite +JUMP %_END_IF_main_23 +:ELSE_main_23 +PUSH_edi # Prevent overwriting in recursion +PUSH_ebp # Protect the old base pointer +COPY_esp_to_edi # Copy new base pointer +LOAD_IMMEDIATE_eax &STRING_main_27 +PUSH_eax #_process_expression1 +LOAD_IMMEDIATE_eax %1 +PUSH_eax #_process_expression2 +COPY_edi_to_ebp +CALL_IMMEDIATE %FUNCTION_file_print +POP_ebx # _process_expression_locals +POP_ebx # _process_expression_locals +POP_ebp # Restore old base pointer +POP_edi # Prevent overwrite +PUSH_edi # Prevent overwriting in recursion +PUSH_ebp # Protect the old base pointer +COPY_esp_to_edi # Copy new base pointer +LOAD_IMMEDIATE_eax %1 +PUSH_eax #_process_expression1 +COPY_edi_to_ebp +CALL_IMMEDIATE %FUNCTION_exit +POP_ebx # _process_expression_locals +POP_ebp # Restore old base pointer +POP_edi # Prevent overwrite +:_END_IF_main_23 +:_END_IF_main_19 +:_END_IF_main_16 :_END_IF_main_9 -# IF_main_10 +:_END_IF_main_2 +:_END_IF_main_1 +JUMP %WHILE_main_0 +:END_WHILE_main_0 +# IF_main_28 +LOAD_IMMEDIATE_eax %0 +PUSH_eax #_common_recursion +LOAD_BASE_ADDRESS_eax %-8 +LOAD_INTEGER +POP_ebx # _common_recursion +CMP +SETE +MOVEZBL +TEST +JUMP_EQ %ELSE_main_28 +LOAD_IMMEDIATE_eax &GLOBAL_global_token +PUSH_eax #_common_recursion +PUSH_edi # Prevent overwriting in recursion +PUSH_ebp # Protect the old base pointer +COPY_esp_to_edi # Copy new base pointer +LOAD_BASE_ADDRESS_eax %-8 +LOAD_INTEGER +PUSH_eax #_process_expression1 +LOAD_IMMEDIATE_eax &GLOBAL_global_token +LOAD_INTEGER +PUSH_eax #_process_expression2 +LOAD_IMMEDIATE_eax &STRING_main_29 +PUSH_eax #_process_expression2 +COPY_edi_to_ebp +CALL_IMMEDIATE %FUNCTION_read_all_tokens +POP_ebx # _process_expression_locals +POP_ebx # _process_expression_locals +POP_ebx # _process_expression_locals +POP_ebp # Restore old base pointer +POP_edi # Prevent overwrite +POP_ebx # _common_recursion +STORE_INTEGER +JUMP %_END_IF_main_28 +:ELSE_main_28 +:_END_IF_main_28 +# IF_main_30 LOAD_IMMEDIATE_eax %0 PUSH_eax #_common_recursion LOAD_IMMEDIATE_eax &GLOBAL_global_token @@ -15429,125 +14038,206 @@ CMP SETE MOVEZBL TEST -JUMP_EQ %ELSE_main_10 -LOAD_IMMEDIATE_eax &STRING_314 +JUMP_EQ %ELSE_main_30 +PUSH_edi # Prevent overwriting in recursion +PUSH_ebp # Protect the old base pointer +COPY_esp_to_edi # Copy new base pointer +LOAD_IMMEDIATE_eax &STRING_main_31 PUSH_eax #_process_expression1 LOAD_IMMEDIATE_eax %2 PUSH_eax #_process_expression2 +COPY_edi_to_ebp CALL_IMMEDIATE %FUNCTION_file_print POP_ebx # _process_expression_locals POP_ebx # _process_expression_locals +POP_ebp # Restore old base pointer +POP_edi # Prevent overwrite +PUSH_edi # Prevent overwriting in recursion +PUSH_ebp # Protect the old base pointer +COPY_esp_to_edi # Copy new base pointer LOAD_IMMEDIATE_eax %1 PUSH_eax #_process_expression1 +COPY_edi_to_ebp CALL_IMMEDIATE %FUNCTION_exit POP_ebx # _process_expression_locals -JUMP %_END_IF_main_10 -:ELSE_main_10 -:_END_IF_main_10 +POP_ebp # Restore old base pointer +POP_edi # Prevent overwrite +JUMP %_END_IF_main_30 +:ELSE_main_30 +:_END_IF_main_30 LOAD_IMMEDIATE_eax &GLOBAL_global_token PUSH_eax #_common_recursion +PUSH_edi # Prevent overwriting in recursion +PUSH_ebp # Protect the old base pointer +COPY_esp_to_edi # Copy new base pointer LOAD_IMMEDIATE_eax &GLOBAL_global_token LOAD_INTEGER PUSH_eax #_process_expression1 +COPY_edi_to_ebp CALL_IMMEDIATE %FUNCTION_reverse_list POP_ebx # _process_expression_locals +POP_ebp # Restore old base pointer +POP_edi # Prevent overwrite POP_ebx # _common_recursion STORE_INTEGER +PUSH_edi # Prevent overwriting in recursion +PUSH_ebp # Protect the old base pointer +COPY_esp_to_edi # Copy new base pointer +COPY_edi_to_ebp CALL_IMMEDIATE %FUNCTION_initialize_types +POP_ebp # Restore old base pointer +POP_edi # Prevent overwrite +PUSH_edi # Prevent overwriting in recursion +PUSH_ebp # Protect the old base pointer +COPY_esp_to_edi # Copy new base pointer +COPY_edi_to_ebp +CALL_IMMEDIATE %FUNCTION_reset_hold_string +POP_ebp # Restore old base pointer +POP_edi # Prevent overwrite # Defining local output_list -LOAD_IMMEDIATE_eax %0 -PUSH_eax #_process_expression1 +PUSH_edi # Prevent overwriting in recursion +PUSH_ebp # Protect the old base pointer +COPY_esp_to_edi # Copy new base pointer +COPY_edi_to_ebp CALL_IMMEDIATE %FUNCTION_program -POP_ebx # _process_expression_locals +POP_ebp # Restore old base pointer +POP_edi # Prevent overwrite PUSH_eax #output_list -LOAD_IMMEDIATE_eax &STRING_315 +PUSH_edi # Prevent overwriting in recursion +PUSH_ebp # Protect the old base pointer +COPY_esp_to_edi # Copy new base pointer +LOAD_IMMEDIATE_eax &STRING_main_32 PUSH_eax #_process_expression1 -LOAD_EFFECTIVE_ADDRESS %12 +LOAD_BASE_ADDRESS_eax %-12 LOAD_INTEGER PUSH_eax #_process_expression2 +COPY_edi_to_ebp CALL_IMMEDIATE %FUNCTION_file_print POP_ebx # _process_expression_locals POP_ebx # _process_expression_locals -LOAD_EFFECTIVE_ADDRESS %0 - +POP_ebp # Restore old base pointer +POP_edi # Prevent overwrite +PUSH_edi # Prevent overwriting in recursion +PUSH_ebp # Protect the old base pointer +COPY_esp_to_edi # Copy new base pointer +LOAD_BASE_ADDRESS_eax %-20 LOAD_INTEGER PUSH_eax #_process_expression1 -LOAD_EFFECTIVE_ADDRESS %12 +LOAD_BASE_ADDRESS_eax %-12 LOAD_INTEGER PUSH_eax #_process_expression2 +COPY_edi_to_ebp CALL_IMMEDIATE %FUNCTION_recursive_output POP_ebx # _process_expression_locals POP_ebx # _process_expression_locals -# IF_main_11 -LOAD_EFFECTIVE_ADDRESS %16 +POP_ebp # Restore old base pointer +POP_edi # Prevent overwrite +# IF_main_33 +LOAD_BASE_ADDRESS_eax %-4 LOAD_INTEGER TEST -JUMP_EQ %ELSE_main_11 -LOAD_IMMEDIATE_eax &STRING_316 +JUMP_EQ %ELSE_main_33 +PUSH_edi # Prevent overwriting in recursion +PUSH_ebp # Protect the old base pointer +COPY_esp_to_edi # Copy new base pointer +LOAD_IMMEDIATE_eax &STRING_main_34 PUSH_eax #_process_expression1 -LOAD_EFFECTIVE_ADDRESS %12 +LOAD_BASE_ADDRESS_eax %-12 LOAD_INTEGER PUSH_eax #_process_expression2 +COPY_edi_to_ebp CALL_IMMEDIATE %FUNCTION_file_print POP_ebx # _process_expression_locals POP_ebx # _process_expression_locals -JUMP %_END_IF_main_11 -:ELSE_main_11 -:_END_IF_main_11 -LOAD_IMMEDIATE_eax &STRING_317 +POP_ebp # Restore old base pointer +POP_edi # Prevent overwrite +JUMP %_END_IF_main_33 +:ELSE_main_33 +:_END_IF_main_33 +PUSH_edi # Prevent overwriting in recursion +PUSH_ebp # Protect the old base pointer +COPY_esp_to_edi # Copy new base pointer +LOAD_IMMEDIATE_eax &STRING_main_35 PUSH_eax #_process_expression1 -LOAD_EFFECTIVE_ADDRESS %12 +LOAD_BASE_ADDRESS_eax %-12 LOAD_INTEGER PUSH_eax #_process_expression2 +COPY_edi_to_ebp CALL_IMMEDIATE %FUNCTION_file_print POP_ebx # _process_expression_locals POP_ebx # _process_expression_locals +POP_ebp # Restore old base pointer +POP_edi # Prevent overwrite +PUSH_edi # Prevent overwriting in recursion +PUSH_ebp # Protect the old base pointer +COPY_esp_to_edi # Copy new base pointer LOAD_IMMEDIATE_eax &GLOBAL_globals_list LOAD_INTEGER PUSH_eax #_process_expression1 -LOAD_EFFECTIVE_ADDRESS %12 +LOAD_BASE_ADDRESS_eax %-12 LOAD_INTEGER PUSH_eax #_process_expression2 +COPY_edi_to_ebp CALL_IMMEDIATE %FUNCTION_recursive_output POP_ebx # _process_expression_locals POP_ebx # _process_expression_locals -LOAD_IMMEDIATE_eax &STRING_318 +POP_ebp # Restore old base pointer +POP_edi # Prevent overwrite +PUSH_edi # Prevent overwriting in recursion +PUSH_ebp # Protect the old base pointer +COPY_esp_to_edi # Copy new base pointer +LOAD_IMMEDIATE_eax &STRING_main_36 PUSH_eax #_process_expression1 -LOAD_EFFECTIVE_ADDRESS %12 +LOAD_BASE_ADDRESS_eax %-12 LOAD_INTEGER PUSH_eax #_process_expression2 +COPY_edi_to_ebp CALL_IMMEDIATE %FUNCTION_file_print POP_ebx # _process_expression_locals POP_ebx # _process_expression_locals +POP_ebp # Restore old base pointer +POP_edi # Prevent overwrite +PUSH_edi # Prevent overwriting in recursion +PUSH_ebp # Protect the old base pointer +COPY_esp_to_edi # Copy new base pointer LOAD_IMMEDIATE_eax &GLOBAL_strings_list LOAD_INTEGER PUSH_eax #_process_expression1 -LOAD_EFFECTIVE_ADDRESS %12 +LOAD_BASE_ADDRESS_eax %-12 LOAD_INTEGER PUSH_eax #_process_expression2 +COPY_edi_to_ebp CALL_IMMEDIATE %FUNCTION_recursive_output POP_ebx # _process_expression_locals POP_ebx # _process_expression_locals -# IF_main_12 +POP_ebp # Restore old base pointer +POP_edi # Prevent overwrite +# IF_main_37 LOAD_IMMEDIATE_eax %1 PUSH_eax #_common_recursion -LOAD_EFFECTIVE_ADDRESS %20 +LOAD_BASE_ADDRESS_eax %-4 LOAD_INTEGER POP_ebx # _common_recursion XOR_ebx_eax_into_eax TEST -JUMP_EQ %ELSE_main_12 -LOAD_IMMEDIATE_eax &STRING_319 +JUMP_EQ %ELSE_main_37 +PUSH_edi # Prevent overwriting in recursion +PUSH_ebp # Protect the old base pointer +COPY_esp_to_edi # Copy new base pointer +LOAD_IMMEDIATE_eax &STRING_main_38 PUSH_eax #_process_expression1 -LOAD_EFFECTIVE_ADDRESS %12 +LOAD_BASE_ADDRESS_eax %-12 LOAD_INTEGER PUSH_eax #_process_expression2 +COPY_edi_to_ebp CALL_IMMEDIATE %FUNCTION_file_print POP_ebx # _process_expression_locals POP_ebx # _process_expression_locals -JUMP %_END_IF_main_12 -:ELSE_main_12 -:_END_IF_main_12 +POP_ebp # Restore old base pointer +POP_edi # Prevent overwrite +JUMP %_END_IF_main_37 +:ELSE_main_37 +:_END_IF_main_37 LOAD_IMMEDIATE_eax %0 POP_ebx # _return_result_locals POP_ebx # _return_result_locals @@ -15556,16 +14246,22 @@ POP_ebx # _return_result_locals POP_ebx # _return_result_locals RETURN +:ELF_data # Program global variables - :GLOBAL_global_types NOP +:GLOBAL_prim_types +NOP :GLOBAL_global_token NOP :GLOBAL_strings_list NOP :GLOBAL_globals_list NOP +:GLOBAL_hold_string +NOP +:GLOBAL_string_index +NOP :GLOBAL_input NOP :GLOBAL_token @@ -15574,8 +14270,6 @@ NOP NOP :GLOBAL_file NOP -:GLOBAL_string_index -NOP :GLOBAL_member_size NOP :GLOBAL_global_symbol_list @@ -15584,858 +14278,867 @@ NOP NOP :GLOBAL_global_constant_list NOP -:GLOBAL_break_locals +:GLOBAL_function +NOP +:GLOBAL_out NOP :GLOBAL_current_target NOP -:GLOBAL_break_target +:GLOBAL_break_target_head NOP -:GLOBAL_current_function +:GLOBAL_break_target_func +NOP +:GLOBAL_break_target_num +NOP +:GLOBAL_break_frame NOP :GLOBAL_current_count NOP -:GLOBAL_string_num -NOP :GLOBAL_last_type NOP # Program strings - -:STRING_0 - +:STRING_preserve_keyword_1 +"abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789_" +:STRING_preserve_symbol_1 +"<=>|&!-" +:STRING_get_token_2 +"abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789_" +:STRING_get_token_4 +"<=>|&!-" +:STRING_upcase_1 +"abcdefghijklmnopqrstuvwxyz" +:STRING_hexify_1 "Tried to print non-hex number " -:STRING_1 +:STRING_weird_4 +" + !#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~" +:STRING_weird_6 +' 20 09 0A 0D 00' +:STRING_escape_lookup_8 "Unknown escape recieved: " -:STRING_2 +:STRING_escape_lookup_9 " Unable to process " -:STRING_3 +:STRING_collect_weird_string_0 "0123456789ABCDEF" -:STRING_4 +:STRING_initialize_types_0 "void" -:STRING_5 +:STRING_initialize_types_1 "int" -:STRING_6 +:STRING_initialize_types_2 "char*" -:STRING_7 +:STRING_initialize_types_3 "char" -:STRING_8 +:STRING_initialize_types_4 +"char**" +:STRING_initialize_types_5 "FILE" -:STRING_9 +:STRING_initialize_types_6 "FUNCTION" -:STRING_10 +:STRING_initialize_types_7 "unsigned" -:STRING_11 +:STRING_lookup_member_2 +"ERROR in lookup_member " +:STRING_lookup_member_3 +"->" +:STRING_lookup_member_4 +" does not exist +" +:STRING_lookup_member_5 +" +" +:STRING_build_member_1 +"[" +:STRING_build_member_2 +"Struct only supports [num] form +" +:STRING_build_member_3 +"]" +:STRING_build_union_0 "ERROR in build_union Missing { " -:STRING_12 +:STRING_build_union_1 "{" -:STRING_13 +:STRING_build_union_4 "ERROR in build_union Missing ; " -:STRING_14 +:STRING_build_union_5 ";" -:STRING_15 -' 45 52 52 4F 52 20 69 6E 20 63 72 65 61 74 65 5F 73 74 72 75 63 74 0A 20 4D 69 73 73 69 6E 67 20 7B 0A 00' -:STRING_16 +:STRING_create_struct_0 +"ERROR in create_struct + Missing { +" +:STRING_create_struct_1 "{" -:STRING_17 +:STRING_create_struct_4 "union" -:STRING_18 -' 45 52 52 4F 52 20 69 6E 20 63 72 65 61 74 65 5F 73 74 72 75 63 74 0A 20 4D 69 73 73 69 6E 67 20 3B 0A 00' -:STRING_19 +:STRING_create_struct_5 +"ERROR in create_struct + Missing ; +" +:STRING_create_struct_6 ";" -:STRING_20 -' 45 52 52 4F 52 20 69 6E 20 63 72 65 61 74 65 5F 73 74 72 75 63 74 0A 20 4D 69 73 73 69 6E 67 20 3B 0A 00' -:STRING_21 +:STRING_create_struct_7 +"ERROR in create_struct + Missing ; +" +:STRING_create_struct_8 ";" -:STRING_22 +:STRING_type_name_0 "struct" -:STRING_23 +:STRING_type_name_3 "Unknown type " -:STRING_24 -' 0A 00' -:STRING_25 +:STRING_type_name_4 +" +" +:STRING_uniqueID_0 +"_" +:STRING_uniqueID_1 +" +" +:STRING_line_error_0 "In file: " -:STRING_26 +:STRING_line_error_1 " On line: " -:STRING_27 -"main" -:STRING_28 -"argc" -:STRING_29 -"argv" -:STRING_30 -" does not exist in function " -:STRING_31 -" -" -:STRING_32 +:STRING_function_call_0 "ERROR in process_expression_list No ( was found " -:STRING_33 +:STRING_function_call_1 "(" -:STRING_34 +:STRING_function_call_2 +"PUSH_edi # Prevent overwriting in recursion +" +:STRING_function_call_3 +"PUSH_ebp # Protect the old base pointer +" +:STRING_function_call_4 +"COPY_esp_to_edi # Copy new base pointer +" +:STRING_function_call_6 "PUSH_eax #_process_expression1 " -:STRING_35 +:STRING_function_call_8 "PUSH_eax #_process_expression2 " -:STRING_36 +:STRING_function_call_9 "ERROR in process_expression_list No ) was found " -:STRING_37 +:STRING_function_call_10 ")" -:STRING_38 -"LOAD_EFFECTIVE_ADDRESS %" -:STRING_39 +:STRING_function_call_12 +"LOAD_BASE_ADDRESS_eax %" +:STRING_function_call_13 " LOAD_INTEGER -CALL_eax " -:STRING_40 -"LOAD_EFFECTIVE_ADDRESS %" -:STRING_41 +:STRING_function_call_14 +"COPY_edi_to_ebp " -LOAD_INTEGER -CALL_eax +:STRING_function_call_15 +"CALL_eax " -:STRING_42 +:STRING_function_call_16 +"COPY_edi_to_ebp +" +:STRING_function_call_17 "CALL_IMMEDIATE %FUNCTION_" -:STRING_43 +:STRING_function_call_18 +" +" +:STRING_function_call_20 "POP_ebx # _process_expression_locals " -:STRING_44 +:STRING_function_call_21 +"POP_ebp # Restore old base pointer +" +:STRING_function_call_22 +"POP_edi # Prevent overwrite +" +:STRING_constant_load_0 "LOAD_IMMEDIATE_eax %" -:STRING_45 +:STRING_constant_load_1 +" +" +:STRING_variable_load_1 "FUNCTION" -:STRING_46 +:STRING_variable_load_2 "(" -:STRING_47 -"#Loading address of function -LOAD_EFFECTIVE_ADDRESS %" -:STRING_48 -" -LOAD_INTEGER -" -:STRING_49 -"LOAD_EFFECTIVE_ADDRESS %" -:STRING_50 +:STRING_variable_load_3 +"LOAD_BASE_ADDRESS_eax %" +:STRING_variable_load_4 " " -:STRING_51 +:STRING_variable_load_6 "=" -:STRING_52 +:STRING_variable_load_8 +"char**" +:STRING_variable_load_9 "LOAD_INTEGER " -:STRING_53 -"FUNCTION" -:STRING_54 +:STRING_function_load_1 "(" -:STRING_55 -"#Loading address of function -LOAD_EFFECTIVE_ADDRESS %" -:STRING_56 -" -LOAD_INTEGER -" -:STRING_57 -"LOAD_EFFECTIVE_ADDRESS %" -:STRING_58 -" -" -:STRING_59 -"=" -:STRING_60 -"argv" -:STRING_61 -"LOAD_INTEGER -" -:STRING_62 -"(" -:STRING_63 +:STRING_function_load_2 "LOAD_IMMEDIATE_eax &FUNCTION_" -:STRING_64 +:STRING_function_load_3 +" +" +:STRING_global_load_0 "LOAD_IMMEDIATE_eax &GLOBAL_" -:STRING_65 +:STRING_global_load_1 +" +" +:STRING_global_load_3 "=" -:STRING_66 +:STRING_global_load_4 "LOAD_INTEGER " -:STRING_67 -" is not a defined symbol -" -:STRING_68 -"LOAD_IMMEDIATE_eax %" -:STRING_69 -"Error in Primary expression -Didn't get ) -" -:STRING_70 -")" -:STRING_71 -"LOAD_IMMEDIATE_eax %" -:STRING_72 -" -" -:STRING_73 -"LOAD_IMMEDIATE_eax &STRING_" -:STRING_74 -" -" -:STRING_75 -' 3A 53 54 52 49 4E 47 5F 00' -:STRING_76 -" -" -:STRING_77 +:STRING_primary_expr_failure_0 "Recieved " -:STRING_78 +:STRING_primary_expr_failure_1 " in primary_expr " -:STRING_79 +:STRING_primary_expr_string_0 +"LOAD_IMMEDIATE_eax &STRING_" +:STRING_primary_expr_string_1 +":STRING_" +:STRING_primary_expr_char_0 +"LOAD_IMMEDIATE_eax %" +:STRING_primary_expr_char_1 +" +" +:STRING_primary_expr_number_0 +"LOAD_IMMEDIATE_eax %" +:STRING_primary_expr_number_1 +" +" +:STRING_primary_expr_variable_5 +" is not a defined symbol +" +:STRING_common_recursion_0 "PUSH_eax #_common_recursion " -:STRING_80 +:STRING_common_recursion_1 "POP_ebx # _common_recursion " -:STRING_81 -"SAL_eax_Immediate8 !" -:STRING_82 -" -" -:STRING_83 -"ADD_ebx_to_eax -" -:STRING_84 -"=" -:STRING_85 -"LOAD_INTEGER -" -:STRING_86 -"LOAD_BYTE -" -:STRING_87 -"ERROR in postfix_expr -Missing ] -" -:STRING_88 -"]" -:STRING_89 -"->" -:STRING_90 +:STRING_postfix_expr_arrow_0 "# looking up offset " -:STRING_91 -"ERROR in postfix_expr " -:STRING_92 -"->" -:STRING_93 -" does not exist -" -:STRING_94 +:STRING_postfix_expr_arrow_2 "# -> offset calculation " -:STRING_95 +:STRING_postfix_expr_arrow_3 "LOAD_IMMEDIATE_ebx %" -:STRING_96 +:STRING_postfix_expr_arrow_4 " ADD_ebx_to_eax " -:STRING_97 +:STRING_postfix_expr_arrow_6 "=" -:STRING_98 +:STRING_postfix_expr_arrow_7 +"char**" +:STRING_postfix_expr_arrow_8 "LOAD_INTEGER " -:STRING_99 -"-" -:STRING_100 -"LOAD_IMMEDIATE_eax %0 +:STRING_postfix_expr_array_0 +"LOAD_INTEGER " -:STRING_101 -"SUBTRACT_eax_from_ebx_into_ebx -MOVE_ebx_to_eax +:STRING_postfix_expr_array_2 +"char*" +:STRING_postfix_expr_array_3 +"LOAD_BYTE " -:STRING_102 -"!" -:STRING_103 -"LOAD_IMMEDIATE_eax %1 +:STRING_postfix_expr_array_4 +"SAL_eax_Immediate8 !" +:STRING_postfix_expr_array_5 " -:STRING_104 -"XOR_ebx_eax_into_eax " -:STRING_105 -"sizeof" -:STRING_106 +:STRING_postfix_expr_array_6 +"ADD_ebx_to_eax +" +:STRING_postfix_expr_array_7 +"ERROR in postfix_expr +Missing ] +" +:STRING_postfix_expr_array_8 +"]" +:STRING_postfix_expr_array_10 +"=" +:STRING_postfix_expr_array_11 +"" +:STRING_unary_expr_sizeof_0 "ERROR in unary_expr Missing ( " -:STRING_107 +:STRING_unary_expr_sizeof_1 "(" -:STRING_108 +:STRING_unary_expr_sizeof_2 "ERROR in unary_expr Missing ) " -:STRING_109 +:STRING_unary_expr_sizeof_3 ")" -:STRING_110 +:STRING_unary_expr_sizeof_4 "LOAD_IMMEDIATE_eax %" -:STRING_111 +:STRING_unary_expr_sizeof_5 " " -:STRING_112 -"+" -:STRING_113 +:STRING_postfix_expr_stub_1 +"[" +:STRING_postfix_expr_stub_3 +"->" +:STRING_additive_expr_stub_0 "ADD_ebx_to_eax " -:STRING_114 -"-" -:STRING_115 +:STRING_additive_expr_stub_1 +"+" +:STRING_additive_expr_stub_2 "SUBTRACT_eax_from_ebx_into_ebx MOVE_ebx_to_eax " -:STRING_116 -"*" -:STRING_117 +:STRING_additive_expr_stub_3 +"-" +:STRING_additive_expr_stub_4 "MULTIPLY_eax_by_ebx_into_eax " -:STRING_118 -"/" -:STRING_119 +:STRING_additive_expr_stub_5 +"*" +:STRING_additive_expr_stub_6 "XCHG_eax_ebx LOAD_IMMEDIATE_edx %0 DIVIDE_eax_by_ebx_into_eax " -:STRING_120 -"%" -:STRING_121 +:STRING_additive_expr_stub_7 +"/" +:STRING_additive_expr_stub_8 "XCHG_eax_ebx LOAD_IMMEDIATE_edx %0 MODULUS_eax_from_ebx_into_ebx MOVE_edx_to_eax " -:STRING_122 -"<<" -:STRING_123 +:STRING_additive_expr_stub_9 +"%" +:STRING_additive_expr_stub_10 "COPY_eax_to_ecx -POP_eax +COPY_ebx_to_eax SAL_eax_cl " -:STRING_124 -">>" -:STRING_125 +:STRING_additive_expr_stub_11 +"<<" +:STRING_additive_expr_stub_12 "COPY_eax_to_ecx -POP_eax +COPY_ebx_to_eax SAR_eax_cl " -:STRING_126 -"<" -:STRING_127 +:STRING_additive_expr_stub_13 +">>" +:STRING_relational_expr_stub_0 "CMP SETL MOVEZBL " -:STRING_128 -"<=" -:STRING_129 +:STRING_relational_expr_stub_1 +"<" +:STRING_relational_expr_stub_2 "CMP SETLE MOVEZBL " -:STRING_130 -">=" -:STRING_131 +:STRING_relational_expr_stub_3 +"<=" +:STRING_relational_expr_stub_4 "CMP SETGE MOVEZBL " -:STRING_132 -">" -:STRING_133 +:STRING_relational_expr_stub_5 +">=" +:STRING_relational_expr_stub_6 "CMP SETG MOVEZBL " -:STRING_134 -"==" -:STRING_135 +:STRING_relational_expr_stub_7 +">" +:STRING_relational_expr_stub_8 "CMP SETE MOVEZBL " -:STRING_136 -"!=" -:STRING_137 +:STRING_relational_expr_stub_9 +"==" +:STRING_relational_expr_stub_10 "CMP SETNE MOVEZBL " -:STRING_138 +:STRING_relational_expr_stub_11 +"!=" +:STRING_bitwise_expr_stub_0 "AND_eax_ebx " -:STRING_139 +:STRING_bitwise_expr_stub_1 +"&" +:STRING_bitwise_expr_stub_2 +"AND_eax_ebx +" +:STRING_bitwise_expr_stub_3 +"&&" +:STRING_bitwise_expr_stub_4 "OR_eax_ebx " -:STRING_140 +:STRING_bitwise_expr_stub_5 +"|" +:STRING_bitwise_expr_stub_6 +"OR_eax_ebx +" +:STRING_bitwise_expr_stub_7 +"||" +:STRING_bitwise_expr_stub_8 "XOR_ebx_eax_into_eax " -:STRING_141 +:STRING_bitwise_expr_stub_9 +"^" +:STRING_primary_expr_1 +"sizeof" +:STRING_primary_expr_3 +"LOAD_IMMEDIATE_eax %0 +" +:STRING_primary_expr_4 +"SUBTRACT_eax_from_ebx_into_ebx +MOVE_ebx_to_eax +" +:STRING_primary_expr_6 +"LOAD_IMMEDIATE_eax %1 +" +:STRING_primary_expr_7 +"XOR_ebx_eax_into_eax +" +:STRING_primary_expr_9 +"Error in Primary expression +Didn't get ) +" +:STRING_primary_expr_10 +")" +:STRING_primary_expr_14 +"abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ_" +:STRING_primary_expr_16 +"0123456789" +:STRING_expression_1 +"=" +:STRING_expression_3 "]" -:STRING_142 +:STRING_expression_4 +"char*" +:STRING_expression_5 +"STORE_INTEGER +" +:STRING_expression_6 "STORE_CHAR " -:STRING_143 -"STORE_INTEGER -" -:STRING_144 -"STORE_INTEGER -" -:STRING_145 +:STRING_collect_local_1 +"main" +:STRING_collect_local_4 "# Defining local " -:STRING_146 +:STRING_collect_local_5 " " -:STRING_147 +:STRING_collect_local_7 +"=" +:STRING_collect_local_8 "ERROR in collect_local Missing ; " -:STRING_148 +:STRING_collect_local_9 ";" -:STRING_149 +:STRING_collect_local_10 "PUSH_eax #" -:STRING_150 +:STRING_collect_local_11 " " -:STRING_151 +:STRING_process_if_0 "# IF_" -:STRING_152 -"_" -:STRING_153 -" -" -:STRING_154 +:STRING_process_if_1 "ERROR in process_if MISSING ( " -:STRING_155 +:STRING_process_if_2 "(" -:STRING_156 +:STRING_process_if_3 "TEST JUMP_EQ %ELSE_" -:STRING_157 -"_" -:STRING_158 -" -" -:STRING_159 +:STRING_process_if_4 "ERROR in process_if MISSING ) " -:STRING_160 +:STRING_process_if_5 ")" -:STRING_161 +:STRING_process_if_6 "JUMP %_END_IF_" -:STRING_162 -"_" -:STRING_163 -' 0A 3A 45 4C 53 45 5F 00' -:STRING_164 -"_" -:STRING_165 -" -" -:STRING_166 +:STRING_process_if_7 +":ELSE_" +:STRING_process_if_9 "else" -:STRING_167 -' 3A 5F 45 4E 44 5F 49 46 5F 00' -:STRING_168 -"_" -:STRING_169 -" -" -:STRING_170 +:STRING_process_if_10 +":_END_IF_" +:STRING_process_for_0 "FOR_END_" -:STRING_171 -"_" -:STRING_172 +:STRING_process_for_1 "# FOR_initialization_" -:STRING_173 -"_" -:STRING_174 -" -" -:STRING_175 +:STRING_process_for_2 "ERROR in process_for MISSING ( " -:STRING_176 +:STRING_process_for_3 "(" -:STRING_177 +:STRING_process_for_5 ";" -:STRING_178 -' 3A 46 4F 52 5F 00' -:STRING_179 -"_" -:STRING_180 -" -" -:STRING_181 +:STRING_process_for_6 +":FOR_" +:STRING_process_for_7 "ERROR in process_for MISSING ;1 " -:STRING_182 +:STRING_process_for_8 ";" -:STRING_183 +:STRING_process_for_9 "TEST JUMP_EQ %FOR_END_" -:STRING_184 -"_" -:STRING_185 -" -JUMP %FOR_THEN_" -:STRING_186 -"_" -:STRING_187 -' 0A 3A 46 4F 52 5F 49 54 45 52 5F 00' -:STRING_188 -"_" -:STRING_189 -" -" -:STRING_190 +:STRING_process_for_10 +"JUMP %FOR_THEN_" +:STRING_process_for_11 +":FOR_ITER_" +:STRING_process_for_12 "ERROR in process_for MISSING ;2 " -:STRING_191 +:STRING_process_for_13 ";" -:STRING_192 +:STRING_process_for_14 "JUMP %FOR_" -:STRING_193 -"_" -:STRING_194 -' 0A 3A 46 4F 52 5F 54 48 45 4E 5F 00' -:STRING_195 -"_" -:STRING_196 -" -" -:STRING_197 +:STRING_process_for_15 +":FOR_THEN_" +:STRING_process_for_16 "ERROR in process_for MISSING ) " -:STRING_198 +:STRING_process_for_17 ")" -:STRING_199 +:STRING_process_for_18 "JUMP %FOR_ITER_" -:STRING_200 -"_" -:STRING_201 -' 0A 3A 46 4F 52 5F 45 4E 44 5F 00' -:STRING_202 -"_" -:STRING_203 -" -" -:STRING_204 +:STRING_process_for_19 +":FOR_END_" +:STRING_process_asm_0 "ERROR in process_asm MISSING ( " -:STRING_205 +:STRING_process_asm_1 "(" -:STRING_206 +:STRING_process_asm_3 " " -:STRING_207 +:STRING_process_asm_4 "ERROR in process_asm MISSING ) " -:STRING_208 +:STRING_process_asm_5 ")" -:STRING_209 +:STRING_process_asm_6 "ERROR in process_asm MISSING ; " -:STRING_210 +:STRING_process_asm_7 ";" -:STRING_211 +:STRING_process_do_0 "DO_END_" -:STRING_212 -"_" -:STRING_213 -' 3A 44 4F 5F 00' -:STRING_214 -"_" -:STRING_215 -" -" -:STRING_216 +:STRING_process_do_1 +":DO_" +:STRING_process_do_2 "ERROR in process_do MISSING while " -:STRING_217 +:STRING_process_do_3 "while" -:STRING_218 +:STRING_process_do_4 "ERROR in process_do MISSING ( " -:STRING_219 +:STRING_process_do_5 "(" -:STRING_220 +:STRING_process_do_6 "ERROR in process_do MISSING ) " -:STRING_221 +:STRING_process_do_7 ")" -:STRING_222 +:STRING_process_do_8 "ERROR in process_do MISSING ; " -:STRING_223 +:STRING_process_do_9 ";" -:STRING_224 +:STRING_process_do_10 "TEST JUMP_NE %DO_" -:STRING_225 -"_" -:STRING_226 -' 0A 3A 44 4F 5F 45 4E 44 5F 00' -:STRING_227 -"_" -:STRING_228 -" -" -:STRING_229 +:STRING_process_do_11 +":DO_END_" +:STRING_process_while_0 "END_WHILE_" -:STRING_230 -"_" -:STRING_231 -' 3A 57 48 49 4C 45 5F 00' -:STRING_232 -"_" -:STRING_233 -" -" -:STRING_234 +:STRING_process_while_1 +":WHILE_" +:STRING_process_while_2 "ERROR in process_while MISSING ( " -:STRING_235 +:STRING_process_while_3 "(" -:STRING_236 +:STRING_process_while_4 "TEST JUMP_EQ %END_WHILE_" -:STRING_237 -"_" -:STRING_238 -" -# THEN_while_" -:STRING_239 -"_" -:STRING_240 -" -" -:STRING_241 +:STRING_process_while_5 +"# THEN_while_" +:STRING_process_while_6 "ERROR in process_while MISSING ) " -:STRING_242 +:STRING_process_while_7 ")" -:STRING_243 +:STRING_process_while_8 "JUMP %WHILE_" -:STRING_244 -"_" -:STRING_245 -' 0A 3A 45 4E 44 5F 57 48 49 4C 45 5F 00' -:STRING_246 -"_" -:STRING_247 -" -" -:STRING_248 +:STRING_process_while_9 +":END_WHILE_" +:STRING_return_result_1 "ERROR in return_result MISSING ; " -:STRING_249 +:STRING_return_result_2 ";" -:STRING_250 +:STRING_return_result_4 "POP_ebx # _return_result_locals " -:STRING_251 +:STRING_return_result_5 "RETURN " -:STRING_252 -"}" -:STRING_253 -"RETURN -" -:STRING_254 -"POP_ebx # _recursive_statement_locals -" -:STRING_255 -" #C goto label -" -:STRING_256 -"struct" -:STRING_257 -"if" -:STRING_258 -"do" -:STRING_259 -"while" -:STRING_260 -"for" -:STRING_261 -"asm" -:STRING_262 -"goto" -:STRING_263 -"JUMP %" -:STRING_264 -" -" -:STRING_265 -"ERROR in statement -Missing ; -" -:STRING_266 -";" -:STRING_267 -"return" -:STRING_268 -"break" -:STRING_269 +:STRING_process_break_1 "Not inside of a loop or case statement" -:STRING_270 +:STRING_process_break_4 "POP_ebx # break_cleanup_locals " -:STRING_271 +:STRING_process_break_5 "JUMP %" -:STRING_272 +:STRING_process_break_6 +"_" +:STRING_process_break_7 " " -:STRING_273 +:STRING_process_break_8 +"ERROR in break statement +Missing ; +" +:STRING_process_break_9 +";" +:STRING_recursive_statement_1 +"}" +:STRING_recursive_statement_3 +"RETURN +" +:STRING_recursive_statement_5 +"POP_ebx # _recursive_statement_locals +" +:STRING_statement_2 +" #C goto label +" +:STRING_statement_4 +"struct" +:STRING_statement_6 +"if" +:STRING_statement_8 +"do" +:STRING_statement_10 +"while" +:STRING_statement_12 +"for" +:STRING_statement_14 +"asm" +:STRING_statement_16 +"goto" +:STRING_statement_17 +"JUMP %" +:STRING_statement_18 +" +" +:STRING_statement_19 "ERROR in statement Missing ; " -:STRING_274 +:STRING_statement_20 ";" -:STRING_275 +:STRING_statement_22 +"return" +:STRING_statement_24 +"break" +:STRING_statement_26 "continue" -:STRING_276 +:STRING_statement_27 " #continue statement " -:STRING_277 +:STRING_statement_28 "ERROR in statement Missing ; " -:STRING_278 +:STRING_statement_29 ";" -:STRING_279 +:STRING_statement_30 "ERROR in statement MISSING ; " -:STRING_280 +:STRING_statement_31 ";" -:STRING_281 +:STRING_collect_arguments_1 ")" -:STRING_282 +:STRING_collect_arguments_5 +"main" +:STRING_collect_arguments_7 +"argc" +:STRING_collect_arguments_9 +"argv" +:STRING_declare_function_1 "# Defining function " -:STRING_283 +:STRING_declare_function_2 " " -:STRING_284 -' 3A 46 55 4E 43 54 49 4F 4E 5F 00' -:STRING_285 +:STRING_declare_function_3 +":FUNCTION_" +:STRING_declare_function_4 " " -:STRING_286 +:STRING_declare_function_6 +"main" +:STRING_declare_function_7 +"COPY_esp_to_ebp # Deal with special case +" +:STRING_declare_function_9 "RETURN " -:STRING_287 +:STRING_declare_function_10 "RETURN " -:STRING_288 +:STRING_program_2 "CONSTANT" -:STRING_289 -' 3A 47 4C 4F 42 41 4C 5F 00' -:STRING_290 +:STRING_program_5 +";" +:STRING_program_6 +":GLOBAL_" +:STRING_program_7 +" +NOP +" +:STRING_program_9 +"(" +:STRING_program_11 +"=" +:STRING_program_12 +":GLOBAL_" +:STRING_program_13 " " -:STRING_291 -"NOP +:STRING_program_15 +"0123456789" +:STRING_program_16 +"%" +:STRING_program_17 " -:STRING_292 +" +:STRING_program_19 "Recieved " -:STRING_293 +:STRING_program_20 " in program " -:STRING_294 +:STRING_program_21 +"ERROR in Program +Missing ; +" +:STRING_program_22 +";" +:STRING_program_23 +"Recieved " +:STRING_program_24 +" in program +" +:STRING_main_3 "-f" -:STRING_295 +:STRING_main_4 "--file" -:STRING_296 +:STRING_main_5 "r" -:STRING_297 +:STRING_main_7 "Unable to open for reading file: " -:STRING_298 -' 0A 20 41 62 6F 72 74 69 6E 67 20 74 6F 20 61 76 6F 69 64 20 70 72 6F 62 6C 65 6D 73 0A 00' -:STRING_299 +:STRING_main_8 +" + Aborting to avoid problems +" +:STRING_main_10 "-o" -:STRING_300 +:STRING_main_11 "--output" -:STRING_301 +:STRING_main_12 "w" -:STRING_302 +:STRING_main_14 "Unable to open for writing file: " -:STRING_303 -' 0A 20 41 62 6F 72 74 69 6E 67 20 74 6F 20 61 76 6F 69 64 20 70 72 6F 62 6C 65 6D 73 0A 00' -:STRING_304 +:STRING_main_15 +" + Aborting to avoid problems +" +:STRING_main_17 "-g" -:STRING_305 +:STRING_main_18 "--debug" -:STRING_306 +:STRING_main_20 "-h" -:STRING_307 +:STRING_main_21 "--help" -:STRING_308 -' 20 2D 66 20 69 6E 70 75 74 20 66 69 6C 65 0A 20 2D 6F 20 6F 75 74 70 75 74 20 66 69 6C 65 0A 20 2D 2D 68 65 6C 70 20 66 6F 72 20 74 68 69 73 20 6D 65 73 73 61 67 65 0A 20 2D 2D 76 65 72 73 69 6F 6E 20 66 6F 72 20 66 69 6C 65 20 76 65 72 73 69 6F 6E 0A 00' -:STRING_309 +:STRING_main_22 +" -f input file + -o output file + --help for this message + --version for file version +" +:STRING_main_24 "-V" -:STRING_310 +:STRING_main_25 "--version" -:STRING_311 -' 42 61 73 69 63 20 74 65 73 74 20 76 65 72 73 69 6F 6E 20 30 2E 30 2E 30 2E 31 61 0A 00' -:STRING_312 -' 55 4E 4B 4E 4F 57 4E 20 41 52 47 55 4D 45 4E 54 0A 00' -:STRING_313 +:STRING_main_26 +"Basic test version 0.0.0.1a +" +:STRING_main_27 +"UNKNOWN ARGUMENT +" +:STRING_main_29 "STDIN" -:STRING_314 +:STRING_main_31 "Either no input files were given or they were empty " -:STRING_315 +:STRING_main_32 " # Core program - " -:STRING_316 +:STRING_main_34 ' 0A 3A 45 4C 46 5F 64 61 74 61 0A 00' -:STRING_317 +:STRING_main_35 " # Program global variables - " -:STRING_318 +:STRING_main_36 " # Program strings - " -:STRING_319 +:STRING_main_38 ' 0A 3A 45 4C 46 5F 65 6E 64 0A 00' :ELF_end diff --git a/test/test.answers b/test/test.answers index eee870a..7a710bc 100644 --- a/test/test.answers +++ b/test/test.answers @@ -9,7 +9,7 @@ b45fae655b7f848b28ebdb8eb2e30ae789fbcf7920bc315395d53986bb1adae4 test/results/t d511db73158a9544a5b5f828a79751e3de8a04b81c143fd0c146fc22c938aa9f test/results/test08-binary 907e1808f2e2b15ac72ebf13898b15c678e68ebd43d673dcd0f408d907e7962f test/results/test09-binary ef179cd359ba1d61d45089e314cd4ac2069c8dc4dd7494d7c766344ea3c8cf88 test/results/test10-binary -bf1d76df4d3e701c420e031910ca0da3f390fb3b6d198a0b93349bdbc285adb7 test/results/test100-binary +cefac04111bd46b335b6ebf995c07989920fbdbb3eb07e0b29fb7d62dcc70cfe test/results/test100-binary 5aaf399fe706d4a8c85c121c75ada29a65c293b57c98e8999961a2ef0bab0d62 test/results/test11-binary 4f8111e73e07255ae203963438c82ea8bcff7474e1594b52b426c58a03cb30eb test/results/test12-binary dd74dabfdce8657ff440c1eef531cbf67a64854f2020d4d6bcb65c9cc2d199cb test/results/test13-binary @@ -18,10 +18,10 @@ e216869c3fb06de7a41578517c797169e219b20a5697a822ba11eeef0d04f181 test/results/t 315ae5cc5c9d5bdcae0eddd55371128e53e3e9267a2a7c53832ed0af51693bea test/results/test16-binary fdce9856f885418a7b2f69fc24a6cc0c85922313b49694d8030c544e4b2ad16f test/results/test17-binary 9a426972b6df90a158aebe3b8f3eb9ef8a63ce317d764afb92be4fce16542743 test/results/test18-binary -8459b95fb7232f6c0d9c2af94be061d7a14f39659767486af51d5b76e818824e test/results/test19-binary +91b761d241dd9969230b235c6cb3bc86cc6b0076d9d1a04c4950de32228149f5 test/results/test19-binary 48d845d20fff86183047342641cc8a6174e71c0ca004be882f0195a141bd64ea test/results/test20-binary 65354ea5f760e42ea054785033a6519e0eee30d21b1b69ac7715ef958c5e0e2f test/results/test21-binary -dffc0dbe1d99fd156ab406d0b71ce48e6d91072f75b8103a208510293e37735a test/results/test22-binary -c745adaa7c5ba2230877fc8d2137a87d25597212069660813460cb6d764de2a0 test/results/test23-binary +9a79bdfb35c1c17bb0c66357836382bb08d3876ae8c0c77356776d16aa7faa7f test/results/test22-binary +96e1789254675815a3ec5ad93c1cc32c4805d1ad7f029721cef102c4501df8e2 test/results/test23-binary 50215e4b4e2ce22a959ea7bcfc77c4d6ac45464455f5103afcaea0e84f9bf1d1 test/results/test24-binary 0013b8786068520e386a0cf2ce39c5145462439f17c264e62a9eddb1eed0433b test/results/test99-binary diff --git a/test/test100/hello.sh b/test/test100/hello.sh index 1a736a3..04c5b2b 100755 --- a/test/test100/hello.sh +++ b/test/test100/hello.sh @@ -17,6 +17,7 @@ then -f cc_types.c \ -f cc_core.c \ -f cc.c \ + --debug \ -o test/test100/cc.M1 || exit 1 else ./bin/M2-Planet-gcc -f functions/file.c \ @@ -33,19 +34,30 @@ else -f cc_types.c \ -f cc_core.c \ -f cc.c \ + --debug \ -o test/test100/cc.M1 || exit 1 fi +# Build debug footer +blood-elf -f test/test100/cc.M1 \ + -o test/test100/cc-footer.M1 || exit 2 + # Macro assemble with libc written in M1-Macro M1 -f test/common_x86/x86_defs.M1 \ -f functions/libc-core.M1 \ -f test/test100/cc.M1 \ + -f test/test100/cc-footer.M1 \ --LittleEndian \ --Architecture 1 \ - -o test/test100/cc.hex2 || exit 2 + -o test/test100/cc.hex2 || exit 3 # Resolve all linkages -hex2 -f test/common_x86/ELF-i386.hex2 -f test/test100/cc.hex2 --LittleEndian --Architecture 1 --BaseAddress 0x8048000 -o test/results/test100-binary --exec_enable || exit 3 +hex2 -f test/common_x86/ELF-i386-debug.hex2 \ + -f test/test100/cc.hex2 \ + --LittleEndian \ + --Architecture 1 \ + --BaseAddress 0x8048000 \ + -o test/results/test100-binary --exec_enable || exit 4 # Ensure binary works if host machine supports test if [ "$(get_machine)" = "x86_64" ] @@ -65,10 +77,10 @@ then -f cc_types.c \ -f cc_core.c \ -f cc.c \ - -o test/test100/proof || exit 4 + -o test/test100/proof || exit 5 out=$(sha256sum -c test/test100/proof.answer) - [ "$out" = "test/test100/proof: OK" ] || exit 5 + [ "$out" = "test/test100/proof: OK" ] || exit 6 [ ! -e bin/M2-Planet ] && mv test/results/test100-binary bin/M2-Planet else cp bin/M2-Planet-gcc bin/M2-Planet diff --git a/test/test100/proof.answer b/test/test100/proof.answer index f22b371..40e68be 100644 --- a/test/test100/proof.answer +++ b/test/test100/proof.answer @@ -1 +1 @@ -3243a9d889030bcdb2d8f7dfde62c41a3d5bd2bdf944328c2eccf1d9a3a7592e test/test100/proof +4715ce02b077c7487b9d131b5581e662f3c15360bd70371b490bf4563193b9bd test/test100/proof diff --git a/test/test21/blood-elf.c b/test/test21/blood-elf.c index 3e655e5..d8681e6 100644 --- a/test/test21/blood-elf.c +++ b/test/test21/blood-elf.c @@ -1,20 +1,20 @@ /* -*- c-file-style: "linux";indent-tabs-mode:t -*- */ /* Copyright (C) 2017 Jeremiah Orians * Copyright (C) 2017 Jan Nieuwenhuizen - * This file is part of MES + * This file is part of mescc-tools * - * MES is free software: you can redistribute it and/or modify + * mescc-tools is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * - * MES is distributed in the hope that it will be useful, + * mescc-tools is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License - * along with stage0. If not, see . + * along with mescc-tools. If not, see . */ #include diff --git a/test/test22/hex2_linker.c b/test/test22/hex2_linker.c index 0eb7cfe..3a375cf 100644 --- a/test/test22/hex2_linker.c +++ b/test/test22/hex2_linker.c @@ -1,20 +1,20 @@ /* -*- c-file-style: "linux";indent-tabs-mode:t -*- */ /* Copyright (C) 2017 Jeremiah Orians * Copyright (C) 2017 Jan Nieuwenhuizen - * This file is part of MES + * This file is part of mescc-tools * - * MES is free software: you can redistribute it and/or modify + * mescc-tools is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * - * MES is distributed in the hope that it will be useful, + * mescc-tools is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License - * along with stage0. If not, see . + * along with mescc-tools. If not, see . */ #include @@ -179,6 +179,7 @@ int Architectural_displacement(int target, int base) if(0 == Architecture) return (target - base); else if(1 == Architecture) return (target - base); else if(2 == Architecture) return (target - base); + else if(40 == Architecture) return (target - base); file_print("Unknown Architecture, aborting before harm is done\n", stderr); exit(EXIT_FAILURE); @@ -221,7 +222,11 @@ void storePointer(char ch, FILE* source_file) displacement = Architectural_displacement(target, base); /* output calculated difference */ - if(33 == ch) outputPointer(displacement, 1); /* Deal with ! */ + if(33 == ch) + { + if(40 == Architecture) outputPointer(displacement - 7, 1); /* Deal with ! */ + else outputPointer(displacement, 1); /* Deal with ! */ + } else if(36 == ch) outputPointer(target, 2); /* Deal with $ */ else if(64 == ch) outputPointer(displacement, 2); /* Deal with @ */ else if(38 == ch) outputPointer(target, 4); /* Deal with & */ @@ -457,7 +462,8 @@ int main(int argc, char **argv) file_print(argv[0], stderr); file_print(" -f FILENAME1 {-f FILENAME2} (--BigEndian|--LittleEndian)", stderr); file_print(" [--BaseAddress 12345] [--Architecture 12345]\nArchitecture", stderr); - file_print(" 0: Knight; 1: x86; 2: AMD64\nTo leverage octal or binary", stderr); + file_print(" 0: Knight; 1: x86; 2: AMD64; 40: armv7", stderr); + file_print("\nTo leverage octal or binary", stderr); file_print(" input: --octal, --binary\n", stderr); exit(EXIT_SUCCESS); } diff --git a/test/test23/M1-macro.c b/test/test23/M1-macro.c index ea8e332..ca357a8 100644 --- a/test/test23/M1-macro.c +++ b/test/test23/M1-macro.c @@ -1,20 +1,20 @@ /* -*- c-file-style: "linux";indent-tabs-mode:t -*- */ /* Copyright (C) 2016 Jeremiah Orians * Copyright (C) 2017 Jan Nieuwenhuizen - * This file is part of stage0. + * This file is part of mescc-tools. * - * stage0 is free software: you can redistribute it and/or modify + * mescc-tools is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * - * stage0 is distributed in the hope that it will be useful, + * mescc-tools is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License - * along with stage0. If not, see . + * along with mescc-tools. If not, see . */ #include @@ -478,7 +478,7 @@ void eval_immediates(struct Token* p) if((NULL == i->Expression) && !(i->type & MACRO)) { int value; - if((1 == Architecture) || (2 == Architecture)) + if((1 == Architecture) || (2 == Architecture) || (40 == Architecture)) { value = numerate_string(i->Text + 1); if(('0' == i->Text[1]) || (0 != value)) @@ -559,7 +559,8 @@ int main(int argc, char **argv) { file_print("Usage: ", stderr); file_print(argv[0], stderr); - file_print(" -f FILENAME1 {-f FILENAME2} (--BigEndian|--LittleEndian) [--BaseAddress 12345] [--Architecture 12345]\nArchitecture 0: Knight; 1: x86; 2: AMD64", stderr); + file_print(" -f FILENAME1 {-f FILENAME2} (--BigEndian|--LittleEndian) ", stderr); + file_print("[--Architecture 12345]\nArchitecture 0: Knight; 1: x86; 2: AMD64; 40: armv7", stderr); exit(EXIT_SUCCESS); } else if(match(argv[option_index], "-f") || match(argv[option_index], "--file")) diff --git a/test/test24/get_machine.c b/test/test24/get_machine.c index d11c93d..22b20ac 100644 --- a/test/test24/get_machine.c +++ b/test/test24/get_machine.c @@ -1,19 +1,19 @@ /* -*- c-file-style: "linux";indent-tabs-mode:t -*- */ /* Copyright (C) 2017 Jeremiah Orians - * This file is part of stage0. + * This file is part of mescc-tools. * - * stage0 is free software: you can redistribute it and/or modify + * mescc-tools is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * - * stage0 is distributed in the hope that it will be useful, + * mescc-tools is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License - * along with stage0. If not, see . + * along with mescc-tools. If not, see . */ @@ -21,7 +21,6 @@ #include #include void file_print(char* s, FILE* f); -char* numerate_number(int a); /* Standard C main program */ int main()