def READ(i):
    x = data.block[i].out
    data.out.append("pushl $" + x)
    data.out.append("pushl $scanFormat")
    register_allocator.save_to_memory()
    data.out.append("call scanf")
    data.out.append("addl $8, %esp")
def READ(i):
    x = data.block[i].out
    data.out.append('pushl $' + x)
    data.out.append('pushl $scanFormat')
    register_allocator.save_to_memory()
    data.out.append('call scanf')
    data.out.append('addl $8, %esp')
def PRINT(i):
    x = data.block[i].out
    debug(x=x)
    try:
        debug(adesc=data.adesc[x])
        data.adesc[x]
        data.out.append("pushl %" + data.adesc[x])
    except:
        data.out.append("pushl " + register_allocator.transform(x))
    data.out.append("pushl $printFormat")
    register_allocator.save_to_memory()
    data.out.append("call printf")
    data.out.append("addl $8, %esp")
def PRINT(i):
    x = data.block[i].out
    debug(x = x)
    try :
        debug(adesc = data.adesc[x])
        data.adesc[x]
        data.out.append('pushl %' + data.adesc[x])
    except :
        data.out.append('pushl ' + x)
    data.out.append('pushl $printFormat')
    register_allocator.save_to_memory()
    data.out.append('call printf')
    data.out.append('addl $8, %esp')
 def block_assembly_generator() :
     '''Generates assembly code for current block. '''
     data.numins = len(data.block)
     debug(numins = data.numins)
     register_allocator.initblock()
     data.print_symbol_table()
     for i in range(0, len(data.block) - 1):
         register_allocator.ini()
         OP_MAP[data.block[i].type](i)
     i = len(data.block) - 1
     if i == -1: return
     if data.block[i].type in {'call', 'ret', 'goto', 'jg', 'je', 'jle', 'jge', 'je', 'jne'}:
         register_allocator.save_to_memory()
         register_allocator.ini()
         OP_MAP[data.block[i].type](i)
     else :
         register_allocator.ini()
         OP_MAP[data.block[i].type](i)
         register_allocator.save_to_memory()
     for line in data.out :
         print ("\t" + line)
 def block_assembly_generator():
     """Generates assembly code for current block. """
     data.numins = len(data.block)
     debug(numins=data.numins)
     register_allocator.initblock()
     data.print_symbol_table()
     for i in range(0, len(data.block) - 1):
         register_allocator.ini()
         OP_MAP[data.block[i].type](i)
     i = len(data.block) - 1
     if i == -1:
         return
     if data.block[i].type in {"call", "ret", "goto", "jg", "je", "jle", "jge", "je", "jne"}:
         register_allocator.save_to_memory()
         register_allocator.ini()
         OP_MAP[data.block[i].type](i)
     else:
         register_allocator.ini()
         OP_MAP[data.block[i].type](i)
         register_allocator.save_to_memory()
     for line in data.out:
         print("\t" + line)
def PRINT_STR(i):
    inno = data.block[i].no
    data.out.append("pushl $" + "str" + str(inno))
    register_allocator.save_to_memory()
    data.out.append("call printf")
    data.out.append("addl $4, %esp")
def PRINT_STR(i):
    inno = data.block[i].no
    data.out.append('pushl $'  + 'str'+ str(inno))
    register_allocator.save_to_memory()
    data.out.append('call printf')
    data.out.append('addl $4, %esp')